Центрирование шрифтов в VB6

Как определить длину строки текста шрифтом Arial Bold, а затем отцентрировать ее в VB6?

Мы не используем «этикетку» или «картинку» для вывода текста на экран. Мы масштабируем текст на лету и позволяем пользователю масштабировать размер нашего приложения по своему вкусу. Мы пишем текст на экран с помощью кода.


person James Musser    schedule 30.12.2008    source источник
comment
Метки обычно имеют свойство выравнивания. Если вы установите его для выравнивания по центру, то, независимо от начертания шрифта, он должен быть центрирован в метке.   -  person LeppyR64    schedule 30.12.2008
comment
Я предполагаю, что вы пытаетесь использовать оператор печати. Возможно, вам придется изменить вопрос, чтобы прояснить ситуацию.   -  person RS Conley    schedule 30.12.2008
comment
Вы используете для этого метод Print?   -  person RS Conley    schedule 30.12.2008


Ответы (4)


Один из способов состоит в том, чтобы иметь скрытое окно с изображением и настроить спецификации шрифта для этого окна с изображением так, как вы хотите.

Затем используйте методы TextHeight и TextWidth объекта PictureBox, чтобы выполнить измерения. Единицы будут в любом режиме масштабирования, на который установлен Picture Box.

Если вы печатаете непосредственно на принтере или в форме, просто сначала установите шрифт, а затем выполните измерения.

Чтобы центрировать его

MyText = "Hello World"
<displayarea>.FontName = "Arial"
<displayarea>.FontSize = 14
<displayarea>.FontBold = True
TextWidth = <displayarea>.TextWidth(MyText)
TextLeftCoordinate = <displayarea>.ScaleLeft+<displayarea>.ScaleWidth/2-TextWidth/2
<displayarea>.CurrentX = TextLeftCoordinate
<displayarea>.Print MyText

Замените область отображения любым объектом, который вы используете.

На основании вашего обновленного ответа обратите внимание, что предложение скрытого изображения не используется для печати. Это только измерение текста. Однако вы печатаете прямо в форму, поэтому вам просто нужно использовать приведенный выше пример кода.

person RS Conley    schedule 30.12.2008

Я не могу вспомнить подробности (прошло около 3 лет с тех пор, как я в последний раз использовал VB 6), но в Form есть метод, который называется что-то вроде «MeasureString». Он берет строку и измеряет ее в соответствии с настройками шрифта формы.

Кроме того, вот комментарий, опубликованный Jason Lepack на случай, если я неправильно понял и слишком усложнил ваши требования:

«Ярлыки обычно имеют свойство выравнивания. Если вы установите его для выравнивания по центру, то, независимо от начертания шрифта, он должен быть центрирован в метке».

person Neil Barnwell    schedule 30.12.2008
comment
Да, я не был достаточно смелым, чтобы рисковать отрицательными голосами за мой ответ;) - person LeppyR64; 30.12.2008

Существуют функции Win32 GDI, которые вы можете вызывать: см., например, GetTextExtentPoint32 по адресу http://msdn.microsoft.com/en-us/library/ms534223(VS.85).aspx

person ChrisW    schedule 30.12.2008

Лучшим вариантом может быть Form.TextWidth, который возвращает ширину строки в твипах. Я только что применил этот подход для динамического изменения размера кнопки в зависимости от длины метки, которая должна отображаться внутри нее.

Существует также соответствующая функция Form.TextHeight, которая позволит вам делать то же самое в вертикальном измерении.

Убедитесь, что свойство Font формы соответствует свойству Font элемента управления, для которого вы собираетесь измерять текст, иначе вы получите неправильные результаты.

Дополнительные сведения см. на странице http://msdn.microsoft.com/en-us/library/aa267168(VS.60).aspx

person mrgroucho    schedule 13.05.2010