2009-04-20 8 views
1

Comment puis-je afficher un aperçu (presque comme un indice) d'une image lorsque je passe la souris sur un élément d'une liste de noms de fichiers? J'ai essayé d'afficher un formulaire et de charger l'image, mais lorsque le formulaire d'aperçu s'affiche, je perds le focus pour la liste, ce qui signifie que lorsque je bouge la souris, l'image d'aperçu ne change pas lorsque je passe à l'élément suivant .Aperçu d'une image dans une liste

Merci, Pieter.


J'ai, en fonction de la réponse de TOndrej, a essayé de mettre en œuvre un THintWindow personnalisé, mais le Canvas.StretchDraw ne tire pas le bitmap envoyé en tant que paramètre. Des idées pourquoi pas? Le texte est affiché normalement.

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; 

Répondre

2

Pour moi, il semble que vous voulez une fenêtre de conseil personnalisé. Pour ce faire, vous devez écrire un nouveau descendant THintWindow et le définir globalement pour l'ensemble de l'application en affectant votre nouvelle classe à la variable globale HintWindowClass dans l'unité Forms, ou écrivez votre propre descendant de la liste de contrôle dans lequel vous traiterez le message CM_HINTSHOW et affectez votre nouveau classe de fenêtre de conseil à HintInfo.HintWindowClass. (HintInfo pointe vers un enregistrement transmis à votre contrôle dans le message CM_HINTSHOW par la VCL.)

1

1) Êtes-vous étales ta forme d'aperçu comme une boîte de dialogue (fenêtre Modal) si oui, changez-le à la fenêtre non modale. 2) N'oubliez pas de remettre le focus sur votre fenêtre parent une fois que le formulaire d'aperçu apparaît, de cette façon votre formulaire parent qui a la listbox a le focus et il passera les événements de déplacement de la souris dans la listbox.

Cordialement.