Delphi 6: свойства ширины и высоты TImage сообщают о неправильных значениях? - PullRequest
1 голос
/ 10 октября 2010

У меня довольно странная проблема со свойствами ширины и высоты компонента TImage. В качестве теста я рисую красную точку в (что должно быть) центре компонента TImage, беря среднюю точку ширины и высоты TImage и рисуя точку там, чтобы она была центрирована (centerPoint2D - это TPoint):

// The center point is the center of the display area.
centerPoint2D.X := Trunc(Image1.Width / 2);
centerPoint2D.Y := Trunc(Image1.Height / 2);

Image1.Canvas.Brush.Color := clRed;
Image1.Canvas.Brush.Style := bsSolid;
Image1.Canvas.Ellipse(centerPoint2D.X - 5, centerPoint2D.Y - 5, centerPoint2D.X + 5, centerPoint2D.Y + 5);

Красная точка появляется не в центре изображения, а где-то значительно ниже и справа от него. Кроме того, любой текст, который я печатаю на компоненте, выглядит растянутым. Как будто TImage намного больше, чем сообщаемые размеры, больше, чем то, что видно из видимой области просмотра, как будто то, что видно, обрезается.

Дополнительные детали. Элемент управления TImage находится на TPanel, который находится на TGroupBox, который находится на TFrame. Однако все эти компоненты имеют свойство Align, установленное в alClient. Сам TFrame имеет свойство Align, установленное в alNone. Однако экземпляр этого, который находится в Форме, имеет свойство Align, установленное в alClient во время разработки. Другими словами, это не должен быть случай, когда компонент TImage больше, чем его часть, видимая во время выполнения. Кроме того, представленные размеры, по-видимому, соответствуют размеру компонента в том виде, в каком он отображается на экране, но у меня нет утилиты «Пиксельная линейка», чтобы объективно это подтвердить.

1 Ответ

4 голосов
/ 10 октября 2010

Элемент управления TImage обычно используется для отображения файлов изображений (например, файлов * .bmp). Следовательно, элемент управления может загрузить изображение любого размера и затем отобразить его на холсте элемента управления, используя указанные свойства (Center, Stretch и Proportional). Имея это в виду, неудивительно, что ширина элемента управления TImage в форме отличается от размера, ну, например, холста, холста связанного растрового изображения или любого другого.

Если вы не загружаете изображения, а хотите, чтобы элемент управления с холстом рисовался, вам следует использовать TPaintBox. Или почему бы не рисовать прямо на TForm?

...