Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.046 c
2-1163340303
AlexanderMS
2006-11-12 17:05
2006.12.03
Сделать окно активным.


11-1140014372
Игорь Шевченко
2006-02-15 17:39
2006.12.03
К вопросу о замене System/SysInit в Delphi и обработке исключений


1-1161088137
dmitry kholl
2006-10-17 16:28
2006.12.03
Закрытие Modal form


2-1163617262
Troan_81
2006-11-15 22:01
2006.12.03
handle


2-1163394749
alucard
2006-11-13 08:12
2006.12.03
Можно ли работать с Firebird без IBase?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский