Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

второе окно на 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 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
1-1081755051
fatal
2004-04-12 11:30
2004.05.02
Scroll мыши над компонентом.


1-1082117419
Serge
2004-04-16 16:10
2004.05.02
DecimalSeparator !! ?????


3-1081251462
Fishka
2004-04-06 15:37
2004.05.02
Excel и SUMIF


3-1080901697
Skulll
2004-04-02 14:28
2004.05.02
Веб клиент на PHP, ASP, JSP или CGI


1-1082229051
[BAD]Angel
2004-04-17 23:10
2004.05.02
PopUpMenu