Главная страница
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.037 c
3-1118566441
0123
2005-06-12 12:54
2005.07.25
Упаковка таблиц Paradox


1-1120511944
Велосипед
2005-07-05 01:19
2005.07.25
Как на Canvas е писать текст под углом ?


1-1120778579
A013B
2005-07-08 03:22
2005.07.25
Всё тодже String и PAnsiChar правильно сформулированный вопрос.


1-1120555419
Zhekson
2005-07-05 13:23
2005.07.25
Как грамотно подключить к проекту новый юнит с формой?


1-1120113261
intaari
2005-06-30 10:34
2005.07.25
внесение изменений в memo готового отчет, fastreport 3.0