Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Tray [D4, D5, D7, WinME, WinXP]


alvin ©   (2002-12-04 12:23:00) 

Мастера, помогите, ложу иконку в TaskBar, но как только навожу на нее мышь она (иконка) исчезает. Что не так?


Song   (2002-12-06 08:34:00) [1]

Поставьте uID равный 1.


alvin   (2002-12-06 07:08:00) [2]

С DefWindowProc у меня вроде все в порядке (не привожу код, чтобы не захламлять место) меня интересует значение uID, в моем случае оно вроде нулевое, может ему надо приписать какое-то другое значение?


alvin   (2002-12-06 07:03:00) [3]

Diamond Cat енто я напортачил вместо WM_CREATE следует ситать WM_DESTROY (здесь темно и клавишь не видно :)


Kiril45   (2002-12-06 01:19:00) [4]

const WM_TRAY = WM_USER + 100;
....
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
Item11: TMenuItem;
Item21: TMenuItem;
Exit1: TMenuItem;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure MouseInTray(var Msg: TMessage); message WM_TRAY;
.....
Tray: TNotifyIconData;
.....
procedure TForm1.FormCreate(Sender: TObject);
begin
with Tray do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle;
uID := 100;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_TRAY;
hIcon := Image1.Picture.Icon.Handle;
szTip := "Тест";
end;
Form1.Caption := "Инспектор сети";
Shell_NotifyIcon(NIM_ADD, @Tray);
end;

procedure TForm1.MouseInTray(var Msg: TMessage);
var P: TPoint;
begin
if Msg.LParam = WM_RBUTTONDOWN then
begin
GetCursorPos(P);
PopupMenu1.Popup(P.X, P.Y);
end;
Application.ProcessMessages;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Application.MessageBox("Завершить программу?","Тест",MB_OKCANCEL)<> IDOK
Then
Action := caNone
else
begin
Shell_NotifyIcon(NIM_DELETE, @Tray);
Action := caFree;
Application.Terminate;
end;
end;


Diamond Cat   (2002-12-05 21:54:00) [5]

может я чего не понял но почему на WM_CREATE следует
Shell_NotifyIcon(NIM_DELETE, @w_tray);


Song   (2002-12-05 15:53:00) [6]

да, сорри, стормозил. А как у Вас устанавливается обработчик окна и где Вы вызываете старый обработчик?


alvin   (2002-12-05 10:35:00) [7]

WM_MYTRAYNOTIFY:
ShowPopup;
WM_DESTROY:
..

(или я чего-то не понял в вопросе)


Song   (2002-12-05 07:35:00) [8]

Это-то понятно. А кто его обрабатывает? Кто обрабатывает WM_MYTRAYNOTIFY?


alvin   (2002-12-05 06:36:00) [9]

Имеете в виду uCallbackMessage?
Вот как это у меня объявлено

const WM_MYTRAYNOTIFY = WM_USER + 123;
var
n:integer;
var w_tray:tNOTIFYICONDATA;
...
...
procedure WndProc(..)
WM_CREATE:
...
Shell_NotifyIcon(NIM_ADD, @w_tray);
WM_MYTRAYNOTIFY:
...
WM_CREATE:
Shell_NotifyIcon(NIM_DELETE, @w_tray);

with w_tray do begin
cbSize := sizeof(tNOTIFYICONDATA);
Wnd := W_WND;
uID := n;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallbackMessage := WM_MYTRAYNOTIFY;
hIcon := Application.Icon.Handle;
szTip:="";


Song   (2002-12-04 13:32:00) [10]

Точнее не связана с сообщением, которое должно обрабатываться у тебя в приложении.


[lamer]Barmaglot   (2002-12-04 13:15:00) [11]

Иконка не связана с приложением, поэтому и исчезает...

а вообще то RTFM: http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988624981&n=15


Наверх

Титульная страница Поиск, карта сайта Написать письмо