1

没有 BalloonHint1 的示例按设计工作。提示刷新没有问题。

procedure TForm1.ControlList1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
    begin
       ControlList1.ShowHint:=false;
       //ControlList1.CustomHint <-------value is not set as it is not required.
       ControlList1.Hint := IntToStr(ControlList1.HotItemIndex);
       ControlList1.ShowHint:=true;
    end;

当我添加 TBalloonHint 时,BalloonHint 无法正确显示。

procedure TForm1.ControlList1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);

    begin
       ControlList1.ShowHint:=false;
       BalloonHint1.Delay:=0;
       BalloonHint1.HideAfter:=-1;
       ControlList1.CustomHint:=BalloonHint1;
       ControlList1.Hint := IntToStr(ControlList1.HotItemIndex);
       ControlList1.ShowHint:=true;
    end;

当我第一次将鼠标移到 ControlList 上时。BalloonHint 不显示。

如果我再次将鼠标移到上方(第二次),则上一次移动的 HotItemIndex 会显示索引。 在此处输入图像描述

有没有办法做一个 BalloonHint1.Refresh?我已经测试了以下一些:

Application.CancelHint; ///something that I dont want to do... but i gave it a try

ControlList1.ShowHint:=false;
ControlList1.ShowHint:=true;
4

1 回答 1

0

以下工作。

procedure TForm1.ControlList1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
   BalloonHint1.HideHint;
   BalloonHint1.Delay:=0;
   BalloonHint1.HideAfter:=-1;
   ControlList1.CustomHint:=BalloonHint1;
   ControlList1.Hint := IntToStr(ControlList1.HotItemIndex);
   BalloonHint1.ShowHint(ControlList1);
end;

然后我发现 BalloonHint 闪烁。所以我使用了以下建议:

Delphi ListView 提示闪烁

创建一个全局变量,我将在其中存储对已显示提示的最后一个 HotItemIndex 的引用。然后验证当前的 HotItemIndex 是否与我们存储的 controlListHotItemIndex 相同。

procedure TForm1.ControlList1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
 if controlListHotItemIndex<>ControlList1.HotItemIndex then
   begin
     controlListHotItemIndex:=ControlList1.HotItemIndex;
     BalloonHint1.HideHint;
     BalloonHint1.Delay:=0;
     BalloonHint1.HideAfter:=-1;
     ControlList1.CustomHint:=BalloonHint1;
     ControlList1.Hint := IntToStr(ControlList1.HotItemIndex);
     BalloonHint1.ShowHint(ControlList1);
  end;
end;
于 2021-12-06T11:13:10.667 回答