Форум: "Основная";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
ВнизКак использовать свою форму для 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.047 c