![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
второе окно на API-очереди,сделать окно [D4, Win95/98]
EXE7 © (2004-03-09 11:45:00)Одно окно делается просто,типа
RegisterClassEx(wc);
MainWnd:=CreateWindowEx
While GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
нормально-показывается.
А вот еще окно сделать не получается.
делал в dpr ссылку на второе окно
form2 in form2.pas
но типа некатит,либо некомпилится,
либо при запуске показывается только вторая форма.
может поток нужен?
EXE7 (2004-03-09 21:52:00) [1]Получилось!
у form2.pas убрать
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
имя классов окон form1 form2 должно различатся
но в wc.lpszClassName и CreateWindowEx должно
одинаково в модуле (main1 - main1,main2 - main2).
Все работает.Спасибо Игорю Шевченко
Игорь Шевченко (2004-03-09 16:04:00) [2]EXE7 (09.03.04 15:54)
> у каждого окна вроде
> надо очередь вырабатывать
У каждого потока. Окон у потока может быть сколько угодно, одна очередь на все окна.
EXE7 (2004-03-09 15:54:00) [3]а может не получится у каждого окна вроде
надо очередь вырабатывать(),
типа
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
чтоб дышало,двигалось,обрабатывало сообщения
Игорь Шевченко (2004-03-09 15:35:00) [4]
> Может надо в потоке другое окно делать
> СreateThread
А нафига ?
EXE7 (2004-03-09 15:29:00) [5]попробую
Может надо в потоке другое окно делать
СreateThread
Игорь Шевченко (2004-03-09 13:36:00) [6]Убери из unit2 цикл с GetMessage
EXE7 (2004-03-09 12:19:00) [7]pp.dpr
form1 in form1.pas,
form2 in form2.pas;
unit form1;
interface
uses
windows, messages,form2;
implementation
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;
Style: Longint;
begin
wc.cbSize:=sizeof(wc);
wc.style:=CS_GLOBALCLASS;//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:=COLOR_BTNFACE+1;
wc.lpszMenuName:=nil;
wc.lpszClassName:='WinMin : Main1';
RegisterClassEx(wc);
xPos:=400;
yPos:=150;
nWidth:=400;
nHeight:=250;
MainWnd:=CreateWindowEx (
0,
'WinMin : Main',
'Win Min',
{ws_overlappedwindow }
WS_OVERLAPPEDWINDOW or
WS_VISIBLE,
xPos,
yPos,
nWidth,
nHeight,
0,
0,
Hinstance,
nil
);
ShowWindow(MainWnd,SW_SHOWNOACTIVATE); //Отображаем окно 1
CreateForm2;// вызов второго окна2
While GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
end.
//-------------------------------------------------------------
unit form2;
interface
uses
windows, messages;
implementation
var
wc : TWndClassEx;
MainWnd : HWND;
Mesg : TMsg;
function WindowProc2(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;
Style: Longint;
procedure CreateForm2;
begin
wc.cbSize:=sizeof(wc);
wc.style:=CS_GLOBALCLASS;//cs_hredraw or cs_vredraw;
wc.lpfnWndProc:=@WindowProc2;
wc.cbClsExtra:=0;
wc.cbWndExtra:=0;
wc.hInstance:=HInstance;
wc.hIcon:=LoadIcon(0,idi_application);
wc.hCursor:=LoadCursor(0,idc_arrow);
wc.hbrBackground:=COLOR_BTNFACE+1;
wc.lpszMenuName:=nil;
wc.lpszClassName:='WinMin : Main';
RegisterClassEx(wc);
xPos:=100;
yPos:=150;
nWidth:=400;
nHeight:=250;
MainWnd:=CreateWindowEx (
0,
'WinMin : Main',
'Win Min',
{ws_overlappedwindow }
WS_OVERLAPPEDWINDOW or
WS_VISIBLE,
xPos,
yPos,
nWidth,
nHeight,
0,
0,
Hinstance,
nil
);
//wm_SetRedraw
ShowWindow(MainWnd,SW_SHOWNOACTIVATE{CmdShow}); //Отображаем окно
While GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
end;
end.
Игорь Шевченко (2004-03-09 12:09:00) [8]
> А вот еще окно сделать не получается.
> делал в dpr ссылку на второе окно
> form2 in form2.pas
> но типа некатит,либо некомпилится,
> либо при запуске показывается только вторая форма.
> может поток нужен?
Код в студию (целиком)
EXE7 (2004-03-09 12:06:00) [9]>Ты совсем не уважаешь участников форума ?
УВАЖАЮ
=но типа некатит
в случае в dpr
form1 in form.pas,
form2 in form2.pas;
в form1
uses ....form2,
компилится,при выполнении-показывается только второе окно
вероятно из-за того,что не может быть 2 main^a
=либо некомпилится,
в случае в dpr
form1 in form.pas,
form2 in form2.pas;
в form2 не main
как begin
а облекаю в процедуру procedure Fm;
и в form1.pas
до обработки очереди
Fm; // < запуск процедуры из Form2.pas
While GetMessage(Mesg,0,0,0) do
здесь компиляции нет ,ссылка на form2 есть (uses ...form2)
Игорь Шевченко (2004-03-09 11:55:00) [10]
> но типа некатит,либо некомпилится,
Ты совсем не уважаешь участников форума ?