Есть отчет, содержащий в детали текстовые поля. Колонки отчета
разделяются линиями и отчеркиваются. По подсказке Андрея Мялина
высота разделителя определяется максимальной высотой текстового
поля. Так вот, если текстовое поле содержит символы <13,10>
(ну необходимо мне, чтобы каждый документ-основание печатался с
новой строки), то высота детали почему-то увеличивается, причем
зависит от количества эти самых переносов строк, тогда как высота
разделителя вычисляется верно.
Алгоритм посчета положения разделителей прост:
Код: Выделить всё
SetSeparatorHeight ROUTINE
DATA
nLoopIndex SIGNED,AUTO
nMaxDetailHeight SIGNED(0)
nDetailHeight SIGNED,AUTO
CODE
SETTARGET(Report)
LOOP nLoopIndex = FIRSTFIELD() TO LASTFIELD()
IF nLoopIndex{PROP:Type} = CREATE:Text AND nLoopIndex{PROP:Parent} = ?Detail
nDetailHeight = 2 * nLoopIndex{PROP:YPos} + nLoopIndex{PROP:LineCount} * nLoopIndex{PROP:LineHeight}
IF nDetailHeight > nMaxDetailHeight
nMaxDetailHeight = nDetailHeight
END
END
END
LOOP nLoopIndex = FIRSTFIELD() TO LASTFIELD()
IF nLoopIndex{PROP:Type} = CREATE:Line AND nLoopIndex{PROP:Width} = 0 AND nLoopIndex{PROP:Parent} = ?Detail
nLoopIndex{PROP:Height} = nMaxDetailHeight
END
END
?Underline{PROP:YPos} = nMaxDetailHeight
SETTARGET
Код: Выделить всё
---------------------------------------
! Code ! Name ! Documents !
---------------------------------------
! 1 ! COM !Документ в одну строку !
!--------------------------------------
! 2 ! ORG !Документ в две строки !
! ! !без явного переноса !
!--------------------------------------
! 3 ! NET !Документ 1 в две !
! ! !строки !
! ! !Документ 2 в две !
! ! !строки !
<- пустое место?!
---------------------------------------
! 4 ! GOV ! !
---------------------------------------
P.S. Кстати, еще один глюк текстового поля в репорте. Если значение
STRING-переменной, которое отображается в ТЕКСТ-контроле по размеру
(LEN) совпадает с размером этой переменной, то происходит переход на
новую строку и в этой строке печается непечатный символ
(или <10>, или <13>).
Пример:
LOC:stMonthName STRING(8)
LOC:stMonthName = 'february' ! 8 chars
Выглядит как
! february !
! 0 ! <- только не ноль, а прямоугольник...
Алексей,
начальник отдела ПТО
ООО "ОРК"
mail: alex@jrcn.donetsk.ua, icq: 62605472
www: http://atinet.hypermart.net
http://www.nikasoft.co.uk
http://www.clarionline.h1.ru (FAQ-онлайн)
irc: irc.lucky.net:6669, channel #clarion, Bambino
origin: Взял от жизни все, что и было установлено в ходе обыска.
(Добавление)
Я сталкивался, победил путём присваивания найденной высоты линий высоте
этого текстового конотрола, то есть в конце надо так:
Код: Выделить всё
LOOP nLoopIndex = FIRSTFIELD() TO LASTFIELD()
IF nLoopIndex{PROP:Type} = CREATE:Text AND nLoopIndex{PROP:Parent} = ?Detail
nLoopIndex{PROP:Height} = nMaxDetailHeight
END
END
В принципе, если отчёт содержит вертикальную линию на весь размер страницы, обычно можно её отчертить в разделе Form..
---------------------------------------
C уважением,
Юрий Философов,
Главный программист
Корпорация "Диполь", Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ# 75924439
Написал: ClaList(2)