Aperçu de l'image dans une zone de liste
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;
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.