![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго времени суток, у меня такая проблема нужно чтобы программа сворачивалась в трей... Где уже только не искал, сумел сделать только чтобы во время работы программы в трее отображался значок, но чтобы можно было свернуть саму программу в трей я найти не где не смог... Заранее спасибо
|
|
#2
|
||||
|
||||
|
используй компанент - CoolTrayIcon
и читай фак на этом сайте. |
|
#3
|
|||
|
|||
|
Можно без него, хотя с ним проще.
Фактически, сворачивание в трей - это простановка SHowMainForm у Application. Ну а иконка в трее - читай MSDN - там все просто, всего 2 функции, если тебе надо только значек показать или спрятать и еще обработчик сообщений, если хочешь реагировать на клики по иконке. |
|
#4
|
|||
|
|||
|
я использую этот код:
Код:
.....
type
TForm1 = class(TForm)
......
public
procedure CREATETRAYICON(n:integer);
procedure DELETETRAYICON(n:integer);
procedure WMICON(var msg:Tmessage); message WM_MYTRAYNOTIFY;
procedure WMSYSCOMMAND(var msg:Tmessage);message WM_SYSCOMMAND;
procedure HIDEmainForm;
procedure RestoreMainForm;
.....
procedure TForm1.WMSYSCOMMAND(var msg:Tmessage);
begin
inherited;
if (msg.WParam=SC_MINIMIZE) then
begin
hidemainform;
// createtrayicon(1); иконку можно создать при запуске а не только при сворачивании
end;
end;
procedure TForm1.HIDEmainForm;
begin
application.ShowMainForm:=false;
ShowWindow(application.Handle, SW_HIDE);
ShowWindow(application.Mainform.Handle, SW_HIDE);
end;
procedure TForm1.RestoreMainForm;
var i,j:integer;
begin
application.ShowMainForm:=true;
ShowWindow(application.Handle, SW_RESTORE);
ShowWindow(application.Mainform.Handle, SW_RESTORE);
if not ShownOnce then
begin
for i:= 0 to application.MainForm.ComponentCount -1 do
if application.MainForm.Components[i] is Twincontrol then
with application.MainForm.Components[i] as Twincontrol do
if visible then
begin
showWindow(handle, SW_SHOWDEFAULT);
for j:=0 to componentcount -1 do
if components[j] is twincontrol then
showWindow((components[j] as Twincontrol).handle,SW_SHOWDEFAULT);
end;
shownonce:=true;
end;
end;
procedure TForm1.CREATETRAYICON(n:integer);
var nidata:TnotifyIcondata;
begin
with nidata do
begin
cbSize:=Sizeof(TnotifyIcondata);
Wnd:=Self.Handle;
uId:=n;
uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage:=WM_MYTRAYNOTIFY;
hIcon:=Application.Icon.Handle;
szTip:='подсказка';
end;
Shell_notifyIcon(NIM_ADD,@nidata);
////
end;
procedure TForm1.WMICON(var msg:Tmessage);
var p:Tpoint;
begin
case msg.LParam of
WM_RBUTTONDOWN: begin
getcursorpos(p);
setForegroundWindow(application.MainForm.Handle);
sysMenu.Popup(p.X,p.Y);
end;
end
///
end;
procedure TForm1.DELETETRAYICON(n:integer);
var nidata:TnotifyIcondata;
begin
with nidata do
begin
cbSize:=Sizeof(TnotifyIcondata);
Wnd:=Self.Handle;
uId:=n;
end;
Shell_notifyIcon(NIM_DELETE,@nidata);
end;
после события формы FormCreate
делаем
form1.CREATETRAYICON(1);
и
form1.hidemainform;
а в событии OnClick одного из пунктов sysMenu
делаем
restoremainform;
|