Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
1-85095
ЮРИЙ_К
2002-08-13 17:06
2002.08.26
Необычное сравнение даты на вход в диапазон


7-85272
ZavDim
2002-06-12 17:16
2002.08.26
Ресурсы окошек


3-84915
BAY
2002-08-05 11:16
2002.08.26
Сравнение СУБД


1-85010
-=Spike=-
2002-08-15 18:58
2002.08.26
Программная регистрация .OCX компонентов.


7-85268
Tahion
2002-06-03 20:20
2002.08.26
Как перестроить кэш иконок в Виндовс?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский