Главная страница
    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.045 c
2-1143722382
diwww
2006-03-30 16:39
2006.04.16
как избавиться от Access violation?


2-1138920015
Sergio77
2006-02-03 01:40
2006.04.16
MySql + dbExpress + Delphi 2005, кто может помочь?


1-1142237489
DelphiLexx
2006-03-13 11:11
2006.04.16
Физические координаты курсора


2-1143641950
001
2006-03-29 18:19
2006.04.16
Oracle server, client


15-1142932132
Pazitron_Brain
2006-03-21 12:08
2006.04.16
Как настроить у себя веб-сервер





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский