2009-04-20 13 views
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; 

答えて

2

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

1

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

よろしくお願いいたします。

関連する問題