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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.10.2009, 07:42
AD_min AD_min вне форума
Прохожий
 
Регистрация: 18.02.2008
Адрес: Казахстан, г. Усть-Каменогорск
Сообщения: 11
Репутация: 10
Вопрос Нужно свернуть прогу в трей

Доброго времени суток, у меня такая проблема нужно чтобы программа сворачивалась в трей... Где уже только не искал, сумел сделать только чтобы во время работы программы в трее отображался значок, но чтобы можно было свернуть саму программу в трей я найти не где не смог... Заранее спасибо
Ответить с цитированием
  #2  
Старый 13.10.2009, 09:03
Аватар для AllMaNi
AllMaNi AllMaNi вне форума
Новичок
 
Регистрация: 15.06.2009
Адрес: Россия, ЮФО
Сообщения: 57
Репутация: 10
По умолчанию

используй компанент - CoolTrayIcon
и читай фак на этом сайте.
__________________
Пусть ненавидят миллионы, зато любят тыщи (с) Многоточие
Ответить с цитированием
  #3  
Старый 13.10.2009, 16:18
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Можно без него, хотя с ним проще.
Фактически, сворачивание в трей - это простановка SHowMainForm у Application. Ну а иконка в трее - читай MSDN - там все просто, всего 2 функции, если тебе надо только значек показать или спрятать и еще обработчик сообщений, если хочешь реагировать на клики по иконке.
Ответить с цитированием
  #4  
Старый 17.10.2009, 18:21
AlexEr81 AlexEr81 вне форума
Прохожий
 
Регистрация: 17.10.2009
Сообщения: 3
Репутация: 10
По умолчанию

я использую этот код:
Код:
.....
type
  TForm1 = class(TForm)
......
 public
    procedure CREATETRAYICON(n:integer);
    procedure DELETETRAYICON(n:integer);
    procedure WMICON(var msg:Tmessage); message WM_MYTRAYNOTIFY;
    procedure WMSYSCOMMAND(var msg:Tmessage);message WM_SYSCOMMAND;
    procedure HIDEmainForm;
    procedure RestoreMainForm;
   .....

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:=n;
  uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
  uCallBackMessage:=WM_MYTRAYNOTIFY;
  hIcon:=Application.Icon.Handle;
  szTip:='подсказка';
end;
Shell_notifyIcon(NIM_ADD,@nidata);
////
end;

procedure TForm1.WMICON(var msg:Tmessage);  
var p:Tpoint;
begin
case msg.LParam of
WM_RBUTTONDOWN: begin
                 getcursorpos(p);
                 setForegroundWindow(application.MainForm.Handle);
                 sysMenu.Popup(p.X,p.Y);
                end;
end
          
///
end;

 procedure TForm1.DELETETRAYICON(n:integer);
var nidata:TnotifyIcondata;
begin
with nidata do
begin
  cbSize:=Sizeof(TnotifyIcondata);
  Wnd:=Self.Handle;
  uId:=n;
end;
Shell_notifyIcon(NIM_DELETE,@nidata);
end;
 
после события формы FormCreate 
делаем
form1.CREATETRAYICON(1);
 и
form1.hidemainform;

а в событии OnClick одного из пунктов sysMenu 
делаем
restoremainform;

Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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