Bildvorschau in einer Listbox
Frage
Wie kann ich eine Vorschau angezeigt werden (fast wie ein Hauch) ein Bildes, wenn ich die Maus über einen Eintrag in einem Listenfeld von Dateinamen schweben? Ich habe versucht, eine Form zeigt und das Bild geladen, aber wenn die Vorschau Form zeigt, verliere ich Fokus für das Listenfeld, was bedeutet, dass, wenn ich die Maus bewegen, wird das Vorschaubild nicht ändern, wenn ich auf den nächsten Eintrag in der Liste gehen .
Danke, Pieter.
Ich habe auf der Grundlage der Antwort von TOndrej, versucht, eine benutzerdefinierte THintWindow zu implementieren, aber die Canvas.StretchDraw die Bitmap als Parameter gesendet nicht ziehen. Irgendwelche Ideen, warum nicht? Der Text wird normal angezeigt.
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;
Lösung
Für mich scheint es, Sie einen benutzerdefinierten Hinweisfenster wollen. Dazu sollten Sie einen neuen THintWindow
Nachkommen schreiben und entweder legen Sie es global auf die gesamte Anwendung durch die neue Klasse an der HintWindowClass
globalen Variable in Forms
Einheit zuweisen oder eigenen listbox Nachkommen schreiben, in dem Sie CM_HINTSHOW
Nachricht verarbeiten und weisen Sie Ihre neue Hinweisfenster Klasse HintInfo.HintWindowClass
. (HintInfo verweist auf einen Datensatz zu Ihrer Kontrolle in der CM_HINTSHOW
Nachricht von der VCL weitergegeben.)
Andere Tipps
1) anzeigt, die Sie Ihre Vorschau Form wie ein Dialog (Modal-Fenster), wenn ja, dann es nicht modale Fenster ändern.
2) Denken Sie daran, Ihre Mutter Fenster den Fokus zurück zu setzen, sobald die Vorschau Form zeigt sich, dass die Art und Weise Ihre Mutterform, die der Listbox den Fokus hat, und es wird die Mausbewegungsereignisse in das Listenfeld übergeben.
Mit freundlichen Grüßen.