Форум: "KOL";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
ВнизПодскажите почему не работает? 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 вся ветка
Форум: "KOL";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c