Вниз
Скачать: CL | DM;

Событие при клике на иконке в трее   Найти похожие ветки 

 
Осирис ©   (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 вся ветка

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



Память: 0.45 MB
Время: 0.01 c
1-31900
BIG BROTHER
2002-09-23 20:34
2002.10.10
OPEN FOLDER


14-31986
NetBreaker666
2002-09-14 14:43
2002.10.10
Да, и мона еще одну просьбу.


3-31621
Glivinsky
2002-09-18 12:35
2002.10.10
IB За и против использования доменов/Как пишется генератор...


1-31760
Zergling
2002-10-01 08:41
2002.10.10
Критические секции в потоке


1-31781
XED
2002-10-02 02:08
2002.10.10
Дерево каталогов!!!




   Наверх