Вниз
Скачать: 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.009 c
4-32112
anod
2002-08-22 18:00
2002.10.10
GetOpenFileName


3-31593
Brestmarket.com
2002-09-18 15:54
2002.10.10
Как вставить в ячейку DBGrid http-link и email-link и обработать


8-31907
Subfire
2002-06-11 14:04
2002.10.10
А TImage в Delphi6 глючный :)


7-32032
Stain
2002-07-30 19:54
2002.10.10
NT DDK


3-31620
KIR
2002-09-18 11:03
2002.10.10
Снова о Paradox vs IB




   Наверх