Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.26;
Скачать: CL | DM;

Вниз

Вопрос по минимизации окна!   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
3-84919
BlankAlex
2002-08-06 16:35
2002.08.26
D6 & TIBStoredrProc & TIBSQL


8-85136
dimmu2
2002-04-18 21:01
2002.08.26
Поворот битмапа


14-85169
phantom2040
2002-07-29 11:00
2002.08.26
Сигналы встроенного динамика ПК


1-85063
Arhangel
2002-08-14 14:54
2002.08.26
Как использовать переменную?


14-85192
Jee
2002-07-30 15:32
2002.08.26
Оцените прикол.