Страница 2 из 2

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

Добавлено: 26 Май 2010, 10:51
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#)

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

Добавлено: 26 Май 2010, 16:29
Admin
Yufil писал(а):Для определения размера строки можно создать скрытую строку с параметром Prop:Nowidth и померить её размер
Только SETFONT для созданной строки не забыть выполнить :)
В случае шрифта отличного от шрифта окна.

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

Добавлено: 26 Май 2010, 22:38
muskin
Спасибо за рекомендации.
Но меня интересует длина выводимой строки на БУМАГЕ в милиметрах, уйду я за пределы поля или нет.
Считаю, что используя метрику конкретного шрифта и реальную линейку, можно точно вычислить длину строки, хотя Microsoft в своих продуктах делает это четко.
Мое субъективное мнение - превьювер Clarion-a просто врёт. Я использую драйвер печати ADOBE.
Всем пока.

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

Добавлено: 27 Май 2010, 12:24
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

Аналогично, скорее всего, и для принтера, только контекст придётся брать с принтера

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

Добавлено: 27 Май 2010, 12:26
Yufil
И ещё. Контрол можно создать не только на экране, но и в отчёте.