在Application的OnHint事件(不是OnShowHint)中,如何得到产生Hint的控件(包括其它窗口中的)名称?(100分)

  • 主题发起人 主题发起人 Axe
  • 开始时间 开始时间
A

Axe

Unregistered / Unconfirmed
GUEST, unregistred user!
如果只有一个窗口,用ControlAtPos就可实现,但如果像Delphi IDE一样有多个窗口,如
何在一个窗口的代码中得到其它窗口中产生Hint的控件呢?如果使用FindVCLWindow,则只
对TWinControl的派生类有效,而不能得到其它类的控件如TGraphicControl。
OnShowHint事件中可以返回相关参数,但在OnHint事件发生时OnShowHint事件尚未发生,
该如何得到这些参数呢?
 
如果你控件的Hint内容都是唯一的,那你可以在Application.OnHint
用Application.Hint与每个控件的Hint进行一一比较。
 
可是,在我的程序中,Hint都是动态变化且可以编辑的。
 
你使用动态编辑设置控件Hint与在Application.OnHint用Application.Hint和每个控件
的Hint进行一一比较并无影响,只要控件的Hint值是唯一的就可以了。
var
; I: Integer;
begin
; for I:= 0 to Form1.ControlCount -1 do
; begin
; ; if Form1.Controls.Hint = GetLongHint(Application.Hint) then
; ; ; exit;
; end;
end;
 
既然是动态可编辑,又怎能保证唯一呢?不过,你的办法在90%的情况下应该是可行的。
但对于这种枚举的方法我总是不太满意,还想等等有没有更好的办法。
而且,程序窗口不止一个,还要搜索每一个窗口的所有控件,是不是太浪费系统资源?

先谢谢你提供了一种解决之道。
 
没人理我,算了,结束吧。感谢kk98提供一种解决方法。
 
后退
顶部