Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.18;
Скачать: CL | DM;

Вниз

TrayIcon   Найти похожие ветки 

 
ORMADA ©   (2007-01-26 10:42) [0]

Всем привет!
Опять мучаю трейикон...

хочу сделать чтобы прога работала следующим образом
при прилике по трейикон
если форма приложения полностью видима (частично не перекрывается другими окнами)
то следовательно приложение сворачивается в траей в противном случае показывается...

но возникла следующая трабла
как определить при клике по трейиконке что форма ничем не перекрыта
GetForegroundWindow <> Application.Handle)

такой код не проходит т.к. при клике по трею фокус уходит с главной формы и GetForegroundWindow всегда будет возвращать НЕ Application.Handle....


 
Дмитрий Белькевич ©   (2007-01-26 13:05) [1]

Есть мнение, что этим заморачиваться не нужно - просто сворачивай и разворачивай.


 
Elen ©   (2007-01-26 13:08) [2]


> ORMADA

GetForegroundWindow <> Form1.Handle


 
Elen ©   (2007-01-26 13:20) [3]


> ORMADA

Кстати Application.Handle это не FormXX.handle. ;)


 
ORMADA ©   (2007-01-26 19:57) [4]

есть дурное желание сделать именно как описал...

GetForegroundWindow <> Application.MainForm.Handle

тоже не то
т.к. при клике по трею фокус уходит с главной формы (думаю на десктоп (вероятно HWND=0))

пробовал делать так

// if not FIsMinimized then
//  begin
//    if (GetForegroundWindow = Application.MainForm.Handle) then
//    begin
//      Application.Minimize;
//      TrayIcon.HideMainForm;
//      FIsMinimized := False;
//      exit;
//    end
//    else
//    begin
//      SetForegroundWindow(Application.Handle);
//      exit;
//    end;
//  end;

 if FIsMinimized then
 begin
   TrayIcon.ShowMainForm;
   TrayIcon.HideTaskbarIcon;
   FIsMinimized := False;
 end
 else
 begin
   Application.Minimize;
   TrayIcon.HideMainForm;
   FIsMinimized := True;
 end;


 
ORMADA ©   (2007-01-29 11:37) [5]

решение найдено
именно так как я и говорил
через поиск частично перекрывающих окон

 function IsTopMost(wnd: HWND): Boolean;
 begin
   Result := (GetWindowLong(wnd, GWL_EXSTYLE) or WS_EX_TOPMOST) <> 0;
 end;

var
 wnd                                   : HWND;
 r1, r2, r3                            : TRect;
begin
 if not FIsMinimized then
 begin
   wnd := Handle;
   repeat
     wnd := GetNextWindow(wnd, GW_HWNDPREV);

     if IsTopmost(wnd) then
       if IsWindowVisible(wnd) then
       begin
         GetWindowRect(wnd, r1);
         GetWindowRect(Application.MainForm.Handle, r2);
         if IntersectRect(r3, r1, r2) then
         begin
           FIsMinimized := True;
           break;
         end;
       end;
   until wnd = 0;
 end;

 if FIsMinimized then
 begin
   TrayIcon.ShowMainForm;
   TrayIcon.HideTaskbarIcon;
   FIsMinimized := False;
 end
 else
 begin
   Application.Minimize;
   TrayIcon.HideMainForm;
   FIsMinimized := True;
 end;


 
Separator ©   (2007-01-29 11:54) [6]

А не проще проверять на visible mainform?


 
evvcom ©   (2007-01-29 11:58) [7]

Продвинутое запуздыривание иконки? Растет форум :)


 
Elen ©   (2007-01-29 12:19) [8]


> т.к. при клике по трею фокус уходит с главной формы

The GetForegroundWindow function returns the handle of the foreground window
Причем тут фокус? (в общем у меня GetForegroundWindow <> Form1.Handle работает без проблем)



Страницы: 1 вся ветка

Текущий архив: 2007.02.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.061 c
2-1170176412
NikNet
2007-01-30 20:00
2007.02.18
Фильтровать поле, Без разницы на SQL или на DELPHI


2-1170158867
fisherman
2007-01-30 15:07
2007.02.18
Печать этикеток в Делфи


15-1170119218
hmmm
2007-01-30 04:06
2007.02.18
PHP


2-1170158201
Long1
2007-01-30 14:56
2007.02.18
Поиск / Исключение / Замена


15-1170042568
Slider007
2007-01-29 06:49
2007.02.18
С днем рождения ! 27 января