Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1144154003
Irmantukas
2006-04-04 16:33
2006.04.16
COM порт. С чего начать?


2-1143925166
Golik
2006-04-02 00:59
2006.04.16
Поиск и Замена


8-1131452209
kl0n™
2005-11-08 15:16
2006.04.16
Прозрачность


2-1143362680
mrv78
2006-03-26 12:44
2006.04.16
проблемы lookup поля


15-1143551972
oldman
2006-03-28 17:19
2006.04.16
Для любителей группы "Черный кофе" (старой, годика 1987....)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский