2016-07-26 4 views
0

Я использую Delphi 2010 с ReportBuilder 10.04 и имею очень простой отчет с 1 лентой деталей, содержащей 2 компонента TppDBText (один с жирным шрифтом, а другой - нежирный). Оба печатают в отчете по указанным позициям, определенным во время разработки, как и ожидалось. То, что мне нужно сделать, - это переместить элемент управления вправо как можно ближе к концу текста другого элемента управления (который содержит различные длины текста). Любые идеи о том, как достичь этого?Элементы управления позиционированием отчетов в Runtime

+0

Вы пробовали настройки 'AfterPrint' событие компонента слева? Возможно, его ширина будет установлена ​​соответственно тексту, который он получил, а затем вы можете правильно позиционировать компонент справа. – rgoliveira

+0

Да, я пробовал, но это не сработало. Для первого элемента управления все ширины были установлены одинаковыми. – PDM

+0

Да, вот что я подумал. Я пробовал это несколько раз, но так и не понял. Для вертикального позиционирования есть «ShiftRelativeTo», но ничего похожего на горизонтальное позиционирование. Возможно, используйте элемент управления Rich Text и отформатируйте его после установки текста? – rgoliveira

ответ

0

Во-первых, чтобы этот пример работал, установите для свойства «Единицы» TppReport значение «utScreenUnits».

В качестве примера я использую поля City и State, а мой набор данных называется tblCustomers.

В собственности BeforePrint в DetailBand добавим следующий код:

// ppCity is a tppDBText report control 
// ppState is a tppDBText report control 

ppCity.Width := length(tblCustomersCity.asstring) * 10; //adjust 10 based on font size 
ppState.left := ppCity.Left + ppCity.Width + 10; // adjust 10 based on font size 

Вы также можете сделать это с помощью вычисляемых полей, но поскольку ваш первый контроль полужирный и ваш второй элемент управления не жирный, выше должно хватить.

Чтобы использовать вычисляемое поле, просто объединить город и государство в одно вычисляемое поле под названием «CityState», и в OnCalcs набора данных необходимо выполнить следующие действия:

tblCustomerCityState.asstring := tblCustomersCity.asstring +' '+tblCustomersState.asstring; 
+0

Просто обратите внимание, что это приближение, поэтому используйте достаточно большой множитель (* в этом примере это 10 *). Это лучше всего сочетается с моноширинными шрифтами. – rgoliveira