Форум: "WinAPI";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Внизвторое окно на API-очереди,сделать окно Найти похожие ветки
← →
EXE7 (2004-03-09 11:45) [0]Одно окно делается просто,типа
RegisterClassEx(wc);
MainWnd:=CreateWindowEx
While GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
нормально-показывается.
А вот еще окно сделать не получается.
делал в dpr ссылку на второе окно
form2 in form2.pas
но типа некатит,либо некомпилится,
либо при запуске показывается только вторая форма.
может поток нужен?
← →
Игорь Шевченко © (2004-03-09 11:55) [1]
> но типа некатит,либо некомпилится,
Ты совсем не уважаешь участников форума ?
← →
EXE7 (2004-03-09 12:06) [2]>Ты совсем не уважаешь участников форума ?
УВАЖАЮ
=но типа некатит
в случае в 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 12:09) [3]
> А вот еще окно сделать не получается.
> делал в dpr ссылку на второе окно
> form2 in form2.pas
> но типа некатит,либо некомпилится,
> либо при запуске показывается только вторая форма.
> может поток нужен?
Код в студию (целиком)
← →
EXE7 (2004-03-09 12:19) [4]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 13:36) [5]Убери из unit2 цикл с GetMessage
← →
EXE7 (2004-03-09 15:29) [6]попробую
Может надо в потоке другое окно делать
СreateThread
← →
Игорь Шевченко © (2004-03-09 15:35) [7]
> Может надо в потоке другое окно делать
> СreateThread
А нафига ?
← →
EXE7 (2004-03-09 15:54) [8]а может не получится у каждого окна вроде
надо очередь вырабатывать(),
типа
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
чтоб дышало,двигалось,обрабатывало сообщения
← →
Игорь Шевченко © (2004-03-09 16:04) [9]EXE7 (09.03.04 15:54)
> у каждого окна вроде
> надо очередь вырабатывать
У каждого потока. Окон у потока может быть сколько угодно, одна очередь на все окна.
← →
EXE7 (2004-03-09 21:52) [10]Получилось!
у form2.pas убрать
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
имя классов окон form1 form2 должно различатся
но в wc.lpszClassName и CreateWindowEx должно
одинаково в модуле (main1 - main1,main2 - main2).
Все работает.Спасибо Игорю Шевченко
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.036 c