Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Рабочий стол
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.11.2005, 17:23
Unocide Unocide вне форума
Прохожий
 
Регистрация: 23.11.2005
Сообщения: 16
Репутация: 10
По умолчанию Трэй

Как сваять иконку в трее? т.е. не сваять ее а как сделать так шоб прога тама сидела? И еще шоб она не показывалась в области задачЪ?
Ответить с цитированием
  #2  
Старый 23.11.2005, 23:20
Аватар для Keygenmusic
Keygenmusic Keygenmusic вне форума
Активный
 
Регистрация: 24.10.2005
Адрес: Там
Сообщения: 201
Репутация: 20
По умолчанию

Вот. Насчёт нужности всех uses'ов не уверен. просто у меня так в одной проге.

Код:
uses messages, AppEvnts, Messages, Controls,...

...

const   WM_MYICONNOTIFY = WM_USER + 123;

type
  TForm1 = class(TForm)
  ...
  PopupMenu1: TPopupMenu;
  ...
 public
    { Public declarations }
    procedure WMICON(var msg: TMessage); message WM_MYICONNOTIFY;
    procedure WMSYSCOMMAND(var msg: TMessage);message WM_SYSCOMMAND;
    procedure RestoreMainForm;
    procedure HideMainForm;
    procedure CreateTrayIcon(n:Integer);
    procedure DeleteTrayIcon(n:Integer);

...

uses ComObj, ShellApi,...

procedure TForm1.WMICON(var msg: TMessage);
var P : TPoint;
nidata : TNotifyIconData;
begin
 case msg.LParam of
 WM_LBUTTONDOWN, WM_RBUTTONDOWN:
  begin
   GetCursorPos(p);
   SetForegroundWindow(Application.MainForm.Handle);
   PopupMenu1.Popup(P.X, P.Y);
  end;
 WM_LBUTTONDBLCLK : begin
  RestoreMainForm;
  DeleteTrayIcon(1);
  SetForeGroundWindow(Application.MainForm.Handle);
  SetActiveWindow(Application.MainForm.Handle);
  end;
 WM_MOUSEMOVE: 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,Application.Title+'текст всплывающей подсказки');
  end;
  Shell_NotifyIcon(NIM_MODIFY, @nidata);
  end;
 end;
end;

procedure TForm1.WMSYSCOMMAND(var msg: TMessage);
begin
 inherited;
 if (Msg.wParam=SC_MINIMIZE) then begin
  HideMainForm;
  CreateTrayIcon(1);
 end;
end;

procedure TForm1.HideMainForm;
begin
  Application.ShowMainForm := False;
  ShowWindow(Application.Handle, SW_HIDE);
  ShowWindow(Application.MainForm.Handle, SW_HIDE);
end;

procedure TForm1.RestoreMainForm;
var i,j : Integer;
begin
  Application.ShowMainForm := True;
  ShowWindow(Application.Handle, SW_RESTORE);
  ShowWindow(Application.MainForm.Handle, SW_RESTORE);
  if not ShownOnce then
  begin
    for I := 0 to Application.MainForm.ComponentCount -1 do
      if Application.MainForm.Components[i] is TWinControl then
        with Application.MainForm.Components[i] as TWinControl do
          if Visible then
          begin
            ShowWindow(Handle, SW_SHOWDEFAULT);
            for J := 0 to ComponentCount -1 do
              if Components[J] is TWinControl then
                ShowWindow((Components[J] as TWinControl).Handle, SW_SHOWDEFAULT);
          end;
    ShownOnce := True;
  end;

end;

procedure TForm1.CreateTrayIcon(n:Integer);
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,Application.Title+'текст всплывающей подсказки');
  end;
  Shell_NotifyIcon(NIM_ADD, @nidata);
end;

procedure TForm1.DeleteTrayIcon(n:Integer);
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.FormCreate(Sender: TObject);
begin
 ShownOnce:= False;
 CreateTrayIcon(1);
 {HideItem.Enabled := False;}
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 DeleteTrayIcon(1);
end;

Вот так вот не просто. Дело в том, что в виндах нет понятия свернуть прогу в трей. Есть просто процедуры создания иконки в трее и прятания главной формы.
Ответить с цитированием
  #3  
Старый 24.11.2005, 12:49
Unocide Unocide вне форума
Прохожий
 
Регистрация: 23.11.2005
Сообщения: 16
Репутация: 10
По умолчанию Трэй

Все кульно прилепил к своей прожке, пашет. Пасибы!

PS: Кстать из юзесов окромя стандартных понадобился тока ShellApi.

Последний раз редактировалось Unocide, 24.11.2005 в 15:43.
Ответить с цитированием
  #4  
Старый 07.08.2009, 16:16
turbocot turbocot вне форума
Прохожий
 
Регистрация: 07.08.2009
Сообщения: 1
Репутация: 10
Радость Мяу

Работает все отлично, только надо добавить переменную:
Код:
...
private
ShownOnce:boolean;
...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter