Pergunta

Como posso exibir uma visualização (quase como uma dica) de uma imagem quando eu passar o mouse sobre um item em uma caixa de listagem de nomes de arquivos? Eu tentei mostrar um formulário e carregar a imagem, mas quando o formulário mostra visualização, eu perder o foco para a caixa de listagem que significa que quando eu passar o mouse, a imagem de visualização não muda quando eu ir para o próximo item na lista .

Obrigado, Pieter.


Eu tenho, com base na resposta do TOndrej, tentou implementar um THintWindow costume, mas não o Canvas.StretchDraw não desenhar o bitmap enviado como um parâmetro. Todas as ideias por que não? O texto é exibido 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;
Foi útil?

Solução

Para mim, parece que você quer uma janela dica personalizado. Para fazer isso você deve escrever um novo descendente THintWindow e ou conjunto-lo globalmente para todo o aplicativo, atribuindo a sua nova classe para a variável global HintWindowClass na unidade Forms, ou escreve sua própria descendente caixa de listagem em que você vai lidar com mensagem CM_HINTSHOW e atribuir o seu novo dica classe janela para HintInfo.HintWindowClass. (HintInfo aponta para um registro passado para seu controle na mensagem CM_HINTSHOW pela VCL).

Outras dicas

1) Você está exibindo o seu formulário de visualização como uma caixa de diálogo (Modal janela) se sim, então alterá-lo para a janela não modal.
2) Lembre-se para definir o foco de volta para sua janela pai depois que o formulário pré-visualização mostra-se, dessa forma o seu formulário pai que tem a caixa de listagem tem o foco e passará os eventos mova o mouse para a caixa de listagem.
Atenciosamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top