Предварительный просмотр изображения в списке - PullRequest
1 голос
/ 20 апреля 2009

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

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


Я, основываясь на ответе 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;

Ответы [ 2 ]

2 голосов
/ 20 апреля 2009

Мне кажется, вы хотите, чтобы пользовательское окно подсказки. Для этого вы должны написать нового потомка THintWindow и либо установить его глобально для всего приложения, назначив свой новый класс глобальной переменной HintWindowClass в единице Forms, либо написать свой собственный потомок списка, с которым вы будете работать CM_HINTSHOW и присвойте свой новый класс окна подсказок HintInfo.HintWindowClass. (HintInfo указывает на запись, переданную вашему контролю в сообщении CM_HINTSHOW VCL.)

1 голос
/ 20 апреля 2009

1) Отображаете ли вы форму предварительного просмотра в виде диалога (модальное окно), если да, то измените его на немодальное окно.
2) Не забудьте установить фокус обратно на родительское окно, как только появится форма предварительного просмотра. Таким образом, ваша родительская форма со списком будет иметь фокус, и она будет передавать события перемещения мыши в список.

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

...