Для определения размера строки можно создать скрытую строку с параметром Prop:Nowidth и померить её размер
Str# = Create(0,Prop:String)
Str#{Prop:Text} = 'Моя строка'
Str#{Prop:Nowidth} = True
0{Prop:Pixels} = 1
TextWidth=Str#{Prop:Width}
0{Prop:Pixels} = False
Destroy(Str#)
Два вопроса по шрифтам
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: Два вопроса по шрифтам
Только SETFONT для созданной строки не забыть выполнитьYufil писал(а):Для определения размера строки можно создать скрытую строку с параметром Prop:Nowidth и померить её размер

В случае шрифта отличного от шрифта окна.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Re: Два вопроса по шрифтам
Спасибо за рекомендации.
Но меня интересует длина выводимой строки на БУМАГЕ в милиметрах, уйду я за пределы поля или нет.
Считаю, что используя метрику конкретного шрифта и реальную линейку, можно точно вычислить длину строки, хотя Microsoft в своих продуктах делает это четко.
Мое субъективное мнение - превьювер Clarion-a просто врёт. Я использую драйвер печати ADOBE.
Всем пока.
Но меня интересует длина выводимой строки на БУМАГЕ в милиметрах, уйду я за пределы поля или нет.
Считаю, что используя метрику конкретного шрифта и реальную линейку, можно точно вычислить длину строки, хотя Microsoft в своих продуктах делает это четко.
Мое субъективное мнение - превьювер Clarion-a просто врёт. Я использую драйвер печати ADOBE.
Всем пока.
Всем пралитарское Спасибо и 'Желаю, чтобы ВСЕ !!!'
Re: Два вопроса по шрифтам
Для того, чтобы определить размер на бумаге, надо считать немного по-другому. Надо сначала перевести размер строки в твипсы (1/20 типографского пункта), а потом в миллиметры. Правила легко найти в Интернете.
Вот процедура, пересчитывающая в твипсы для экрана ( нужно было работать с либой, требующей размеры в твипсах)
Twips PROCEDURE (*Long X,*Long Y) ! Declare Procedure
LngDC HDC
HWND_DESKTOP EQUATE(0)
LOGPIXELSX EQUATE(88)
LOGPIXELSY EQUATE(90)
CODE
! Пересчёт пикселей в твипсы
lngDC = GetDC(HWND_DESKTOP)
X = 1440 / GetDeviceCaps(lngDC, LOGPIXELSX)
Y = 1440 / GetDeviceCaps(lngDC, LOGPIXELSX)
If ReleaseDC(HWND_DESKTOP,lngDC).
Ну и дальше
Twips(PX,Py)
H=OleControl{Prop:Height} * PY
W=OleControl{Prop:Height} * PX
Аналогично, скорее всего, и для принтера, только контекст придётся брать с принтера
Вот процедура, пересчитывающая в твипсы для экрана ( нужно было работать с либой, требующей размеры в твипсах)
Twips PROCEDURE (*Long X,*Long Y) ! Declare Procedure
LngDC HDC
HWND_DESKTOP EQUATE(0)
LOGPIXELSX EQUATE(88)
LOGPIXELSY EQUATE(90)
CODE
! Пересчёт пикселей в твипсы
lngDC = GetDC(HWND_DESKTOP)
X = 1440 / GetDeviceCaps(lngDC, LOGPIXELSX)
Y = 1440 / GetDeviceCaps(lngDC, LOGPIXELSX)
If ReleaseDC(HWND_DESKTOP,lngDC).
Ну и дальше
Twips(PX,Py)
H=OleControl{Prop:Height} * PY
W=OleControl{Prop:Height} * PX
Аналогично, скорее всего, и для принтера, только контекст придётся брать с принтера