当前位置 : 主页 > 编程语言 > delphi >

Application.ActivateHint显示了Delphi XE2上错误位置的提示

来源:互联网 收集:自由互联 发布时间:2021-06-23
我正在使用Application.ActivateHint(p),其中p:TPoint,以显示指定位置的提示.但它始终显示在Delphi XE2上的实际鼠标坐标上. 请查看堆栈: Main.ApplicationEventsShowHint('Hint String Here...',True,$18FB14):504
我正在使用Application.ActivateHint(p),其中p:TPoint,以显示指定位置的提示.但它始终显示在Delphi XE2上的实际鼠标坐标上.

请查看堆栈:

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;
网友评论