28.06.2013, 14:00 | #1 |
Участник
|
Откуда берется Column Height у контролов отчета?
У контролов отчета(и форм) есть свойство высота и одно из возможных значений Column Height.
Неожиданно встал вопрос: как оно вычисляется? В MSDN расплывчато написано "Column Height: The layout of the form determines the height of the control." Я создала примитивный отчет: источник: SalesTable, в дизайне: поле SalesId + Shape:Box. Высота секции Body->Auto, контрола SalesId >Auto, Shape:Box->Height->Column Height. Открываю отчет и вижу, что высота секции приблизит в 2 раза выше высоты SalesId. Почему именно такая? Я правильно понимаю, что каким-то мистическим образом на основании всего layout отчета она вычисляется(судя по msdn). Как сделать так, чтобы высота секции и box выла равна высоте контрола SalesId, а не бралась с потолка? Мне это важно, тк в одном из отчетов есть контрол с DynamicHeight чтобы строки корректно отрисовывались, я ставлю Height=column Height у контролов и Shapes. Все здорово работает, но высота каждой секций почему-то где-то на символ больше, чем макс высота контролов. Ax2009 RU2 Последний раз редактировалось IKA; 28.06.2013 в 14:35. |
|
28.06.2013, 14:47 | #2 |
Участник
|
Странно, у меня в Ax 3.0 это работает нормально. Вы бы лучше отчёт (пример) выложили, чтобы конкретно посмотреть.
|
|
28.06.2013, 19:01 | #3 |
Участник
|
Вот простенький пример, должен легко импортироваться в Ax3 ( с таким же успехом можно выводить SalesLine->Name, ситуации не изменит )
|
|
01.07.2013, 16:22 | #4 |
Участник
|
Странно, аналогичный отчёт в Ax 3.0 работает правильно. Вот он:
|
|
02.07.2013, 12:49 | #5 |
Участник
|
Я сократила строку в вашем проекте до 2 "слов", получила результат тот же, что и в моем примере: высота Box(и секции) раза в 3 выше высоты текстовой строки.
То есть, как и в моем примере выше(см скриншот): когда текст короткий, строки несоразмерно высокие, а когда текст достигает нескольких строк, то Box уже корректно начинает увеличивать высоту, соразмерно тексту внутри). |
|
03.07.2013, 15:38 | #6 |
Участник
|
Цитата:
Сообщение от IKA
Я сократила строку в вашем проекте до 2 "слов", получила результат тот же, что и в моем примере: высота Box(и секции) раза в 3 выше высоты текстовой строки.
То есть, как и в моем примере выше(см скриншот): когда текст короткий, строки несоразмерно высокие, а когда текст достигает нескольких строк, то Box уже корректно начинает увеличивать высоту, соразмерно тексту внутри). |
|
03.07.2013, 17:17 | #7 |
Участник
|
добавьте к себев репорт такой экзекьют. В комментах принцип работы проиллюстрирован. Меряем длину, в зависимости от неё (типа 80 символов длина одной строки. если больше - строки надо две...) ставим высоту. Ну схематично.
X++: public void executeSection() { ReportStringControl remarkControl; int strLenInt = 79; //= strlen(outTxt); int height; ; // if(strLenInt < 80) height = 400; // else if(strLenInt < 160) height = 800; // else if(strLenInt < 240) height = 1200; // else if(strLenInt < 320) height = 1400; // else height = 400; remarkControl = this.controlNo(2); remarkControl.height100mm(height); super(); } |
|
03.07.2013, 19:37 | #8 |
Участник
|
Спасибо, интересно. Я описала постановку задачи и свое решение в параллельной ветке.
Вопрос Height=ColumnHeight как рассчитывается эта высота / от чего зависит(тк она очевидно не зависит от размера контролов внутри - см пример выше) остался открытым Последний раз редактировалось IKA; 03.07.2013 в 19:43. |
|
04.07.2013, 09:18 | #9 |
Участник
|
Упс... не заметил.
|
|
04.07.2013, 11:08 | #10 |
Участник
|
Возможно, Вас заинтересует WinApi функция getSystemMetrics или getTextMetrics.
С уважением, Дмитрий. Последний раз редактировалось DmitryK; 04.07.2013 в 12:12. |
|