Форум: "Начинающим";
Текущий архив: 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