Главная страница
    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.057 c
8-1151309796
RealGanj
2006-06-26 12:16
2007.02.18
Анимации в тексте


6-1158149691
KyRo
2006-09-13 16:14
2007.02.18
Есть ли соединение по сети ?


3-1164567203
SyncMaster795DF
2006-11-26 21:53
2007.02.18
Условия в хранимой процедуре


2-1170148925
zdm
2007-01-30 12:22
2007.02.18
EhLib 4 bds 2006


2-1170421656
DelphiLexx
2007-02-02 16:07
2007.02.18
Очистить RxSpeedButton.Glyph программно





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский