请问3721的HINT是怎么做的?(100分)

  • 主题发起人 主题发起人 jxzqsun
  • 开始时间 开始时间
J

jxzqsun

Unregistered / Unconfirmed
GUEST, unregistred user!
1、那个HINT居然可以用鼠标移动到上面,delphi的hint好象不行;
2、它是怎么刚好放在地址栏下面呢?妈的,对的很整齐,不论我鼠标点击地址栏的哪个位置;

谢谢各位。
 
其实hint就是一个窗口而已,
只是,它显示的时候不获得焦点,能自动隐藏
Delphi的Hint也可以这样做的,
你可以用THintWindow 创建一个Hint对象,然后用它自己的方法把它激活
(激活的位置,自己可以随便设,固定的出现在哪里不是很容易吗?)

两个问题都回答了,不知楼主可否明白?
 
大概知道意思,不过最好有demo,呵呵,谢谢。
 
function abc(msg:string):boolean;
var
h : THintWindow;
r : TRect;
p : TPoint;
i : integer;
begin
GetCursorPos(p);
with r do
begin
left := p.x;
top := p.y;
right := p.x+100;
bottom := p.y+100;
end;
h := THintWindow.Create(form1);
with h do
begin
Color := clInfoBk;
ActivateHint(r,msg);
for i:=0 to 10000000 do
Application.ProcessMessages;
ReleaseHandle;
Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
abc(edit1.text);
end


 
谢lich和wqhatnet,能再问一下我想把这个hint显示在别人的程序上,就象英文翻译软件那
样,就是说怎么在我指定的HANDLE的EDIT获得焦点的时候显示HINT呢?就象3721那样,点一
下地址栏就会提示“输入汉字,就能……”?谢谢了。
 
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 TForm1.Button1Click(Sender: TObject);

begin

ShowBalloonTip(Button1, 1, 'Title',

'Balloon tooltip,http://kingron.myetang.com');

end;
 
ShowBalloonTip(edit1, 1, 'Title',
'Balloon tooltip,http://kingron.myetang.com');
end;

为什么第一个参数我改成别的就不行?比如是在BUTTON1里面加了这个,为什么不可以在
button2上显示HINT?或者在我已知的HANDLE上面显示呢?
 
wqhatnet,您给的代码:
for i:=0 to 10000000 do
Application.ProcessMessages;

CPU使用率非常高,有没有别的办法?
 
ShowBalloonTip(edit1, 1, 'Title',
'Balloon tooltip,http://kingron.myetang.com');
end;


edit1.handle
注意是句柄
也可以是form1.handle
//
那只是一刹那的事,我想不到其他的办法
用sleep(5000)试试吧
 
报错,ShowBalloonTip(form1.handle, 1,'Title',
'Balloon tooltip,http://kingron.myetang.com');
Incompatible types: 'TWinControl' and 'HWND'
 
不好意思搞错了
ShowBalloonTip(Button1, 1, 'Title','Balloontooltip,http://kingron.myetang.com');
//
ShowBalloonTip(edit1, 1, 'Title','Balloon tooltip,http://kingron.myetang.com');
//
ShowBalloonTip(form1, 1, 'Title','Balloon tooltip,http://kingron.myetang.com');
有些没有HANDLE的控件是不行的
 
后退
顶部