Форум: "Основная";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];
ВнизСобытие при клике на иконке в трее Найти похожие ветки
← →
Осирис (2002-10-01 13:51) [0]Добрый день:
Поместил иконку в трей вот таким способом:
function TaskBarAddIcon( hWindow : THandle; ID : Cardinal; ICON : hicon;
CallbackMessage : Cardinal; Tip : String ) : Boolean;
var NID : TNotifyIconData;
begin
FillChar( NID, SizeOf( TNotifyIconData ), 0 );
with NID do
begin
cbSize := SizeOf( TNotifyIconData );
Wnd := hWindow;
uID := ID;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallbackMessage := CallbackMessage;
hIcon := Icon;
if Length( Tip ) > 63 then SetLength( Tip, 63 );
StrPCopy( szTip, Tip );
end;
Result := Shell_NotifyIcon( NIM_ADD, @NID );
end;
-------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var icon : TICON;
hic : HICON;
begin
FHwnd:=AllocateHwnd(TrayWndProc);
icon:=TIcon.Create;
icon.LoadFromFile("d:\_s_Garbage\new.ico");
if Icon <> nil then hIc := Icon.handle
{$IFDEF WIN32}
else hIc := INVALID_HANDLE_VALUE;
{$ELSE}
else hIc := 0;
{$ENDIF}
TaskBarAddIcon(Form1.Handle, 1, hic, KREY_TRAYICON, "iCONNN");
end;
-----
procedure TForm1.FormCreate(Sender: TObject);
begin
KREY_TRAYICON:=RegisterWindowMessage("test");
end;
Теперь хочу обрабатывать события поступающие от иконки в трее. Делаю так:
procedure Tform1.TrayWndProc(var Message:TMessage);
var CurPos:Tpoint;
i,index:integer;
begin
with Message do
begin
If (Msg=KREY_TRAYICON) then
begin
WM_LBUTTONDBLCLK:
begin
end;
WM_RBUTTONDOWN:
end;
end;
end;
end;
Запускаю. Нажимаю на кнопку - в трее появляется иконка. Щелкаю на ней - в отладчике видно, что выполняется процедура
procedure Tform1.TrayWndProc(var Message:TMessage);
Но вот это условие никогда не выполняется:
If (Msg=KREY_TRAYICON) then
В чем может быть дело ?
P.S Пожалуйста не советуйте смотреть RXLib - уже смотрел.
← →
Петя (2002-10-01 14:27) [1]FHwnd:=AllocateHwnd(TrayWndProc);
Где используешь ?
← →
Осирис (2002-10-01 14:40) [2]Был не прав - поправил:
Теперь так:
в onCreate формы :
FHwnd:=AllocateHwnd(TrayWndProc);
в clicked Button1 при помещении иконки:
TaskBarAddIcon(FHwnd, 1, hic, KREY_TRAYICON, "iCONNN");
Сама процедура:
with Message do
begin
if (Msg<>Krey_TrayIcon) then
Result:=DefWindowProc(FHwnd,msg,wparam,lparam);
If (Msg=KREY_TRAYICON) then
begin
Вроде все стало ОК.
Спасибо за помощь :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c