Avb начална страница
Как да изчислим височината на реда на таблица.
Клетките на таблицата в 1C имат контролно свойство, където можете да изберете "Wrap" и след това текстът, който не се побира по ширина, автоматично ще се увие към следващите редове в клетката. Ако зададете височината на реда на "Автоматично", височината на реда ще се промени автоматично в зависимост от височината на въведения текст. Тези. редовете в отчета ще се окажат самообгръщащи се и саморазширяващи се.
Всичко е наред, но както знаете, методът LineHeight () връща 0, ако височината на линията е зададена на "Auto". Тези. Не можете програмно да получите височината на такъв ред, следователно не можете да получите височината на цялата таблица в точки. И това понякога е необходимо, например за вмъкване на тирета на следващата страница, навременно вмъкване на долни колонтитули на страницата и т.н.
Идеята за изчисляване на височината на ред в таблицата се основава на факта, че като имате възможност да откриете дължината на ред в точки от ширината на колоната, можете доста точно да изчислите колко пъти той ще бъде увит . Някои хора използват монопространствен шрифт за това, но не винаги е красив. За да можете да направите това за непространствен шрифт, първо трябва да компилирате масив от ширината на символите на този шрифт. Направих го така:
Tab = CreateObject ("Таблица");
За X = 1 до 255 цикъл
Tab.Area (X, 1) .Text = StrReplace (Format (", "C500"), ", Char (X))
Край на цикъла;
Tab. Area (1, 1, 255, 1). Control (4);
Tab.Area (1, 1). Ширина на колоната (100);
Tab.Show ();
След това ръчно съкратих текста на всички 255 реда до дължина, която би паснала на един ред. Запазена таблица във файл.
Tab = CreateObject ("Таблица");
Tab.Open ("MyTable.mxl");
Cn = CreateObject ("Списък на стойностите");
За X = 1 до 255 цикъл
H = StrLength (Tab.Area (X, 1) .Text);
Cn.AddValue (? (H = 0, 0, Okr (100/(H + 0.5), 3)));