Форум: "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.48 MB
Время: 0.524 c