Pregunta

¿Cómo puedo mostrar una vista previa (casi como una pista) de una imagen cuando pasa el ratón sobre un elemento en un cuadro de lista de nombres de archivos? He tratado de mostrar un formulario y cargar la imagen, pero cuando el formulario de vista previa muestra, pierdo el foco para el cuadro de lista que significa que cuando muevo el ratón, la imagen de vista previa no cambia cuando vaya al siguiente elemento de la lista .

Gracias, Pieter.


He, basado en la respuesta de TOndrej, tratado de implementar un THintWindow costumbre, pero el Canvas.StretchDraw no dibuja el mapa de bits enviado como parámetro. Cualquier idea por qué no? El texto se muestra normalmente.

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;
¿Fue útil?

Solución

A mi me parece que desea una ventana de la pista personalizado. Para ello se debe escribir un nuevo descendiente THintWindow y, o bien de modo global a toda la aplicación mediante la asignación de la nueva clase a la variable global HintWindowClass en la unidad Forms, o escribir su propio descendiente cuadro de lista en la que va a manejar mensaje CM_HINTSHOW y asignar su nuevo clase de ventana de la pista a HintInfo.HintWindowClass. (HintInfo señala a un registro pasa a su control en el mensaje CM_HINTSHOW por el VCL.)

Otros consejos

1) ¿Está Viendo el formulario de vista previa como un cuadro de diálogo (ventana modal) Si sí, entonces el cambio a la ventana no modal.
2) Recuerde que debe establecer el foco de nuevo a su ventana padre una vez que el formulario de vista previa aparece, de esa manera su forma parental que tiene el cuadro de lista tiene el foco y pasará los eventos de movimiento del ratón al cuadro de lista.
Saludos cordiales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top