Question

Comment puis-je afficher un aperçu (presque comme un indice) d'une image quand je passez la souris sur un élément dans une zone de liste de noms de fichiers? J'ai essayé montrant une forme et le chargement de l'image, mais quand la forme d'aperçu montre, je perds point pour le listbox qui signifie que lorsque je déplace la souris, l'image d'aperçu ne change pas quand je vais à l'élément suivant dans la liste .

Merci, Pieter.


Je, 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. Toutes les 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;
Était-ce utile?

La solution

Pour moi, il semble que vous voulez une petite fenêtre surgissante personnalisée. Pour ce faire, vous devez écrire un nouveau descendant de THintWindow et soit le mettre globalement à toute l'application en affectant votre nouvelle classe à la variable globale HintWindowClass dans l'unité de Forms, ou écrivez votre propre descendant listbox dans lequel vous gérerez message CM_HINTSHOW et affecter votre nouveau indice classe de fenêtre à HintInfo.HintWindowClass. (HintInfo pointe vers un enregistrement passé à votre contrôle dans le message CM_HINTSHOW par la VCL.)

Autres conseils

1) Êtes-vous l'affichage de votre formulaire de prévisualisation comme une boîte de dialogue (fenêtre Modal) si oui, changez-le à la fenêtre non modale.
2) N'oubliez pas de mettre l'accent à votre fenêtre parent une fois le formulaire de prévisualisation apparaît, de cette façon votre formulaire parent qui a la zone de liste a le focus et il passera les événements de déplacement de la souris sur la zone de liste.
Meilleures salutations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top