![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Я еще начинающий. Нашел пример, как свернуть программу в трей. Вставил, все вышло: прога свернулась и иконка в трее есть....
и тут произошло самое смешное: я потерял управление программой... окно то спряталось, и не закрыть прогу, ни показать окно...))) Подскажите пожалуйста, как показать окно по клику на иконке в трее, и как сделать контекстное меню для иконки в трее. Я уже третий день в поисковике брожу..( Код:
private
{ Private declarations }
public
{ Public declarations }
//
MouseDownPoint : TPoint;
Moving : bool;
end;
var
Form1: TForm1;
iconData: TNotifyIconData;
implementation
...
...
procedure TForm1.ButtonTrayClick(Sender: TObject);
begin
iconData.cbSize := sizeOf(iconData);
iconData.Wnd := Handle;
iconData.uID := 0;
iconData.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE;
iconData.hIcon := Application.Icon.Handle;
iconData.szTip := 'ПИЛОТ-2009';
iconData.uCallbackMessage := WM_MOUSEMOVE;
Shell_NotifyIcon(NIM_ADD, @iconData);
Form1.Hide;
end;вот это у меня работает)) а дальше... |
|
#2
|
|||
|
|||
|
Вот примерно как-то так:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ShellAPI;
const
WM_MYICONNOTIFY = WM_USER + 123;
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
Hide1: TMenuItem;
Restore1: TMenuItem;
Exit1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Hide1Click(Sender: TObject);
procedure Restore1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
private
{ Private declarations }
procedure WMMYICONNOTIFY(var msg: TMessage); message WM_MYICONNOTIFY;
procedure WMSYSCOMMAND(var msg: TMessage); message WM_SYSCOMMAND;
procedure RestoreMainForm;
procedure HideMainForm;
procedure CreateTrayIcon;
procedure DeleteTrayIcon;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.CreateTrayIcon;
var
nidata: TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_MYICONNOTIFY;
hIcon := Application.Icon.Handle;
StrPCopy(szTip, 'ПИЛОТ-2009');
end;
Shell_NotifyIcon(NIM_ADD, @nidata);
end;
procedure TForm1.DeleteTrayIcon;
var
nidata: TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle;
uID := 1;
end;
Shell_NotifyIcon(NIM_DELETE, @nidata);
end;
procedure TForm1.HideMainForm;
begin
Application.ShowMainForm := False;
ShowWindow(Application.Handle, SW_HIDE);
ShowWindow(Application.MainForm.Handle, SW_HIDE);
end;
procedure TForm1.RestoreMainForm;
begin
Application.ShowMainForm := True;
ShowWindow(Application.Handle, SW_RESTORE);
ShowWindow(Application.MainForm.Handle, SW_RESTORE);
end;
procedure TForm1.WMMYICONNOTIFY(var msg: TMessage);
var
P: TPoint;
begin
if (msg.LParam = WM_LBUTTONUP) or (msg.LParam = WM_RBUTTONUP) then
begin
GetCursorPos(p);
SetForegroundWindow(Application.MainForm.Handle);
PopupMenu1.Popup(P.X, P.Y);
end;
end;
procedure TForm1.WMSYSCOMMAND(var msg: TMessage);
begin
inherited;
if (Msg.WParam = SC_MINIMIZE) then Hide1Click(Self);
if (Msg.WParam = SC_RESTORE) then Restore1Click(Self);
end;
{ события формы }
procedure TForm1.FormCreate(Sender: TObject);
begin
CreateTrayIcon();
Application.OnMinimize := Hide1Click;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteTrayIcon();
end;
{ Обработчики команд контекстного меню }
procedure TForm1.Hide1Click(Sender: TObject);
begin
HideMainForm();
CreateTrayIcon();
end;
procedure TForm1.Restore1Click(Sender: TObject);
begin
RestoreMainForm();
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Application.Terminate;
end;
end.Код:
object Form1: TForm1
Left = 192
Top = 114
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object PopupMenu1: TPopupMenu
Left = 16
Top = 64
object Hide1: TMenuItem
Caption = 'Hide'
OnClick = Hide1Click
end
object Restore1: TMenuItem
Caption = 'Restore'
OnClick = Restore1Click
end
object Exit1: TMenuItem
Caption = 'Exit'
OnClick = Exit1Click
end
end
endP.S. Добавила еще строчку (Application.OnMinimize := Hide1Click), чтобы окно сворачивалось в трей при щелчке на кнопке в панели задач. Последний раз редактировалось Nyctos Kasignete, 21.04.2009 в 10:26. |
|
#3
|
||||
|
||||
|
Ну, спасибо))
у меня есть пара вопросов... но чтобы здесь не флудить, можно в личку? ![]() |
|
#4
|
|||
|
|||
|
rasamaha, если по делу вопрос, то пишите здесь. Если не по делу, то и в личку тоже не стоит. =)
|
|
#5
|
||||
|
||||
|
ну, конечно же не о погоде хочу спросить)))
|
|
#6
|
|||
|
|||
|
Скачай себе TCoolTrayIcon (кажется так) и будет тебе счастье. Там все нужные обертки для иконки в трее есть. И не надо будет делать все руками.
|
|
#7
|
||||
|
||||
|
я его скачал отсюда
http://decoding.narod.ru/download/co...tray/tray.html а как его установить? не знаю, какие файлы куда. я еще ни разу компоненты не устанавливал... Последний раз редактировалось rasamaha, 21.04.2009 в 14:59. |
|
#8
|
|||
|
|||
|
Если есть файл .dpk, то ставить просто его (открываешь в Дельфе, компилируешь и кнопочку Install жмешь). Если нету - то надо смотреть какая у тебя Дельфя. Если до 7 включительно, то можно просто через component -> Install component. Если старше, то надо будет все-равно делать проект (.dpk). Сделай новый пустой проект и добавь туда файлы кмпонента, а далее по первому варианту.
|