В TImageViewer, как получить позицию, где пользователь нажимает на картинку? - PullRequest
2 голосов
/ 25 апреля 2020

В элементе управления TImageViewer пользователь может масштабировать или панорамировать изображение.

Мой вопрос: когда пользователь нажимает на изображение, как получить положение щелчка пользователя на изображении? Особенно после того, как пользователь может увеличивать, уменьшать или панорамировать изображение, как получить соответствующую позицию щелчка изображения?

Как показано ниже: enter image description here Как узнать, нажал ли пользователь на батарейке?

Демонстрационный проект: Исходный код демо

1 Ответ

3 голосов
/ 25 апреля 2020

Я не тестировал, но он должен работать:

procedure TfmMain.ivImageViewerMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
var
    DX, DY: Single;
    ImageX, ImageY: Single;
begin
    if ivImageViewer.Bitmap.Width * ScalePicture >= ivImageViewer.Width then
        DX = ivImageViewer.ViewportPosition.X
    else
        DX := (ivImageViewer.Bitmap.Width * ScalePicture - ivImageViewer.Width)/2;
    ImageX := (X + DX) / ScalePicture;

    if ivImageViewer.Bitmap.Height * ScalePicture >= ivImageViewer.Height then
        DY = ivImageViewer.ViewportPosition.Y
    else
        DY := (ivImageViewer.Bitmap.Height * ScalePicture - ivImageViewer.Height)/2;
    ImageY := (Y + DY) / ScalePicture;
end;

ImageX и ImageY - это координаты относительно исходного (немасштабированного) изображения.

...