Предварительный просмотр изображения в списке
Вопрос
Как я могу отобразить предварительный просмотр (почти как подсказку) изображения при наведении курсора мыши на элемент в списке имен файлов?Я пробовал показать форму и загрузить изображение, но когда отображается форма предварительного просмотра, я теряю фокус для списка, что означает, что при перемещении мыши изображение предварительного просмотра не меняется при переходе к следующему элементу в списке. .
Спасибо, Питер.
Основываясь на ответе TOndrej, я попытался реализовать собственный THintWindow, но Canvas.StretchDraw не рисует растровое изображение, отправленное в качестве параметра.Есть идеи, почему бы и нет?Текст отображается нормально.
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;
Решение
Мне кажется, вам нужно собственное окно подсказок.Для этого вам следует написать новый THintWindow
потомок и либо установить его глобально для всего приложения, назначив новый класс HintWindowClass
глобальная переменная в Forms
unit или напишите свой собственный потомок списка, в котором вы будете обрабатывать CM_HINTSHOW
сообщение и назначьте новый класс окна подсказки HintInfo.HintWindowClass
.(HintInfo указывает на запись, переданную под ваш контроль в CM_HINTSHOW
сообщение от VCL.)
Другие советы
1) Вы отображаете форму предварительного просмотра в виде диалогового окна (модальное окно), если да, то измените ее на немодальное окно.
2) Не забудьте вернуть фокус на родительское окно, как только появится форма предварительного просмотра, таким образом ваша родительская форма, имеющая список, будет в фокусе и будет передавать события перемещения мыши в список.
С наилучшими пожеланиями.