Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Во время показа hints мелькает фоном стандартная подсказка. [D7, WinXP]


Страницы:   1 2

Dr. Andrew ©   (2007-07-09 19:08:00) 

Доброго дня, Мастера!
Я использую свой собственный формат всплывающей подсказки hint объявленной в процедуре onFormCreate^
{* установить собственный формат подсказок *}
 Application.ShowHint := False;
 HintWindowClass := SGGraphicHint.TSGGraphicHintWindow;
 FHintWindow := HintWindowClass.Create(self);
 Application.ShowHint := True;

Проблема: во время показа hints мелькает фоном стандартная подсказка (желтое поле).
Вопрос: как можно отловить (hook или еще каким образом?) системную стандартную подсказку (вернее фоновое отображение ее Canvasа) и запретить ее появление одновременно с моим hint? Пожалуйста, приведите маленький пример. Всем спасибо!


Rouse_   (2007-07-11 21:43:00) [1]


> просто я хочу разобраться в своем исходном коде.

Самое простое разобраться сначала в чужом, чтобы потом понять что не так в своем :) Хотя конечно проще задать вопрос "что у меня не работает"... ;)


Dr. Andrew   (2007-07-11 18:50:00) [2]

просто я хочу разобраться в своем исходном коде. Может все же есть мнения у кого-то еще? Всем спасибо!


MetalFan   (2007-07-11 18:47:00) [3]

Dr. Andrewты
MetalFan ©   (10.07.07 08:53) [12]
видел? чем тебя не устраивает?


Dr. Andrew   (2007-07-11 17:10:00) [4]

так Paint у меня уже есть (смотри полный код выше), только несколько свой, что там модет быть не так?  А что происходит в процедуре Erase(var Message: TMessage), что она такое вытворяет? Спасибо за ответ.


Rouse_   (2007-07-11 17:00:00) [5]

Paint забыл...


Dr. Andrew   (2007-07-11 14:42:00) [6]

{jХорошою вайте поп порядку:
1. Введение процедуры - procedure CreateParams (var Params: TCreateParams); override; ничего не меняет, кроме тог что удаляется бордюр вокруг канваса подсказки, но это мелочь понятная.
2. Введение процедуры procedure Erase(var Message: TMessage); message WM_ERASEBKGND; с любым ее значением красит белый канвас в черный цвет с проступающим на нем цветным, например, текстом и дополнительно нарисовывает контуры канваса при каждом его перемещении, то есть канвас становится похожим на совокупность множества рамочек и подсказка становится нечитабельной.


Rouse_   (2007-07-11 10:18:00) [7]

Я ничего не понимаю... Тебе дали код, ты его смотрел? Зачем задавать вопрос если решение у тебя уже есть? Касвас создается при создании окна, перед созданием окна перед регистрацией класса происходит вызов CreateParams... все перекрывается - все отрисовывается... бликов нет. Нафига тебе для такой простой задачи еще и хуки то понадобились?


Dr. Andrew   (2007-07-10 23:30:00) [8]

только том, что появляются блики. решения проблемы нет. может Вы знаете как возможно хуком можно перехвать создание стандартного канваса подсказки и сразу выводить мой канвас? Спасибо!


MetalFan   (2007-07-10 23:18:00) [9]

а в чем необходимость перекрытия ActivateHint???


Rouse_   (2007-07-10 17:45:00) [10]

Вот если ты всетаки посмотришь мой пример, то сможешь увидеть как сее действо происходит. См реализацию

 TFWHintWindow = class(THintWindow)
 private
   FHint: TFWHint;
   FBlend, FSRC: TBitmap;
 protected
   procedure CreateParams (var Params: TCreateParams); override;
   procedure Paint; override;
   procedure Erase(var Message: TMessage); message WM_ERASEBKGND;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
   procedure ActivateHint (HintRect: TRect; const AHint: string); Override;
 end;


Dr. Andrew   (2007-07-10 17:00:00) [11]

Я не имел ввиду пример fwhint.zip, я все время веду речь о приведенном мною выше коде собственного hint. И хочу понять, что вызывает долисекундные блики. А можно как-то перехватить создание стандартного канваса, например, с помощью hook? Я так понимаю, что вначале создается канвас стандартный желтого традиционного цвета, а затем идет перерисовка на мой канвас. Если можно отловить все это хуком, то можно небольшой пример как это сделать практически? Спасибо за помощь!


Rouse_   (2007-07-10 16:17:00) [12]

Так в моем примере размер канваса как раз кастомный, там вообще все кастомное :) Но бликов никогда небыло :)


Dr. Andrew   (2007-07-10 15:11:00) [13]

представить пример не представляется возможным так как он интегрирован в большую программу, а фоном в виде блика на доли секунды всплывает точно такой же канвас с желтого цвета, вторым планом. пример, приведенный выше работает более стабильно, но у в моем случае я сам расчитываю размер канваса подсказки и практически аналогично повторяю вышеуказанный код.


Rouse_   (2007-07-10 14:40:00) [14]


> но там тоже нет решения пока.

В смысле, тот пример тоже показывает фоном желтый цвет периодически?
А можно я скажу "не верю"? ;)


Инс   (2007-07-10 14:32:00) [15]

Кинь-ка мне на мыло маленький демонстрационный примерчик данного хинт-виндоу.


Dr. Andrew   (2007-07-10 14:05:00) [16]

спасибо, не сразу обратил внимание, уже нашел, посмотрел, но там тоже нет решения пока.


Rouse_   (2007-07-10 14:03:00) [17]

Плохо искал :)
http://rouse.drkb.ru/files/fwhint.zip


Dr. Andrew   (2007-07-10 13:50:00) [18]

Инс Спасибо за диалог, но включение процедуры WMEraseBkgnd(var Message: TWMEraseBkgnd) не меняет, а даже ухудшает положение. Канвас подсказки становится черного цвета, а блики все равно есть. Использование CalcHintRect тоже не влияет на фоновую перерисовку. Есть еще мнений по данной проблеме?

Rouse_ Спасибо за совет, но поданной ссылке ничего не нашел, можно дать адрес точнее. Спасибо!


Rouse_   (2007-07-10 11:38:00) [19]

Посмотри вот этот компонент: http://rouse.drkb.ru/components.php#fwhint
по его аналогу добавь к себе что у тебя забыто :)


Инс   (2007-07-10 10:42:00) [20]

чуть подправлю, на коленке писал...

procedure TGraphicHintWindow.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
Message.Result:=1;  // Перекрываем старый обработчик пустышкой
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо