Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Вниз

как добавить иконку в 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.037 c
3-1089193006
wild_arg
2004-07-07 13:36
2004.08.01
IS_MEMBER vs. WindowsNT User


14-1089050937
Piter
2004-07-05 22:08
2004.08.01
Magic Forum beta4


14-1089804747
YurikGL
2004-07-14 15:32
2004.08.01
Работать что-бы трудиться


14-1089280477
Layner
2004-07-08 13:54
2004.08.01
Грузия - Осетия...


14-1088660822
Kerk
2004-07-01 09:47
2004.08.01
Какой-то американский форум админов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский