Сворачивание проги в панель часов.

  • Автор темы DizeL
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

DizeL

#1
Никак не могу понять, как это сделать. Ни в одной книге это не описывается. Кто разбирается в данном вопрпосе, попрошу мимо не проходить. Заранее спасибо.
 

admin

Well-known member
08.08.2003
2 754
0
#2
DizeL
хочешь совсем просто, то иди на torry.net и скачай CoolTrayIcon
 

admin

Well-known member
08.08.2003
2 754
0
#3
иконка делается так
Код:
const
WM_NOTIFYTRAYICON = WM_USER + 1;
...
private
procedure WMTRAYICONNOTIFY(var Msg: TMessage); message WM_NOTIFYTRAYICON;
...
uses
ShellAPI;

procedure TForm1.WMTRAYICONNOTIFY(var Msg: TMessage);
var
s: string;
begin
case Msg.LParam of
 WM_MOUSEMOVE:   s := 'Мышь сдвинута';
 WM_LBUTTONDOWN:  s := 'Левая кнопка нажата';
 WM_LBUTTONUP:   s := 'Левая кнопка отпущена';
 WM_LBUTTONDBLCLK: s := 'Два раза нажата левая кнопка';
 WM_RBUTTONDOWN:  s := 'Правая кнопка нажата';
 WM_RBUTTONUP:   s := 'Правая кнопка отпущена';
 WM_RBUTTONDBLCLK: s := 'Два раза нажата правая кнопка';
 else       s := IntToStr(Msg.LParam);
end;
ListBox1.Items.Add(s);
ListBox1.ItemIndex := ListBox1.Items.Count - 1;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
tray: TNotifyIconData;
Ic: TIcon;
begin
Ic := TIcon.Create;
Ic.LoadFromFile('Icon1.ico');
with tray do
begin
 cbSize := SizeOf(TNotifyIconData);
 Wnd := Form1.Handle;
 uID := 1;
 uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
 uCallBackMessage := WM_NOTIFYTRAYICON;
 hIcon := Ic.Handle;
 szTip := ('Это наша иконка');
end;
Shell_NotifyIcon(NIM_ADD, Addr(tray));
Ic.Destroy;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
tray: TNotifyIconData;
Ic: TIcon;
begin
Ic := TIcon.Create;
Ic.LoadFromFile('Icon2.ico');
with tray do
begin
 cbSize := SizeOf(TNotifyIconData);
 Wnd := Form1.Handle;
 uID := 1;
 uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
 uCallBackMessage := WM_NOTIFYTRAYICON;
 hIcon := Ic.Handle;
 szTip := ('Это другая иконка');
end;
Shell_NotifyIcon(NIM_MODIFY, Addr(tray));
Ic.Destroy;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
tray: TNotifyIconData;
begin
with tray do
begin
 cbSize := SizeOf(TNotifyIconData);
 Wnd := Form1.Handle;
 uID := 1;
end;
Shell_NotifyIcon(NIM_DELETE, Addr(tray));
end;
А там обрабатывай OnMinimize и клики по иконке.
 
D

DizeL

#4
:(
Кодик угрожающий, но попробую разобраться.
Спасибо.
А что из себя прога представляет?
 
B

Barmutik

#5
Проще взять готовую компоненту .. в тех же Rx-lib сейчас которые входят в сотав Jedi есть готовая компонента .. только иконку назначил и всё у тебя в трее всё есть...ну единственно конечно минимайз всё равно самому придётся обрабатывать ...
 
D

DizeL

#6
<!--QuoteBegin-QUOTE+Barmutik-->
<span class="vbquote">(QUOTE @ Barmutik)</span><!--QuoteEBegin-->Проще взять готовую компоненту .. в тех же Rx-lib сейчас которые входят в сотав Jedi есть готовая компонента .. только иконку назначил и всё у тебя в трее всё есть...ну единственно конечно минимайз всё равно самому придётся обрабатывать ...[/quote]
Кстати, я так и не нашёл событие Onminimize. Что-то в моём Делфи7 такого и подавно нет. Или я не там смотрю? Как его обрабатывать-то? :rolleyes: Прошу помощи и спасибо за совет, кстати, мог бы послать мне компонет этот? Ящик dizel@students.ru . Заренее спасибо.

С уважением Дизел.
 

admin

Well-known member
08.08.2003
2 754
0
#7
DizeL
оно для объекта TApplication делается
да скачай что я говорил и не майся дурью
всё давно уже сделано
 
B

Barmutik

#8
На закладке Additional есть компонет TApplicationEvents у него есть OnMinimize...

Это тот же OnMinimize что и у TApplication так как этот компонент просто врапит эти методы.

У него напиши что тебе надо делать по минимизации .. а тебе я думаю надо убирать прогу с экрана и с панели задач и она автоматически будет у твоего Application-а

Удачи!

ЗЫ: Да и сколько книжек видел во всех есть раздел как поместить программу в трэй... ну это так к слову :rolleyes:
 

admin

Well-known member
08.08.2003
2 754
0
#9
Barmutik
ЗЫ: Да и сколько книжек видел во всех есть раздел как поместить программу в трэй... ну это так к слову
не говоря уже о бесконечных FAQ
кстати на болнанде очень хорошие факи лежат
 
D

DizeL

#10
ЗЫ: Да и сколько книжек видел во всех есть раздел как поместить программу в трэй... ну это так к слову
С.Бобровский "Описание системы и языка программирования Delphi. DELPHI 7." Ну и где тут ты это видел? ( так, к слову).

Далее, спасибо за помощь, буду знать.


кстати на болнанде очень хорошие факи лежат
А вот тут можно по-подробнее.


P.S. - всем спасибо за проявленный интерес.
 
D

DizeL

#11
оно для объекта TApplication делается
да скачай что я говорил и не майся дурью
всё давно уже сделано
Что-то у меня этот "култрейайкон" выдает ошибку при первой же компеляции. Типа не найден файл "Cooltrayicon.dcu". Может неправильно установил компонент?
 
D

DizeL

#12
<!--QuoteBegin-Серёга+6:08:2004, 01:22 -->
<span class="vbquote">(Серёга @ 6:08:2004, 01:22 )</span><!--QuoteEBegin-->DizeL
хочешь совсем просто, то иди на torry.net и скачай CoolTrayIcon[/quote]
Короче, всё нормально. Установил компонент, всё олично работает. Спасибо. Но вот есть проблема. Прогу сворачиваешь в трей. Всё нормально. Разворачиваешь, а вот второй раз она уже не сворачивается... Плохо! Что это за ... ?
И ещё, есть мысли как сделать так, чтобы прога автоматом грузилась в трей не разворачиваесь при загрузке? Или может это будет некрасиво смотреться? Что посоветуем?

Всем спасибо за помощь. С уважением DizeL.
 
Z
#13
Dizel

И ещё, есть мысли как сделать так, чтобы прога автоматом грузилась в трей не разворачиваесь при загрузке?
В файле проекта после Application.Initialize; поставь Application.ShowMainForm:=False; - это чтобы не разворачивалась, а потом чтобы при клике на иконку в трее развернулось, в обработчике клика иконки поставь Form1.Visible:=True;
 
G

Guest

#14
DizeL
Разворачиваешь, а вот второй раз она уже не сворачивается... Плохо! Что это за ... ?
первый раз слышу
у меня работает это во многих проектах отлично
компилю под 7 Делфи.
 
D

DizeL

#15
первый раз слышу
у меня работает это во многих проектах отлично
компилю под 7 Делфи.
А ну ка дай мне своё мыло, я тебе примерчик скину. Посмотришь, может я чего не так делаю. ОК?
 
Статус
Закрыто для дальнейших ответов.