|
|
Регистрация | << Правила форума >> | 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 end P.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). Сделай новый пустой проект и добавь туда файлы кмпонента, а далее по первому варианту.
|