Форум: "Основная";
Текущий архив: 2002.08.26;
Скачать: [xml.tar.bz2];
ВнизВопрос по минимизации окна! Найти похожие ветки
← →
I__am (2002-08-14 09:55) [0]Доброй ночи мастера! Подскажите, плиз, как мне сделать, чтобы форма минимизировалась в SysTray, например по двойному клику по форме? Заранее благодарю!
← →
Vogul (2002-08-14 10:48) [1]
procedure TMainForm.FormDblClick(Sender: TObject);
begin
Hide;
RxTrayIcon1.Show;
end;
procedure TMainForm.FormShow(Sender: TObject);
begin
RxTrayIcon1.Hide;
end;
procedure TMainForm.RxTrayIcon1DblClick(Sender: TObject);
begin
Show;
end;
← →
alena.svt (2002-08-14 11:00) [2]>Vogul
а может человек ручками хочет без посторонних библиотек, а RxTrayIcon не самая удачная компонента для этого имхо.
← →
I__am (2002-08-14 11:37) [3]Да, конечно желательно без посторонних библиотек...
← →
alena.svt (2002-08-14 11:38) [4]По вам Faq плачет
Вот держите правда в D6 не пробывала. uses ShellApi обязательно
Button1 помещаем в tray
Button2 Удаляем из tray
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Forms,ShellApi,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
NID :TNotifyIconData;
HI:HIcon;
begin
HI:=ExtractIcon(Handle,"My.ico",0);
with NID do
begin
cbSize:=Sizeof(TNotifyIconData);
Wnd:=Handle;
uID:=0;
UFlags:=NIF_MESSAGE+NIF_ICON+NIF_TIP;
SzTip:="TrayIcon ToolTip";
HIcon:=HI;
uCallBackMessage:=WM_USER+0;
end;
Shell_NotifyIcon(NIM_ADD,@NID);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
NID:TNotifyIconData;
begin
//???????? ??????
with NID do
begin
cbSize:=Sizeof(TNotifyIconData);
Wnd:=Handle;
uID:=0;
end;
Shell_NotifyIcon(NIM_Delete,@NID);
end;
end.
Если у вас нет в директории файла My.ico то потрудитесь поместить его туда. Или вытаскиваем из ресурсов но это уже совсем другая история.
Удачи
← →
Vogul (2002-08-14 12:01) [5]Все хорошо, надо только добавить обработку сообщения WM_USER, а то после минимизации приложения в трей, как его обратно выковыривать.
← →
I__am (2002-08-14 12:56) [6]С этим все ясно, но как сделать, чтобы по кнопке Hide форма скрывалась а по клику по иконке, которая в трее форма опять становилась видимой?
← →
I__am (2002-08-14 15:26) [7]Проблема именно с тем, что как назвать объект, который в трее и какую операцию запросить?
← →
Vogul (2002-08-14 15:27) [8]См. предыдущий пост.
Регистрируешь свое сообщение типа WM_MYFORMNEEDSHOW = WM_USER+0.
Создаешь обработчик этого сообщения, который в lParam принимает от винды сообщение о событии (нажата левая клавиша мыши и т. д.).
← →
I__am (2002-08-14 15:30) [9]А можно на соответствующем примере? А то я еще не так хорошо в дельфях разбераюсь!
← →
alena.svt (2002-08-14 15:31) [10]Понятно! Просто не так поняла вопрос. Не очень хочется опять отписывать. Вообщем у Юрия Зотова есть статья по исп. WinApi с примером. Все что вам нужно будет это заменить событие двойнойного клика на свое. Ну и некоторые изменения внести. Бросите на форму AppEvents с палитры Additional и обратоаете у него события OnRestore и OnMinimize.
http://www.delphikingdom.com/helloworld/samples_win.htm
← →
alena.svt (2002-08-14 17:19) [11]Хотя с учетом темы
А можно на соответствующем примере? А то я еще не так хорошо в дельфях разбераюсь!
Возможно и не поймете. Вот немного по-другому.
Создаем новый проект
uses ShellApi об.
Кидаем на форму PopupMenu , создаем в нем пункт Caption>Exit , Name>pmnuExit
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ShellApi, Menus;
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
pmnuExit: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure pmnuExitClick(Sender: TObject);
private
TrayIcon : TNotifyIconData;
procedure NotifyIcon(var Msg : TMessage);message WM_USER + 100;// c учетом >Vogul (14.08.02 15:27)
procedure MinimizeEvt(Sender : TObject);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ TForm1 }
procedure TForm1.MinimizeEvt(Sender: TObject);
begin
ShowWindow(Application.Handle,SW_HIDE);
end;
procedure TForm1.NotifyIcon(var Msg: TMessage);
var
P: TPoint;
begin
case Msg.LParam of
WM_LBUTTONDBLCLK :
begin
ShowWindow(Application.Handle,SW_SHOW);
Application.Restore;
end;
WM_RBUTTONDOWN :
BEGIN
SetForegroundWindow(Handle);
GetCursorPos(P);
PopupMenu1.Popup(P.X,P.Y);
PostMessage(Handle,WM_NULL,0,0)
END
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TrayIcon.cbSize := SizeOf(TrayIcon);
TrayIcon.Wnd := Form1.Handle;
TrayIcon.uID := 100;
TrayIcon.uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
TrayIcon.uCallbackMessage := WM_USER + 100;
TrayIcon.hIcon := Application.Icon.Handle;
TrayIcon.szTip:="Podskazka";
Shell_NotifyIcon(NIM_ADD,@TrayIcon);
Application.OnMinimize := MinimizeEvt;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@TrayIcon);
end;
procedure TForm1.pmnuExitClick(Sender: TObject);
begin
Close;
end;
end.
← →
I__am (2002-08-14 18:31) [12]А почему иконка после выхода из программы иногда остается висеть в трее, пока я не наведу туда мышку? Можно как-нить принудительно обновить трей из моей программы перед самым выходом?
← →
alena.svt (2002-08-14 21:01) [13]Незнаю у меня не висит?
Висела пока FormDestroy не обработала, потом всегда удалялась.
Может вы его просто в ObjectInspector"e не определили.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.08.26;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c