加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:12:25 所属栏目:大数据 来源:网络整理
导读:我正在使用Application.ActivateHint(p),其中p:TPoint,以显示指定位置的提示.但它始终显示在Delphi XE2上的实际鼠标坐标上. 请查看堆栈: Main.ApplicationEventsShowHint('Hint String Here...',True,$18FB14):5049c644 TCustomApplicationEvents.DoShowHi
我正在使用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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读