这样的功能该如何实现?(100分)

  • 主题发起人 主题发起人 陈建辉
  • 开始时间 开始时间

陈建辉

Unregistered / Unconfirmed
GUEST, unregistred user!
这样的功能该如何实现:
我想在我的程序里面当鼠标在那些 showhint 属性为 false 的
控件上或者处于窗体上时在状态栏显示特定的一条信息,比如说是
'欢迎使用',当鼠标在那些 showhint 属性为 true 的时候则显示该
控件的 hint 值,我尝试了在 application 的 onidle 事件中处理
但是发现这种方法只是对菜单有用,对于工具栏上的按钮则不起作用,为什么?我该如何做?
代码如下:

.......
procedure TForm1.DisplayHint(Sender:TObject);
begin
Statusbar1.text := GetLongHint(application.hint);
end;

procedure TForm1.Idle(Sender;TObject;var Done:Boolean);
begin
statusbar1.text := '欢迎使用';
Done := true;
end;

procedure TForm1.Create(Sender:TObject);
begin
application.onhint := DisplayHint;
application.onIdle := Idle;
end;

另:请问在哪有 FormContainer 控件下载
 
用onmousemove试一下
如果showhint 为false,把hint改为你想显示的内容
然后showhint改为true,在改为false,并改回hint值
maybe it could be.
 
把控件们用一个OnMouseMove
begin
if (Sender As TWincontrol).ShowHint then
Panel1.text := 'welcome'
else
Panel1.text := (Sender As TWincontrol).Hint;
end;

我记不得该是哪个类开始有Hint了,自己查一下吧
 
100%同意小猪的方法
 
procedure TForm1.Button1Click(Sender: TObject);
begin
if button1.ShowHint=true then
button1.ShowHint:=false
else
button1.ShowHint:=true;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if button1.ShowHint =false then
label1.Caption :='hello'
else
label1.Caption :=form1.Caption
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
button1.Hint:='Hello world';
end;
 
直接在属性对话框中设置就可以啦!autohint=true, showHint=true
 
你的程序没有错,只是有一点疏忽。
ONIDLE事件是不停的调用的,实际上

Statusbar1.simpletext := GetLongHint(application.hint);
确实执行了,显示的东东也是正确的(通过断点可以查出)。
但是ONIDLE事件立即执行并重写了Statusbar1的SimpleText。
可以在FORM1的ONMOSUEMOVE事件中写
statusbar1.SimpleText:= '欢迎使用';
这样就OK了。

如果使用1STCLASS的Statusbar就不用考虑这些问题了。
 
多人接受答案了。
 
后退
顶部