Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
9-1072825408
Jenaxx
2003-12-31 02:03
2004.05.16
КТо нить может помочь переделать прогу,


3-1082558009
Masa
2004-04-21 18:33
2004.05.16
Как узнать, что юзверь передвинулся на другую запись в датасете ?


3-1081818147
Sirgfine
2004-04-13 05:02
2004.05.16
Сортировка в TTable


1-1083688521
Влад Сташневский
2004-05-04 20:35
2004.05.16
Узнать адрес в программе вызова процедуры


14-1083006156
ЧупаЧупс
2004-04-26 23:02
2004.05.16
Оформление




   Наверх