Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.25;
Скачать: CL | DM;

Вниз

Как создать моргающий прямоугольник вокруг любого окна?   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2005.07.25;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.024 c
8-1111831947
Quattro
2005-03-26 13:12
2005.07.25
выезжающая картинка


3-1118830441
stud
2005-06-15 14:14
2005.07.25
помогите с компонентом для отображения текста и картинок (Д7)


14-1120417718
Ломброзо
2005-07-03 23:08
2005.07.25
"Подключение к удалённому рабочему столу"


9-1113213994
Goorus
2005-04-11 14:06
2005.07.25
Моделирование поворота


6-1113740754
Alpine
2005-04-17 16:25
2005.07.25
Работа с Модемом.