Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как добавить контрол? [D3, Win95/98]


Cosmic ©   (2002-11-16 21:37:00) 

Есть программа (кажись, с этого сайта :))



program winmin;

uses
windows, messages;

var
wc : TWndClassEx;
MainWnd : HWND;
Mesg : TMsg;

function WindowProc(wnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam):Lresult; stdcall;
Begin
case msg of
wm_destroy :
Begin
postquitmessage(0);
exit;
Result := 0;
End
else
Result := DefWindowProc(wnd,msg,wparam,lparam);
end;
End;


var
xPos,yPos,nWidth,nHeight : Integer;
begin

with wc do
begin
cbSize := sizeof(wc);
style := cs_hredraw or cs_vredraw;
lpfnWndProc := @WindowProc;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := HInstance;
hIcon := LoadIcon(0,idi_application);
hCursor := LoadCursor(0,idc_arrow);
hbrBackground := COLOR_BTNFACE+1;
lpszMenuName := nil;
lpszClassName := "WinMin : Main";
end;

RegisterClassEx(wc);

xPos:=100;
yPos:=150;
nWidth:=400;
nHeight:=250;

MainWnd:=CreateWindowEx (0,"WinMin : Main","Sample",ws_overlappedwindow,xPos,yPos,nWidth,nHeight,0,0,Hinstance,nil);
ShowWindow(MainWnd,CmdShow);

While GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;

end.



1. Надо на созданное окно добавить контрол (ну, скажем, кнопку). Как? И как потом обрабатывать сообщения?
2. Что такое hinstance?


Diamond Cat   (2002-11-18 00:04:00) [1]

а например почитать хелп по CreateWindow и CreateWindowEx


Cosmic   (2002-11-17 18:11:00) [2]

Отлично. А как туда же засунуть меню с парой пунктов (скажем, Shutdown & Exit)?


Александр Павлов   (2002-11-17 05:23:00) [3]

1)Добавь строчки выделенные жирным:

program winmin;

uses
windows, messages;

var
...
Button1: Integer;
...

function WindowProc(wnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam):Lresult; stdcall;
Begin
case msg of
wm_destroy :
Begin
postquitmessage(0);
exit;
Result := 0;
End;
wm_command : begin
if (lParam = Button1) then
MessageBoxA(MainWnd, "Нажата", "Тест", MB_OK);
end


else
Result := DefWindowProc(wnd,msg,wparam,lparam);
end;
End;

...

begin
...
Button1 := CreateWindow("Button", "OK", WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT,
0, 0, 75, 25, MainWnd, 0, hInstance, nil);

...
ShowWindow(MainWnd,CmdShow);
...
end.

Вместо ShowWindow(MainWnd,CmdShow) желательно использовать UpdateWindow(MainWnd).

2) <CTL>+<F1>


Наверх

Титульная страница Поиск, карта сайта Написать письмо