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

Вниз

Пересечение окон   Найти похожие ветки 

 
ORMADA ©   (2006-11-13 12:23) [0]

Всем привет!
Проверяю пересекает ли какое-либо окно моё окно таким образом:

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-13 14:51) [1]

IntersectRect?


 
Anatoly Podgoretsky ©   (2006-11-13 15:10) [2]

> Юрий Зотов  (13.11.2006 14:51:01)  [1]

В крайнем случае мог бы использовать хотя бы PtInRect :-)

--


 
Sapersky   (2006-11-13 15:37) [3]

Canvas.ClipRect?


 
ORMADA ©   (2006-11-14 06:59) [4]

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

я хочу сделать так, что если моё окно перекрыто частично/полностью то по клику по иконке в трее выводить его на передний план
в противном случаем минимизировать
в принципе это и делают многие трэй икон компоненты, но
они не учитывают частичное перекрытие
и когда окна частино перекрыто то оно минимизируется вместо того чтобы пойти на передний план...


 
Elen ©   (2006-11-14 08:22) [5]


> ORMADA

А если тебе сделать так : при наведении мышки на иконку твое окно приходит на передний план (если оно не перекрывалось ты этого не заметиш), а по клику уже мини-максимизируется. ;)


 
Юрий Зотов ©   (2006-11-14 10:48) [6]

Не совсем то, но очень близко (а может даже и точнее по сути):

if GetForegroundWindow = Handle then
 минимизировать
else
 вывести_на _передний_план_и_сделать_активным;



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

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

Наверх




Память: 0.48 MB
Время: 0.071 c
2-1162990447
Okey
2006-11-08 15:54
2006.12.03
record для новичка


15-1163481359
Колдун
2006-11-14 08:15
2006.12.03
Добавление элементов в апплеты


15-1163623247
Сишник
2006-11-15 23:40
2006.12.03
Силачам в С++ :-)


6-1152778501
Lex_!
2006-07-13 12:15
2006.12.03
TWebBrowser + автоматическое действие


15-1163485918
KygECHuK
2006-11-14 09:31
2006.12.03
Маленький вопрос