Главная страница
    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.46 MB
Время: 0.028 c
1-79767
Alex732
2004-02-11 11:01
2004.02.25
как узнать, сколько осталось времени до события onTimer


1-79884
8ung
2004-02-09 20:54
2004.02.25
Слишком медленная работа с файлами.


1-79791
SoftFM
2004-02-11 14:55
2004.02.25
Макрос


14-80097
sad
2004-02-02 09:49
2004.02.25
Вопрос


14-80160
Ig
2004-01-30 19:56
2004.02.25
Что за вирус ходит, бродит?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский