我正在使用Application.ActivateHint(p),其中p:TPoint,以显示指定位置的提示.但它始终显示在Delphi XE2上的实际鼠标坐标上. 请查看堆栈: Main.ApplicationEventsShowHint('Hint String Here...',True,$18FB14):504
请查看堆栈:
Main.ApplicationEventsShowHint('Hint String Here...',True,$18FB14) :5049c644 TCustomApplicationEvents.DoShowHint + $20 :5049d043 TMultiCaster.DoShowHint + $4B :50454a6b TApplication.ActivateHint + $213 RxDBCtrl.TRxDBGrid.MouseMove([],934,45)
在RxDBCtrl.TRxDBGrid.MouseMove上,我使用正确的屏幕坐标作为参数调用TApplication.ActivateHint.但是在Main.ApplicationEventsShowHint(var HintStr:string; var CanShow:Boolean; var HintInfo:THintInfo)中,HintInfo.HintPos的值与实际鼠标坐标相同.作为参数传递给TApplication.ActivateHint的值将丢失.
为什么会这样?如何在Delphi XE2上显示所需坐标的提示?
非常感谢您的帮助!
我确信有一种方法可以使用默认的Hint控件来实现这一点,但您可能需要查看 TBalloonHint组件,它允许您在给定位置显示提示.这是一个非常简单的示例,说明如何实现这一目标:
var B : TBalloonHint; procedure TForm1.FormCreate(Sender: TObject); begin B := TBalloonHint.Create(Self); B.Style := bhsStandard; CustomHint := B; end;
创建表单时,我们将BalloonHint组件分配给主窗体,任何将parentCustomHint属性设置为True的组件都将继承CustomHint.
之后,您只需在给定的屏幕位置调用提示,如下所示:
B.ShowHint(Point(X,Y)); {Where X & Y are Screen Coordinates}
简单演示:
>创建一个新的空白VCL项目
>整合以下内容:
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var B : TBalloonHint; procedure TForm1.FormCreate(Sender: TObject); begin Hint := 'Test'; ShowHint := True; B := TBalloonHint.Create(Self); B.Style := bhsStandard; CustomHint := B; end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var P : TPoint; begin P := Point(X,Y); P := ClientToScreen(P); B.ShowHint(P); end;