Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.06 c
2-1170347053
Garacio
2007-02-01 19:24
2007.02.18
настройки Button


2-1170227408
image
2007-01-31 10:10
2007.02.18
Потоки


6-1158124142
Alexey 12
2006-09-13 09:09
2007.02.18
Не передается вложение


15-1169458745
optimizer
2007-01-22 12:39
2007.02.18
Оптимизация


15-1170108239
hmmm
2007-01-30 01:03
2007.02.18
CSS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский