Delphi: преобразование типов

0000

var
My: NM_TREEVIEW;
...
SendMessage(..,...,Integer(@My0) - отравили.
Получаем wParam=Cardinal.
Как получить содержимое по My?
То есть как получить по указателю (хендлу?) саму переменную?

vijrel7878

wParam^

yolki

Правильнее было бы преобразовать сначала wParam к PInteger. чтоб чище было и хинтов не было

0000

А как это в коде выглядит? - что то не получается никак.
Может кто еще подскажет как MainMenu изобразить (или самому ручками рисовать только?)
Вот мой код
----------
program a;
uses
windows,
messages, commctrl;
const
WM_MYMSG=WM_USER+2;
var
wc : TWndClassEx;
MainWnd,MyWnd: HWND;
Mesg : TMsg;
Ch: String;
My: NM_TREEVIEW;
function WindowProc(Wnd: HWND; Msg : Integer; wParam: wParam; lParam:lParam): lResult; stdcall;
begin
case Msg of
WM_DESTROY:
begin
postquitmessage(0);
exit;
end;
WM_COMMAND:
begin
My.hdr.hwndFrom:=MyWnd;
SendMessage(MainWnd,WM_MYMSG,Integer(@My0);
end;
WM_MYMSG:
begin
//Получить параметр My надо тут!
Messagebox(0,'hhh','Tst',0);
end;
else Result:=DefWindowProc(Wnd,Msg,wParam,lParam);
end;
end;
var
xPos,yPos,nWidth,nHeight : Integer;
begin
wc.cbSize:=sizeof(wc);
wc.style:=cs_hredraw or cs_vredraw;
wc.lpfnWndProc:=@WindowProc;
wc.cbClsExtra:=0;
wc.cbWndExtra:=0;
wc.hInstance:=HInstance;
wc.hIcon:=LoadIcon(0,idi_winlogo);
wc.hCursor:=LoadCursor(0,idc_arrow);
wc.hbrBackground:=COLOR_BTNFACE+2;
wc.lpszMenuName:=nil;
wc.lpszClassName:='aWnd';
RegisterClassEx(wc);
xPos:=200;
yPos:=250;
nWidth:=365;
nHeight:=345;
MainWnd:=
CreateWindowEx (0,'aWnd','test',ws_overlapped or WS_SYSMENU or WS_VISIBLE or WS_BORDER,xPos,yPos,nWidth,nHeight,0,0,Hinstance,nil);
MyWnd:=createWindow('button','Push',WS_CHILD or WS_VISIBLE ,100,100, 50,30,MainWnd,5,hInstance,nil);
Ch:='aaaaa';
While GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
end.

vijrel7878

компонент сдандартный есть TMenu. Кладешь его на свою форму и получаешь mainmenu
p.s. Ну если ты, конечно, не в api программишь
Оставить комментарий
Имя или ник:
Комментарий: