Visualização da imagem em uma caixa de listagem
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;
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.