procedure TForm1.WndProc(var Message: TMessage);
begin
if Message.LParam = Longint(Button1) then
MakeHintWindow(Button1, Message.Msg);
inherited WndProc(Message);
end;
procedure TForm1.MakeHintWindow(Sender: TObject; Msg: Integer);
var
Mp : TPoint;
R : TRect;
begin
if Sender is TButton then
begin
if (Msg = CM_MOUSEENTER) then // 마우스가 들어올때
begin
GetCursorPos(Mp);
R := Rect(Mp.x, Mp.y, Mp.x+200, Mp.y+30);
HintWindow.ActivateHint(R, '안녕하세요 저는 불멸의 화상 구창민입니다.');
end;
if (Msg = CM_MOUSELEAVE) then // 마우스가 떠날때
begin
if HintWindow <> nil then HintWindow.ReleaseHandle;
end;
end;
end;
음.. 우선 첫번째 방법으론 Application.OnShowHint 를 가로채서
Hint 의 HideTimeOut 시간을 한정없이 늘려버리시면
간단히 해결 될거 같구여.
두번째 방법으론, 자신만의 힌트를 만들어서 쓰는것도 좋은 방법이겠지요.
첫번째 방법은 아래처럼 아주 간단히 해결 하실수 있습니다.
procedure TForm1.DoOnShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo);
begin
HintInfo.HideTimeout := 10000;
{
HintInfo.HintPos //힌트의 위치.
HintInfo.HintColor; //힌트의 색깔
HintInfo.HintMaxWidth; //워드랩 되는 넓이.
등등...
}
end;
procedure FormCreate(...
begin
Application.OnShowHint := DoOnShowHint;
end;
또한 두번째 방법을 한번 간소하게 구현해보았는데 ^_^
응용하셔서 사용하세여.
먼저 Control 의 ShowHint 속성을 끄고 하세여.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure WndProc(var Message: TMessage); override;
public
{ Public declarations }
HintWindow : THintWindow;
procedure MakeHintWindow(Sender: TObject; Msg: Integer);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WndProc(var Message: TMessage);
begin
if Message.LParam = Longint(Button1) then
MakeHintWindow(Button1, Message.Msg);
inherited WndProc(Message);
end;
procedure TForm1.MakeHintWindow(Sender: TObject; Msg: Integer);
var
Mp : TPoint;
R : TRect;
begin
if Sender is TButton then
begin
if (Msg = CM_MOUSEENTER) then // 마우스가 들어올때
begin
GetCursorPos(Mp);
R := Rect(Mp.x, Mp.y, Mp.x+200, Mp.y+30);
HintWindow.ActivateHint(R, '안녕하세요 저는 불멸의 화상 구창민입니다.');
end;
if (Msg = CM_MOUSELEAVE) then // 마우스가 떠날때
begin
if HintWindow <> nil then HintWindow.ReleaseHandle;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
HintWindow := THintWindow.Create(Application);
HintWindow.Color := clInfoBk;
HintWindow.Canvas.Font.Name := '굴림';
HintWindow.Canvas.Font.Size := 10;
end;
end.