Главная страница
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.067 c
15-1163145976
oxffff
2006-11-10 11:06
2006.12.03
Так ли нужны шаблоны в Object Pascal.


6-1152325749
Yuron
2006-07-08 06:29
2006.12.03
Как получить код страницы загуженной с помомщью TWebBrowser


15-1163398766
KSergey
2006-11-13 09:19
2006.12.03
Гигагерцы в цифровых схемах


2-1163778805
Adios
2006-11-17 18:53
2006.12.03
?


1-1161328605
312kbps
2006-10-20 11:16
2006.12.03
Получить ссылку на объект 1С !!!