Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-79865
h0use
2004-02-09 16:58
2004.02.25
Работа в D8


1-79885
Budy
2004-02-10 07:31
2004.02.25
String to Real


11-79692
Кладов
2003-06-05 09:27
2004.02.25
Совместимость MCK-проектов с FPC


1-80019
NailMan
2004-02-09 11:33
2004.02.25
Показ модальной формы из DLL


1-79929
senya
2004-02-06 18:03
2004.02.25
Выдает сообщение Out Of Memory





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский