![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Рисование на Desktop e [D4, Win95/98, Win2k]
FFFF © (2002-03-06 16:22:00)Уважаемые мастера!
У меня такая задача - нужно отображать различные надписи
на десктопе , поверх всех окон. Надпись отображается в
течении некоторого времени, затем изчезает. Я использовал
прозрачное окно, но от артефактов на перекрываемых окнах
избавиться не удалось. Кроме того, окно, будучи невидимым,
все же присутсвовало, и перекрывало нижележащие окна.
Посоветуйте, что можно придумать.
Алексей.
VuDZ (2002-03-07 15:31:00) [1]если у тебя текст не меняется очень часто, то не будет. на мыло ушёл исходник с примером
FFFF (2002-03-07 11:33:00) [2]Если исходник есть, пришли. На alexey@paninter.ru
Тогда получается, что это нужно делать перед выводом
каждого текстового сообщения(текст->битмап->регион).
Не будет ли такая конструкция тормозить?
VuDZ (2002-03-06 17:38:00) [3]есть такая вещь - регионы.
если есть желание - можно текс перевести в битмап, из него сделать регион. Как это делается - могу прислать исходник.
Потом, это регионвместе с картинкой накладываешь на окно и всё.
FFFF (2002-03-06 16:53:00) [4]Увы, частое обновление надписи не помогает, остаются артефакты
на окнах. А как перехватить все изменения десктопа,или других окон, мне в голову не приходит.
SergeySA (2002-03-06 16:48:00) [5]Наверно да. Не пробывал. Обновляй десктоп и др. окна
при передвиганиях. Или рефреш чаще надпись.
FFFF (2002-03-06 16:29:00) [6]Не получится ли при этом, что какое-то окно передвинут и надпись
будет, например, разорвана пополам ?
SergeySA (2002-03-06 16:25:00) [7]Для этого надо получить контекст чужого окна, либо всего экрана:
function GetDC(Wnd: HWnd): HDC;
где Wnd - указатель на нужное окно, или 0 для получения контекста всего экрана.
И далее, пользуясь функциями API, нарисовать все что надо.
procedure DrawOnScreen;
var
ScreenDC: hDC;
begin
ScreenDC := GetDC(0); {получить контекст экрана}
Ellipse(ScreenDC, 0, 0, 200, 200); {нарисовать}
ReleaseDC(0,ScreenDC); {освободить контекст}
end;
Не забывайте после своих манипуляций посылать пострадавшим (или всем) окнам сообщение о необходимости перерисовки, для восстановления их первоначального вида.