procedure ShowBalloonTip(Control: TWinControl; Icon: integer; Title: pchar; Text:PWideChar);const TOOLTIPS_CLASS = 'tooltips_class32'; TTS_ALWAYSTIP = $01; TTS_NOPREFIX = $02; TTS_BALLOON = $40; TTF_SUBCLASS = $0010; TTF_TRANSPARENT = $0100; TTF_CENTERTIP = $0002; TTM_ADDTOOL = $0400 + 50; TTM_SETTITLE = (WM_USER + 32); ICC_WIN95_CLASSES = $000000FF; type ToolInfo = packed record cbSize: integer; uFlags: integer; hwnd: THandle; uId: integer; rect: TRect; hinst: THandle; lpszText: PWideChar; lParam: integer; end; var hWndTip: THandle; ti: ToolInfo; hWnd: THandle; begin hWnd := Control.Handle; hWndTip := CreateWindow(TOOLTIPS_CLASS, nil, WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP,0, 0, 0, 0, hWnd, 0, HInstance, nil); if hWndTip <> 0 then begin SetWindowPos(hWndTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); ti.cbSize := SizeOf(ti); ti.uFlags := TTF_CENTERTIP or TTF_TRANSPARENT or TTF_SUBCLASS; ti.hwnd := hWnd; ti.lpszText := Text; Windows.GetClientRect(hWnd, ti.rect); SendMessage(hWndTip, TTM_ADDTOOL, 1, integer(@ti)); SendMessage(hWndTip, TTM_SETTITLE, Icon mod 4, Integer(Title)); end; end;我用下面测试的!成功的。 procedure Tf_main.BitBtn1Click(Sender: TObject); begin ShowBalloonTip(BitBtn1, 1, 'Title','您想点击BitBtn1吗?'); end; 可是我想当鼠标移到BitBtn1上的时候,能显示‘您想点击BitBtn1吗?’,怎么实现?
dypher(dypher) 已经告诉你了.
procedure WndProc(var Message : TMessage); override; procedure TForm1.WndProc(var Message : TMessage); begin if Message.LParam = Longint(Button1) then begin if (Message.Msg = CM_MOUSEENTER) then ShowBalloonTip(BitBtn1, 1, 'Title','您想点击BitBtn1吗?'); end; inherited WndProc(Message); end;
感觉有点小题大作
TOOLTIPS_CLASS = 'tooltips_class32';
TTS_ALWAYSTIP = $01;
TTS_NOPREFIX = $02;
TTS_BALLOON = $40;
TTF_SUBCLASS = $0010;
TTF_TRANSPARENT = $0100;
TTF_CENTERTIP = $0002;
TTM_ADDTOOL = $0400 + 50;
TTM_SETTITLE = (WM_USER + 32);
ICC_WIN95_CLASSES = $000000FF;
type
ToolInfo = packed record
cbSize: integer;
uFlags: integer;
hwnd: THandle;
uId: integer;
rect: TRect;
hinst: THandle;
lpszText: PWideChar;
lParam: integer;
end;
var
hWndTip: THandle;
ti: ToolInfo;
hWnd: THandle;
begin
hWnd := Control.Handle;
hWndTip := CreateWindow(TOOLTIPS_CLASS, nil,
WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP,0, 0, 0, 0, hWnd, 0, HInstance, nil);
if hWndTip <> 0 then
begin
SetWindowPos(hWndTip, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
ti.cbSize := SizeOf(ti);
ti.uFlags := TTF_CENTERTIP or TTF_TRANSPARENT or TTF_SUBCLASS;
ti.hwnd := hWnd;
ti.lpszText := Text;
Windows.GetClientRect(hWnd, ti.rect);
SendMessage(hWndTip, TTM_ADDTOOL, 1, integer(@ti));
SendMessage(hWndTip, TTM_SETTITLE, Icon mod 4, Integer(Title));
end;
end;我用下面测试的!成功的。
procedure Tf_main.BitBtn1Click(Sender: TObject);
begin
ShowBalloonTip(BitBtn1, 1, 'Title','您想点击BitBtn1吗?');
end;
可是我想当鼠标移到BitBtn1上的时候,能显示‘您想点击BitBtn1吗?’,怎么实现?
procedure TForm1.WndProc(var Message : TMessage);
begin
if Message.LParam = Longint(Button1) then
begin
if (Message.Msg = CM_MOUSEENTER) then
ShowBalloonTip(BitBtn1, 1, 'Title','您想点击BitBtn1吗?');
end;
inherited WndProc(Message);
end;
另外,事件可以为onMouseMove或onMouseEnter;
應該好用的!!!
Y: Integer);
begin
ShowBalloonTip(BitBtn1, 1, 'Title','您想点击BitBtn1吗?');
end;
Y: Integer);
begin
ShowBalloonTip(BitBtn1, 1, 'Title','您想点击BitBtn1吗?');
end;