Два вопроса по шрифтам

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Два вопроса по шрифтам

Сообщение Yufil »

Для определения размера строки можно создать скрытую строку с параметром 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#)
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Два вопроса по шрифтам

Сообщение Admin »

Yufil писал(а):Для определения размера строки можно создать скрытую строку с параметром Prop:Nowidth и померить её размер
Только SETFONT для созданной строки не забыть выполнить :)
В случае шрифта отличного от шрифта окна.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
muskin
Активист
Сообщения: 114
Зарегистрирован: 08 Декабрь 2009, 21:16
Откуда: РК

Re: Два вопроса по шрифтам

Сообщение muskin »

Спасибо за рекомендации.
Но меня интересует длина выводимой строки на БУМАГЕ в милиметрах, уйду я за пределы поля или нет.
Считаю, что используя метрику конкретного шрифта и реальную линейку, можно точно вычислить длину строки, хотя Microsoft в своих продуктах делает это четко.
Мое субъективное мнение - превьювер Clarion-a просто врёт. Я использую драйвер печати ADOBE.
Всем пока.
Всем пралитарское Спасибо и 'Желаю, чтобы ВСЕ !!!'
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Два вопроса по шрифтам

Сообщение Yufil »

Для того, чтобы определить размер на бумаге, надо считать немного по-другому. Надо сначала перевести размер строки в твипсы (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

Аналогично, скорее всего, и для принтера, только контекст придётся брать с принтера
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Два вопроса по шрифтам

Сообщение Yufil »

И ещё. Контрол можно создать не только на экране, но и в отчёте.
Ответить