我正在使用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上显示所需坐标的提示?
非常感谢您的帮助!
答案 0 :(得分:1)
我确定可以使用默认的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;
答案 1 :(得分:0)
问题来自以下方法:
procedure TJvDBGrid.CMHintShow(var Msg: TCMHintShow); message CM_HINTSHOW;
组件的新属性:
type
TJvDBGridCellHintPosition = (gchpDefault, gchpMouse);
property CellHintPosition: TJvDBGridCellHintPosition; default gchpDefault;
要解决此问题,请在调用提示之前使用以下代码:
ShowCellHint := True;
CellHintPosition := gchpDefault;
第二行是可选的。但是我在调试器上看到了gchpMouse
属性的非常奇怪的CellHintPosition
值。