![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как добавить иконку в tray? [D7, Win2k]
Alaman © (2004-06-16 19:45:00)Пишу программу. Надо что бы она во время выполнения висела в трее. И когда юзер кликнет мышкой по иконке в трее то программа должна развернутся.
Скачал в инете фак по этому вопросу но там не все понятно.
Написал вот такие процедуры:
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.
grom (2004-06-22 22:46:00) [1]Home Page: http://www.zdima-iv.nm.ru/
Icon
AlexZ_CRC (2004-06-22 21:39:00) [2]2Alaman [9]
Используй:
SendMessage(Хэндл окна,WM_SYSCOMMAND,SC_MINIMIZE,0);
или
ShowWindow(Хэндл окнп,SW_HIDE);
---
SC_RESTORE
или
SW_SHOW для обратного эффекта.
Alaman (2004-06-22 19:47:00) [3]Сделал так:
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;
но и форму как то развенуть.
Так вопрос такой: как мне программно развернуть форму.
grom (2004-06-20 20:40:00) [4]procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm:=false;
end;
Nick Denry (2004-06-20 20:10:00) [5]ЕЩЕ Form1.Visible := false;
или c ShowWindow(Form1.handle,SW_HIDE); эксперементируй..
или c ShowWindow(Application.handle,SW_HIDE);
и стиль форме лучше задать Toolbox...
Alaman (2004-06-20 17:26:00) [6]Большое спасибо! Разобрался. Все работает.
Сейчас возник воопрос как сделать что бы при старте программы не показывалась форма. А форма появлялась бы после клика по иконке в трее? Что бы форма появлялась я уже сделал. А вот что бы при старте форма пряталась - не могу. Нашел вот такой совет:
"научимся скрывать главную форму при запуске приложения. Для этого вам необходимо зайти в пункт меню самой Delphi: Project -> View Source (Проект -> Просм. источник). После чего Вашим глазам откроется содержание файла tray.dpr. Теперь, найдите там строчку
Application.CreateForm(TForm1, Form1);
которая создает главную форму приложения, и, сразу после нее, на следующей строке напишите:
Application.ShowMainForm:=False;
Вот и все! Этой строкой вы запретили показ главной формы приложения при запуске. "
Все так сделал а не работает. При старте форма как и раньше всплывает.
miwa (2004-06-18 06:06:00) [7]Ты блин, серьезные ответы :о(((.
Я аж весь напрягся в ожидании чего-то, что непременно должно вызвать улыбку :о)).
Сам, правда, в винапи людей (тоесть, пока только АП) shellexecute'ом напрягаю :о|.
grom (2004-06-16 21:09:00) [8]http://www.delphiworld.ru/index.php?stat&page=2
---------------------
Секреты иконки в системной трее. Часть 1
Автор: Рустик, Просмотров: 234
Этой статьей я начну свой расскаж о секретах работы с иконкой приложения в системной трее. Эта часть расскажет вам о самом самом начальном: как добавлять/изменять/удалять иконку в трей. А также менять ее параметры во время работы приложения.
---------------------------
Секреты иконки в системной трее. Часть 2
Автор: Рустик, Просмотров: 242
Логическое продолжение предыдущей статьи.
grom (2004-06-16 21:05:00) [9]//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;
Gero (2004-06-16 20:17:00) [10]
> http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988624981&n=15
Тьху... FAQ старое осталось...
А где же то, что Piter писал?
VMcL (2004-06-16 19:54:00) [11]http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988624981&n=15