1

ファイル名のリストボックス内の項目にマウスを合わせると、画像のプレビュー(ほとんどヒントのように)を表示するにはどうすればよいですか?フォームを表示して画像を読み込んでみましたが、プレビューフォームが表示されると、リストボックスのフォーカスが失われます。つまり、マウスを動かしても、リスト内の次の項目に移動してもプレビュー画像は変更されません。 。

ありがとう、ピーター。


TOndrejからの回答に基づいて、カスタムTHintWindowを実装しようとしましたが、Canvas.StretchDrawはパラメーターとして送信されたビットマップを描画しません。何かアイデアはありませんか?テキストは正常に表示されます。

procedure TFormMain.DisplayPreview(HintImage: TBitmap);
var
  CustomHint: THintWindow;
  Rect: TRect;
  MousePoint: TPoint;
begin
  *{
    Based on Source: http://www.chami.com/tips/delphi/112996D.html
  }*
  GetCursorPos(MousePoint);
  with Rect do
    begin
      // set the position and size of the hint window
      Left   := MousePoint.X;
      Top    := MousePoint.Y;
      Right  := Left + 50;
      Bottom := Top + 25;
    end;

  CustomHint := THintWindow.Create(Self);
  try
    with CustomHint do
      begin
        // set the background color
        //Color := clNone;
        **Canvas.StretchDraw(Rect, HintImage);**
        ActivateHint(Rect, 'Hint');
        Application.ProcessMessages;
        //
        // perform your tasks here
        // before closing the hint window
        //
        Sleep(500);
        ReleaseHandle;
      end;

  finally
    if Assigned(CustomHint) then
      CustomHint.Free;
  end;
end;
4

2 に答える 2

2

私には、カスタムヒントウィンドウが必要なようです。これを行うには、新しい子孫を作成し、ユニット内のグローバル変数にTHintWindow新しいクラスを割り当ててアプリケーション全体にグローバルに設定するか、メッセージを処理して新しいヒントウィンドウクラスを割り当てる独自のリストボックス子孫を作成する必要があります。 。(HintInfoは、VCLによってメッセージでコントロールに渡されたレコードを指します。)HintWindowClassFormsCM_HINTSHOWHintInfo.HintWindowClassCM_HINTSHOW

于 2009-04-20T11:47:54.150 に答える
1

1)プレビューフォームをダイアログ(モーダルウィンドウ)のように表示していますか?はいの場合は、非モーダルウィンドウに変更します。
2)プレビューフォームが表示されたら、フォーカスを親ウィンドウに戻すことを忘れないでください。そうすれば、リストボックスを持つ親フォームにフォーカスがあり、マウス移動イベントがリストボックスに渡されます。

よろしくお願いします。

于 2009-04-20T11:40:58.457 に答える