Главная страница
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.102 c
15-1162935860
Орион
2006-11-08 00:44
2006.12.03
Полезная утилитка


15-1163501972
Crazybeaver
2006-11-14 13:59
2006.12.03
Скиньте плиз NMFTP


3-1159693344
Antoxa2005
2006-10-01 13:02
2006.12.03
Подскажите, как программно "сжать" базу данных FB?


4-1153475730
kleem
2006-07-21 13:55
2006.12.03
Сделать окно активным


2-1163620421
Magister Crazy
2006-11-15 22:53
2006.12.03
Проблемы со StringGrid