大富翁有了 KeyLife 功能后,这个帖子已经可以结束了。下面是我在这个贴子里的最后一篇,
关于 Windows 2000 和 XP 里的那个工具提示(带一个小箭头的,根据不同的选项,还可以
产生自动跟踪效果和气泡提示效果,本例只做了简单实现):
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
const // 以下是 API 常量 (只取了本程序用到的部分)
TTS_NOPREFIX=$2;
TTS_BALLOON=$40;
TTM_ADDTOOL=WM_USER+4;
TTF_TRANSPARENT=$100;
TTF_CENTERTIP=$2;
TTF_SUBCLASS=$10;
ICC_WIN95_CLASSES=$FF;
type
PTOOLINFO=^TOOLINFO;
tagTOOLINFO=packed record
cbSize
Word;
uFlags
Word;
hwnd:HWND;
uId:Longint;
rect:TRECT;
hinst:HINST;
lpszText
Char;
lParam:LPARAM;
end;
TOOLINFO=tagTOOLINFO;
PINITCOMMONCONTROLSEX=^INITCOMMONCONTROLSEX;
tagINITCOMMONCONTROLSEX=packed record
dwSize
WORD;
dwICC
WORD;
end;
INITCOMMONCONTROLSEX=tagINITCOMMONCONTROLSEX;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
hwndToolTips:HWnd;
ti:TOOLINFO;
iex:INITCOMMONCONTROLSEX;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
// 下面函数初始化 comctl32.dll
function InitCommonControlsEx_(icex
INITCOMMONCONTROLSEX):BOOL;
stdcall;
external 'comctl32.dll' name 'InitCommonControlsEx';
procedure TForm1.FormCreate(Sender: TObject);
begin
iex.dwICC:=ICC_WIN95_CLASSES;
iex.dwSize:=SizeOf(INITCOMMONCONTROLSEX);
InitCommonControlsEx_(@iex);
hwndToolTips:= CreateWindow('tooltips_class32',
nil,
WS_POPUP or TTS_NOPREFIX or TTS_BALLOON,
0,0,0,0,0,0,
HINSTANCE,
nil);
if hwndToolTips <> 0 then
begin
ti.cbSize:=SizeOf(ti);
ti.uFlags:=TTF_SUBCLASS;
// or TTF_TRANSPARENT or TTF_CENTERTIP;
ti.hwnd:=Handle;
// 这个 Handle 是哪个窗口的,提示就出现在该窗口
ti.uId:=0;
ti.hinst:=HINSTANCE;
ti.lpszText:='这是一个测试的工具提示';
Windows.GetClientRect(Handle,ti.rect);
// 这个确定响应提示的是哪个窗口的范围矩形
SendMessage(hwndToolTips, TTM_ADDTOOL, 0,LPARAM(@ti));
end;
end;
end.
代码比较简单,不需要对 Form 的 Hint 做设置,当鼠标移动到 Form 上时就会出现工具提
示。其他效果只需要设置不同的参数标志,有兴趣可以试试。