Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.01;
Скачать: CL | DM;

Вниз

как добавить иконку в tray?   Найти похожие ветки 

 
Alaman   (2004-06-16 19:45) [0]

Пишу программу. Надо что бы она во время выполнения висела в трее. И когда юзер кликнет мышкой по иконке в трее то программа должна развернутся.
Скачал в инете фак по этому вопросу но там не все понятно.
Написал вот такие процедуры:

procedure TrayAdd();
var p:PNOTIFYICONDATA;
   n: word;
begin
 n:=RegisterWindowMessage(#0);
 p.cbSize:= ? ; что здесь писать непонятно
 p.Wnd:=Form1.Handle;
 p.uID:=1;
 p.uFlags:=NIF_MESSAGE or NIF_ICON;
 p.uCallbackMessage:=n;
 p.hIcon:=Form1.Icon.Handle;
 Shell_NotifyIcon( NIM_ADD, p );
end;

procedure TrayDelete();
var p:PNOTIFYICONDATA;
begin
 p.Wnd:=Form1.Handle;
 p.uID:=1;
 Shell_NotifyIcon( NIM_DELETE, p );
end;

Вроде работает. Иконку в трей добавляет. Но при завершении работы программы выходят ошибки. И не понятно что писать в строке
p.cbSize:= ?
Подскажите если кто знает.
Работаю на Дельфи 7 Виндовс2000.


 
VMcL ©   (2004-06-16 19:54) [1]

http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988624981&n=15


 
Gero ©   (2004-06-16 20:17) [2]


> http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988624981&n=15

Тьху... FAQ старое осталось...
А где же то, что Piter писал?


 
grom   (2004-06-16 21:05) [3]

//vvvvvvvvvvvv/ Add Modify Delete Icon /vvvvvvvvvvvvvvv
function AddModDelIcon(wnd:HWND;R,NIco:integer;Icon:HICON;S:string):Boolean;
var n:TNotifyIconData;
begin
 n.cbSize:=SizeOf(TNotifyIconData);
 n.Wnd:=wnd;
 n.uID:=NIco;
 n.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
 n.uCallbackMessage:=WM_USER;
 n.hIcon := Icon;
 Lstrcpyn(n.szTip,PChar(S),SizeOf(n.szTip));
 if R=1 then Result:=Shell_NotifyIcon(NIM_ADD,@n);
 if R=2 then Result:=Shell_NotifyIcon(NIM_MODIFY,@n);
 if R=3 then Result:=Shell_NotifyIcon(NIM_DELETE,@n);
end;


 
grom   (2004-06-16 21:09) [4]

http://www.delphiworld.ru/index.php?stat&page=2
---------------------
Секреты иконки в системной трее. Часть 1
 Автор: Рустик, Просмотров: 234
Этой статьей я начну свой расскаж о секретах работы с иконкой приложения в системной трее. Эта часть расскажет вам о самом самом начальном: как добавлять/изменять/удалять иконку в трей. А также менять ее параметры во время работы приложения.
---------------------------
Секреты иконки в системной трее. Часть 2
 Автор: Рустик, Просмотров: 242
Логическое продолжение предыдущей статьи.


 
miwa ©   (2004-06-18 06:06) [5]

Ты блин, серьезные ответы :о(((.
Я аж весь напрягся в ожидании чего-то, что непременно должно вызвать улыбку :о)).
Сам, правда, в винапи людей (тоесть, пока только АП) shellexecute"ом напрягаю :о|.


 
Alaman   (2004-06-20 17:26) [6]

Большое спасибо! Разобрался. Все работает.
Сейчас возник воопрос как сделать что бы при старте программы не показывалась форма. А форма появлялась бы после клика по иконке в трее? Что бы форма появлялась я уже сделал. А вот что бы при старте форма пряталась - не могу. Нашел вот такой совет:
"научимся скрывать главную форму при запуске приложения. Для этого вам необходимо зайти в пункт меню самой Delphi: Project -> View Source (Проект -> Просм. источник). После чего Вашим глазам откроется содержание файла tray.dpr. Теперь, найдите там строчку
   Application.CreateForm(TForm1, Form1);
которая создает главную форму приложения, и, сразу после нее, на следующей строке напишите:  
       Application.ShowMainForm:=False;
Вот и все! Этой строкой вы запретили показ главной формы приложения при запуске. "
Все так сделал а не работает. При старте форма как и раньше всплывает.


 
Nick Denry ©   (2004-06-20 20:10) [7]

ЕЩЕ Form1.Visible := false;

или c ShowWindow(Form1.handle,SW_HIDE); эксперементируй..
или c ShowWindow(Application.handle,SW_HIDE);

и стиль форме лучше задать Toolbox...


 
grom   (2004-06-20 20:40) [8]

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm:=false;
end;


 
Alaman   (2004-06-22 19:47) [9]

Сделал так:

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.ShowMainForm:=false;
...
end;

Работает, при старте программы форму не видно.
Теперь надо сделать так: когда юзер кликнет на пиктограмму
"свернуть" что б форма пропадала, а когда кликнет на иконке в
трее что б снова появлялась.

Сделал так:
procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnMinimize := Minimize;
 Application.ShowMainForm:=false;
...
end;

procedure TForm1.Minimize(Sender: TObject);
begin
Form1.Visible:=false;
end;

В принципе работает но есть небольшая загвоздка.
При старте проги формы нет, кликаю на трее - форма появляется,
дальше кликаю "свернуть" форма исчезает, кликаю на трее - появляется,
кликаю "свернуть" - опа  и не исчезает и не сворачивается.
Я так понимаю: на втором сворачивании форма уже свернутая(я ж ее не
разворачивал) поэтому это событие просто не обраьатывается.
Т.е. мне после клика по трее надо не только  Form1.Visible:=true;
но и форму как то развенуть.
Так вопрос такой: как мне программно развернуть форму.


 
AlexZ_CRC   (2004-06-22 21:39) [10]

2Alaman [9]
Используй:
SendMessage(Хэндл окна,WM_SYSCOMMAND,SC_MINIMIZE,0);
или
ShowWindow(Хэндл окнп,SW_HIDE);
---
SC_RESTORE
или
SW_SHOW для обратного эффекта.


 
grom   (2004-06-22 22:46) [11]

Home Page: http://www.zdima-iv.nm.ru/
  Icon



Страницы: 1 вся ветка

Текущий архив: 2004.08.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.053 c
1-1089474717
SeDOy
2004-07-10 19:51
2004.08.01
Управление mdi-окнами


3-1089027525
jenya_d
2004-07-05 15:38
2004.08.01
Утилиты администрирования MS SQL 2000


14-1089771722
Думкин
2004-07-14 06:22
2004.08.01
С днем рождения! 14 июля


14-1089339637
Думкин
2004-07-09 06:20
2004.08.01
С днем рождения! 9 июля


1-1089872424
Amid
2004-07-15 10:20
2004.08.01
Помогите !!!!! В процедуре Execute не работает Memo1.Lines.Add()