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 の上にマウスを移動したとき。バルーンヒントは表示されません。

マウスをもう一度 (2 回目) 移動すると、前の移動の 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 に答える