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;
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top