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

Вниз

Подскажите почему не работает? Applet.OnMessage   Найти похожие ветки 

 
APXi ©   (2003-11-25 02:15) [0]

Вот код.
При создании приложения как я понимаю должны выдаваться сообщение "WM_Create", соответсвенно при завершении "WM_DESTROY", а ничего нету, почему?

program test;
uses
 windows,
 messages,
 kol;

Var
 frmProperties : PControl;
 Panel : pControl;
 Tray : pTrayIcon;
 Menu : pMenu;

 // ==============================================================
 procedure MyMessageBox(str:String);
 begin
   MessageBox(applet.Handle, PChar(Str), "Message", mb_ok);
 end;

 // ===================================================================
 procedure OnClickPopupMenu(Dummy : pointer; Sender : pMenu; Item : Integer);
 begin
   case Item of
     0: Applet.Close();
   end;{case}
 end;

 // ===================================================================
 Function OnAppletMessage(Self: PObj; var Msg: TMsg; var Rslt: Integer):Boolean;
 begin
   case Msg.message of
     WM_Create: MyMessageBox("WM_Create");
     WM_DESTROY: MyMessageBox("WM_DESTROY");
     WM_MOVE: MyMessageBox("WM_MOVE");
   end;
   Result := true;
 end;

 // ===================================================================
 procedure OnClickTray(dummy:pointer; sender:Tobject; Message:Word);
 var P:Tpoint;
 begin
   if message = WM_LBUTTONUP then
   begin
     GetCursorPos(p);
     Menu.PopUp(p.x,p.y);
   end;
 end;

begin
 Applet := NewApplet("");
 frmProperties:=NewForm(Applet, "");
 panel := NewPanel(Applet, esNone);
 Menu := NewMenu(Panel, 0, ["Выход"], TOnMenuItem(MakeMethod( nil, @OnClickPopupMenu)));

 Tray := NewTrayIcon(Panel, frmProperties.Icon);
 Tray.OnMouse := TOnTrayIconMouse(Makemethod(nil, @OnClickTray));

 Applet.OnMessage := TOnMessage(Makemethod(nil, @OnAppletMessage));
 Run(frmProperties);
end.


 
Fktrc ©   (2003-11-25 06:15) [1]

По-моему функцию обработки сообщений в твоем случае полагается писать так

Function OnAppletMessage(Self: PObj; var Msg: TMsg; var Rslt: Integer):Boolean;
begin
  Result := false; // !!!!
  case Msg.message of
    WM_Create: MyMessageBox("WM_Create");
    WM_DESTROY: MyMessageBox("WM_DESTROY");
    WM_MOVE: MyMessageBox("WM_MOVE");
  end;
end;


 
azsd ©   (2003-11-25 06:59) [2]

yes Result point whether you processed the message,
so I think it is better to add Result:=True; after call each MyMessagebox.


 
SPeller ©   (2003-11-25 09:17) [3]

1) В обработчике сообщения должно стоять Result := False; для того чтобы щла дальшейшая обработка этого сообщения. В твоём же случае ты отлавливаешь и не пускаешь дальше все сообщения, которые доходят до AppletOnMessage.
2) WM_CREATE не приходит потому что окно аплета создаётся у тебя раньше назначения обработчика.
3) Вероятно, что из-за того что ты отлавливаешь все сообщения без разбору не приходит и WM_DESTROY. Либо, обработчик сообщений отключается при появлении этого сообщения и вызывается какой-нить OnClose или OnDestroy.


 
APXi ©   (2003-11-25 19:10) [4]

Все равно не идет.


 
Vladimir Kladov   (2003-11-25 20:33) [5]

Run(frmProperties);
почему не Run(Applet); ? Как он будет ловить сообщения вообще?


 
APXi ©   (2003-11-26 20:52) [6]

Спасибо. Работает.



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.033 c
9-1059490261
Rooo
2003-07-29 18:51
2004.05.16
Как поставить GlScene 09b на Delphi 7?


3-1082610665
Санёк
2004-04-22 09:11
2004.05.16
Как не вставлять пустую запись?


8-1077816064
evrey
2004-02-26 20:21
2004.05.16
Получение цвета пикселя в изображении.


14-1082632846
vopros
2004-04-22 15:20
2004.05.16
Не могу завести компьютер с XP в домен.


14-1082931343
Yanis
2004-04-26 02:15
2004.05.16
PHP