Форум: "WinAPI";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];
ВнизКак создать моргающий прямоугольник вокруг любого окна? Найти похожие ветки
← →
Cosinus © (2005-05-31 16:47) [0]Я опишу как это пытаюсь сделать я и какие проблеммы при этом вылезают. Может вообще не туда полез.
1) Ищу окно, получаю его Handle
2) Далее использую следующую процедуру...procedure FrameWindow(wHnd: HWND);
var
Rect: TRect;
DC: hDC;
OldPen, Pen: hPen;
OldBrush, Brush: hBrush;
X2, Y2: Integer;
begin
GetWindowRect(wHnd, Rect);
DC := GetWindowDC(wHnd);
SetROP2(DC, R2_NOT);
Pen := CreatePen(PS_InsideFrame, 4, 0);
OldPen := SelectObject(DC, Pen);
Brush := GetStockObject(Null_Brush);
OldBrush := SelectObject(DC, Brush);
X2 := Rect.Right - Rect.Left;
Y2 := Rect.Bottom - Rect.Top;
Rectangle(DC, 0, 0, X2, Y2);
SelectObject(DC, OldBrush);
SelectObject(DC, OldPen);
ReleaseDC(wHnd, DC);
DeleteObject(Pen);
end;
Все замечательно отрабатывает, но так как мне нужно не просто нарисовать прямоугольник, а поморгать им, то вызов этой процедуры я засовываю в цикл (сейчас точного кода под рукой нет, но что то вроде)
for i:=1 to 5 do
begin
FrameWindow(wHnd);
Sleep(150);
InvalidateRect(wHnd,0,1); // здесь в параметрах не уверен - не помню как у меня
Sleep(150);
end;
Не работает, потому что некоторые окна перирисовываются сами за меньший отрезок времени и получается чепуха.
Хотел временно запретить перерисовываться этому окну, исправив код на вот этот...
for i:=1 to 5 do
begin
FrameWindow(wHnd);
LockWindowUpdate(wHnd);
Sleep(150);
LockWindowUpdate(0);
InvalidateRect(wHnd,0,1); // здесь в параметрах не уверен - не помню как у меня
LockWindowUpdate(wHnd);
Sleep(150);
LockWindowUpdate(0);
end;
Не понравилось потому что...
а) вызывает нездоровое моргание
б) код по-моему избыточен, а как его поправить не знаю
Попробовал вместоLockWindowUpdate
использоватьPostMessage(wHnd, WM_SETREDRAW, 1, 0)
Результат вообще не понял. Как хочет так и моргает или же не моргает вовсе.
Может подскажите что-либо? Возможно вообще не так я все делаю, а если так, то что именно неправильно?
← →
DVM © (2005-05-31 16:51) [1]Делай DrawFocusRect и рисуй не на окне а прямо поверх всего.
← →
Cosinus © (2005-05-31 16:59) [2]Хм... Как вариант.
Смотреть где окно, если оно перекрывается, значит вытащить и поморгать. После чего можно обратно запихнуть (ну это по желанию:).
Спасибо.
Но все же интересно с запретом разобраться. Уже из принципа.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c