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

Вниз

Как использовать свою форму для ToolTips   Найти похожие ветки 

 
Кашперук Иван   (2006-03-12 05:27) [0]

Хочу сделать сабж - показывать форму при наведении на элемент в главной форме, ждать пару сек, (2500 мсек вообще-то по умолчанию для Подсказок), и закрывать ее.

Чтоб работало хотя-бы чуточку похоже на Hint стандартный-а на форму я хочу кинуть, скажем, пару кнопок и листбокс.


 
Glex ©   (2006-03-12 09:53) [1]

А что не получается?


 
Кашперук Иван   (2006-03-12 12:34) [2]

Нуу, собственно - ничего не получается - плохо происходит обновление - или моментально (MouseMove то очень часто отрабатывает), или не очень похоже на стандартный (если делаю открытие по левому клику)

Хотелось бы кратенькое руководсво, если можно. Или примерчик.


 
Жуков Олег   (2006-03-12 14:36) [3]

Контролы показывают хинт, когда им приходит сообщение CM_HINTSHOW. Надо написать наследников от этих контролов, и в них перекрыть обработку этого сообщения. Показывать форму подсказки функцией ShowWindow(HintForm.Handle, SW_SHOWNOACTIVATE). Прятать соответсвенно ShowWindow(HintForm.Handle, SW_HIDE). Я не знаю, приходит ли сообщение о том, что надо спрятать хинт, но по умолчанию подсказка спрятаться она должна через Application.HintPause или при покидании курсором мыши области контрола (WM_MOUSELEAVE, предварительно в MouseMove подписаться на получение этого сообщения функцией TrackMouseEvent).


 
Кашперук Иван   (2006-03-13 00:36) [4]

Ну, так именно как вы написали - не совсем верно, и вот почему:
1. OnHint срабатывает, как только попадаем на контрол, а для обычного хинта там еще всякие задержки, т.д.
Но это обходится Таймерами.
Но я все-таки решил делать это на OnMouseMove - у меня просто не отдельно стоящие контролы, а строки грида, поэтому чуть по-другому.

2. ShowWindow с параметром SW_SHOWNA или SW_SHOWNOACTIVATE плохо работает в данном случае - и вот в чем бы я хотел помощь - потому что HintForm.Show делает эту форму активной.

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

Кто подскажет?


 
Кашперук Иван   (2006-03-13 01:50) [5]

Пардон - у контрола на форме ToolTipa просто стояло Visible = False :)

И вот теперь, последний вопрос:
Как, не создавай свой компонент-наследник обработать OnMouseLeave и OnMouseEnter?


 
Glex ©   (2006-03-13 08:32) [6]

CM_MOUSELEAVE
CM_MOUSEENTER

Поищи поиском.

А ещё совет: www.drkb.ru =)


 
Жуков Олег   (2006-03-13 09:59) [7]

>Кашперук Иван
Я про OnHint ничего не говорил


 
REA   (2006-03-13 12:17) [8]

Можно перекрыть стандартный класс и присвоить переменную HintWindowClass.


 
Кашперук Иван   (2006-03-13 17:02) [9]

Вот нашел ответ на свой вопрос на загран. форуме


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)
   Label1: TLabel;
   Button1: TButton;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
   FFocusControl: TControl;
   procedure ApplicationIdle(Sender: TObject; var Done: Boolean);
 public
   { Public declarations }
   procedure OnEnter(Sender: TObject);
   procedure OnExit(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
 FFocusControl := nil;
 Application.OnIdle := ApplicationIdle;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 Application.OnIdle := nil;
end;

procedure TForm1.ApplicationIdle(Sender: TObject; var Done: Boolean);
var
CurControl: TControl;
P: TPoint;
begin
 GetCursorPos(P);
 CurControl := FindDragTarget(P, True);
 if FFocusControl <> CurControl then
   begin
   if FFocusControl <> nil then
     OnExit(FFocusControl);
   FFocusControl := CurControl;
   if FFocusControl <> nil then
     OnEnter(FFocusControl);
 end;
end;

procedure TForm1.OnEnter(Sender: TObject);
begin
//OnEnter code
 If sender=Button1 then begin
   Label1.caption:="Hello";
   Button1.Caption:="Exit";
 end;
end;

procedure TForm1.OnExit(Sender: TObject);
begin
//OnExit code
 If sender=Button1 then begin
  Label1.caption:="Godbye";
  Button1.Caption:="Enter";
 end;
end;

end.



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.038 c
2-1143754713
mr1Andersen
2006-03-31 01:38
2006.04.16
Блокировка


3-1140592496
Александр_К
2006-02-22 10:14
2006.04.16
ODBC without BDE


2-1143801734
alex_pv2
2006-03-31 14:42
2006.04.16
Подсчет символов в текстовом файле


2-1143965258
0lesya
2006-04-02 12:07
2006.04.16
Как с программой написанной под 5-м Delphi работать под 7-м!


2-1143750221
serko
2006-03-31 00:23
2006.04.16
Второй экземпляр проги!