Предварительный просмотр изображения в списке

StackOverflow https://stackoverflow.com/questions/767866

  •  12-09-2019
  •  | 
  •  

Вопрос

Как я могу отобразить предварительный просмотр (почти как подсказку) изображения при наведении курсора мыши на элемент в списке имен файлов?Я пробовал показать форму и загрузить изображение, но когда отображается форма предварительного просмотра, я теряю фокус для списка, что означает, что при перемещении мыши изображение предварительного просмотра не меняется при переходе к следующему элементу в списке. .

Спасибо, Питер.


Основываясь на ответе 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) Не забудьте вернуть фокус на родительское окно, как только появится форма предварительного просмотра, таким образом ваша родительская форма, имеющая список, будет в фокусе и будет передавать события перемещения мыши в список.

С наилучшими пожеланиями.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top