Форум по 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'ов не уверен. просто у меня так в одной проге.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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
Радость Мяу

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


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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