Форум: "WinAPI";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизКак с помощю API создать обработчик нажатия Button-а. Найти похожие ветки
← →
BKGG (2003-12-17 20:06) [0]В sdk написанно что "The BN_CLICKED notification message is sent when the user clicks a button. The parent window of the button receives this notification message through the WM_COMMAND message." Я написаль вот следующий код но он не работает и видает ошибку Runtime error 216 at 044...
program winmin;
uses
windows,
messages;
var wc:wndclassex;
mainwnd,btnwnd:hwnd;
mesg:msg;
function windowproc(wnd:hwnd; msg:integer; wparam:wparam;
lparam:lparam):lresult; stdcall;
var hd:hdc;
ps:paintstruct;
rc:trect;
rc2:prect;
begin
case msg of
wm_destroy: begin
postquitmessage(0);
result:=0;
end;
wm_paint : begin
hd:=Beginpaint(wnd,ps);
getclientrect(wnd,rc);
fillrect(hd,rc,rgb(0,0,0));
drawtext(hd, "Hellow!", -1, rc, dt_center);
endpaint(wnd,ps);
result:=0;
end;
wm_command :begin
getclientrect(mainwnd,rc);
rc2.Left:=rc.Left;
rc2.Top:=rc.Top;
rc2.Right:=rc.Right;
rc2.Bottom:=rc.Bottom;
invalidaterect(mainwnd,rc2,false);
hd:=beginpaint(mainwnd,ps);
drawtext(hd,"BBBBB ", -1, rc, dt_right);
endpaint(mainwnd,ps);
result:=0;
end;
else result:=defwindowproc(wnd,msg,wparam,lparam);
end;
end;
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_application);
wc.hCursor:=loadcursor(0,idc_arrow);
wc.hbrBackground:=rgb(0,0,0);
wc.lpszMenuName:=nil;
wc.lpszClassName:="winmain";
registerclassex(wc);
mainwnd:=createwindowex(0,
"winmain",
"winmain",
ws_overlappedwindow,
100,
100,
700,
500,
0,
0,
hinstance,
nil);
btnwnd:= createwindowex(0,
"Button",
"OK",
ws_child or bs_defpushbutton,
20,
20,
40,
25,
mainwnd,
0,
hinstance,
nil);
showwindow(mainwnd, sw_show);
showwindow(btnwnd, sw_show);
while getmessage(mesg,0,0,0) do
begin
translatemessage(mesg);
dispatchmessage(mesg);
end;
end.
← →
Rouse_ (2003-12-18 12:47) [1]
{rc2^.Left:=0;//rc.Left;
rc2^.Top:=rc.Top;
rc2^.Right:=rc.Right;
rc2^.Bottom:=rc.Bottom; }
rc2 := @rc;
Желаю успехов
← →
Rouse_ (2003-12-18 12:50) [2]Или еще проще:
wm_command :begin
getclientrect(mainwnd,rc);
invalidaterect(mainwnd,@rc,false);
hd:=beginpaint(mainwnd,ps);
drawtext(hd,"BBBBB ", -1, rc, dt_right);
endpaint(mainwnd,ps);
result:=0;
end;
Желаю успехов
← →
Rouse_ (2003-12-18 12:55) [3]А ошибка твоя была в том, что ты не выделял память перед использованием rc2, например вот так:
GetMem(rc2, SizeOf(prect));
PS: Соответственно после использования ее необходимо освободить: FreeMem(rc2);
← →
BKGG (2003-12-18 16:31) [4]Rouse_ >> Большое спасибо
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.031 c