![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пересечение окон [D7]
ORMADA © (2006-11-13 12:23:00)Всем привет!
Проверяю пересекает ли какое-либо окно моё окно таким образом:
var
wnd : HWND;
r : TRect;
function OverlapRects(R1, R2: TRect): Boolean;
var
Temp : TRect;
begin
Result := False;
if not UnionRect(Temp, R1, R2) then
Exit;
if (Temp.Right - Temp.Left <= R1.Right - R1.Left + R2.Right - R2.Left)
and
(Temp.Bottom - Temp.Top <= R1.Bottom - R1.Top + R2.Bottom - R2.Top) then
Result := True;
end;
function IsTopMost(wnd: HWND): Boolean;
begin
Result := (GetWindowLong(wnd, GWL_EXSTYLE) and WS_EX_TOPMOST) <> 0;
end;
procedure logWindowInfo(wnd: HWND; AR: Trect);
var
r : TRect;
begin
if wnd = 0 then Exit;
if IsTopmost(wnd) then
begin
GetWindowRect(wnd, r);
if OverlapRects(r, AR) then
Memo1.Lines.Add(IntToStr(wnd) + ' overlaped');
end;
end;
begin
Memo1.Clear;
wnd := Handle;
GetWindowRect(wnd, r);
repeat
wnd := GetNextWindow(wnd, GW_HWNDPREV);
LogWindowInfo(wnd, r);
until wnd = 0;
end;
но чё-то не то... попадают многие окна..
имеет смысл сравнивать тока окна которые выше моего в z последовательности...
Юрий Зотов (2006-11-14 10:48:00) [1]Не совсем то, но очень близко (а может даже и точнее по сути):
if GetForegroundWindow = Handle then
минимизировать
else
вывести_на _передний_план_и_сделать_активным;
Elen (2006-11-14 08:22:00) [2]
> ORMADA
А если тебе сделать так : при наведении мышки на иконку твое окно приходит на передний план (если оно не перекрывалось ты этого не заметиш), а по клику уже мини-максимизируется. ;)
ORMADA (2006-11-14 06:59:00) [3]звиняйюсь, плохо описал ситуацию...
есть главное окно моего приложения
его могут либо полностью либо частично перекрывать другие окна
я хочу сделать так, что если моё окно перекрыто частично/полностью то по клику по иконке в трее выводить его на передний план
в противном случаем минимизировать
в принципе это и делают многие трэй икон компоненты, но
они не учитывают частичное перекрытие
и когда окна частино перекрыто то оно минимизируется вместо того чтобы пойти на передний план...
Sapersky (2006-11-13 15:37:00) [4]Canvas.ClipRect?
Anatoly Podgoretsky (2006-11-13 15:10:00) [5]> Юрий Зотов (13.11.2006 14:51:01) [1]
В крайнем случае мог бы использовать хотя бы PtInRect :-)
--
Юрий Зотов (2006-11-13 14:51:00) [6]IntersectRect?