Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-1082288709
Falcon(TFSoft)
2004-04-18 15:45
2004.05.02
Как мне создать объект, конструктору которого необходимо передать


1-1082145132
NeyroSpace
2004-04-16 23:52
2004.05.02
Поток и все все все...


14-1081253852
Andryk
2004-04-06 16:17
2004.05.02
Есть вопросец ! Есть ли какая-нибудь приблуда (программа),


7-1079255336
threeve
2004-03-14 12:08
2004.05.02
Shut down


14-1081706466
smb
2004-04-11 22:01
2004.05.02
кто-нибудь знает?





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