我正在使用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;
