别具个性化的汽泡提示 (DELPHI)
注: 以下单元可以直接被调用
$ [! e* l' f+ I5 {& `* @# m1 P* {) I) x, f9 j4 U
unit unit1;7 Y, i: L" q. P! C% a6 f6 o
. L5 a# d' O7 {" t
interface
- L2 c z N. C4 [( }: E
3 Y% i- m$ t: euses. \: S, V" Y( K6 O/ z
Windows, Messages, Classes, Controls, Forms, CommCtrl;
6 t/ Z' b& V* ~# u* E$ O$ q! y" K3 f; P8 y2 H5 S
type8 r3 n$ U6 T5 F+ F, p& U
THintWin=class(THintWindow), k. Y# R$ r2 I: B5 ^7 K, J
private
6 @0 n7 d$ @$ ]! c9 w# x* n FLastActive: THandle;
7 ^0 m: w2 M. `: |1 ? public
5 S, G; D: @5 k7 F( Y procedure ActivateHint(Rect:TRect;Const AHint:string);
) g9 ~7 k) y/ c6 H9 k override;
! W8 m/ m* `5 ]& d end;
7 M& x% R3 A0 x" [4 f
0 l7 F- m* j5 \3 _* A/ Ximplementation
4 S h" d) `2 r( t& c" f& I$ c, J0 [2 F% R% U% U4 C: C: J8 A0 p
procedure AddTipTool(hWnd: DWORD; IconType: Integer; Title, Text: PChar);
7 q6 B& z1 h7 d9 Y! Vconst% ~% x; Y) N7 V, V
TTS_BALLOON =$0040;* t- @. j: z" k' v3 t4 J3 _
TTM_SETTITLE=WM_USER + 32;' ]* V* \7 x! o. j
var s w/ X; u7 [+ ^' V
hWndTip: DWORD;
P8 C0 |* j8 s; _; B ToolInfo: TToolInfo;
( E: x3 P9 k0 m! M$ }# Q' ibegin8 F1 t5 o2 r# Q9 M! s" ~6 o
hWndTip:=CreateWindow(TOOLTIPS_CLASS, nil,2 @$ p0 ~. _1 o; H+ O: M4 I
WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP,/ r! Y# O1 i$ A
0, 0, 0, 0, hWnd, 0, HInstance, nil);
; s7 j6 O; v* I# d% R0 ] if (hWndTip<>0) then5 L, x7 T0 N% e
begin
% ~6 \ B4 c+ _2 `+ L ToolInfo.cbSize:=SizeOf(ToolInfo);# I" H9 |: D! \3 ~2 }
ToolInfo.uFlags:=TTF_IDISHWND or TTF_SUBCLASS or TTF_TRANSPARENT;
4 }9 A# q5 ~& O7 ~0 ` ToolInfo.uId:=hWnd;+ @4 W* k; z) Y: t* M3 [
ToolInfo.lpszText:=Text;
2 c+ j; a& v `! ^7 \ SendMessage(hWndTip,TTM_ADDTOOL,1,Integer(@ToolInfo));$ r2 q% k [. }0 Q
SendMessage(hWndTip,TTM_SETTITLE,IconType,Integer(Title));
3 y& u1 o) S7 g+ @# t/ g end;# x- I( y, k- ?' K& F9 o0 o
InitCommonControls();
" n. b* S. I+ |/ [0 z* y( t6 zend;8 L4 L A: c9 M5 f
( t9 F- u: H: |) M4 B, C5 P% v
procedure THintWin.ActivateHint(Rect:TRect; const AHint:string);) v( a: y/ J, p4 Y- C2 W
begin
! q3 L0 A% \) K if FLastActive<>WindowFromPoint(Mouse.CursorPos) then
! T- c7 T+ _3 l$ c4 E5 H6 B: t AddTipTool(WindowFromPoint(Mouse.CursorPos),1,'星星电脑技术论坛', PChar(AHint)); % ]) J Y/ w/ b+ r8 \
FLastActive:=WindowFromPoint(Mouse.CursorPos);6 U- J1 |9 n4 g* O6 F. w
end;
4 K1 r/ b4 L- \, j* c' ?4 J$ x* F3 f4 H! D3 A- W9 Z
initialization" q- Z% f, o9 ` g* C! ?4 [( ~7 W1 r
Application.HintPause:=0;
* G6 Y7 X! @3 ?2 wApplication.ShowHint:=False;2 R4 i; p o! c: \6 F
HintWindowClass:=THintWin;
8 j% v4 d/ e0 J! QApplication.ShowHint:=True;
& m. l" ^$ Q, c6 Y+ e6 W0 aend.