Форум: "Начинающим";
Текущий архив: 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.043 c