Кто-нибудь знает, как создать отчет в FastReport, чтобы при изменении страницы ориентации страницы все заголовки столбцов и данные автоматически фиксировали новую ширину страницы? Я не мог найти там якорный механизм. Может быть, я смогу это сделать во время выполнения? Но тогда мне нужно каким-то образом поймать событие изменения ориентации страницы. Может ли кто-нибудь помочь?Изменение ориентации страницы FastReport в Delphi
ответ
Я не знаю, что вопрос: Bands магнитные к границам страницы по умолчанию, поэтому они соответствуют новой ширине страницы.
Но если вы хотите, чтобы объекты frxMemoview перемещались и изменялись в соответствии с новым размером страницы, вы должны использовать событие beforeprint отчета для пересчета и перемещения или изменения компонентов отчета.
Если у вас есть отчет, который может быть напечатан как в портретном, так и в ландшафтном, самым простым способом построить это будет макет для портрета и один для пейзажа. Перед загрузкой отчета вы можете показать printersetupdailog и в зависимости от ориентации загрузить портретную или альбомную макет.
Возможно, это не самый чистый способ. Построение времени выполнения отчета в коде - это еще один вариант, и пересчет каждого компонента в отчете является другим. Но они связаны с большим количеством кодирования, и что, если пользователь выбирает «Letter» вместо «A4»?
С уважением, Teo Торговый автомат FR в Голландии.
Вы можете:
- использовать свойство Align каждого TfrxMemoView ...
- сделать это с Script
Иногда необходимо изменить параметры страницы отчета (например, изменить выравнивание или размер бумаги) из кода. Класс TfrxReportPage содержит следующие свойства, определяющие размер страницы:
property Orientation: TPrinterOrientation default poPortrait;
property PaperWidth: Extended;
property PaperHeight: Extended;
property PaperSize: Integer;
В «PaperSize» задает формат бумаги. Это одно из стандартных значений, определенных в Windows.pas (например, DMPAPER_A4). Если присвоено значение этому свойству, FastReport автоматически заполняет свойства «PaperWidth» и «PaperHeight» (размер бумаги в миллиметрах). Установка значения DMPAPER_USER (или 256) в качестве формата означает, что задан нестандартный формат бумаги. В этом случае свойства «PaperWidth» и «PaperHeight» должны быть заполнены вручную.
В следующем примере показано, как изменить параметры первой страницы (предполагается, что у нас уже есть отчет):
Pascal:
var
Page: TfrxReportPage;
{ the first report’s page has [1] index. [0] is the Data page. }
Page := TfrxReportPage(frxReport1.Pages[1]);
{ modify the size }
Page.PaperSize := DMPAPER_A2;
{ modify the paper orientation }
Page.Orientation := poLandscape;
C++:
TfrxReportPage * Page;
// the first report’s page has [1] index. [0] is the Data page.
Page = (TfrxReportPage *)frxReport1.Pages[1];
// modify the size
Page->PaperSize = DMPAPER_A2;
// modify the paper orientation
Page->Orientation = poLandscape;
На BeginDoc
i вы можете использовать свойства от него, используя (frxPrincipal.FindObject('Page1') as TfrxReportPage).PaperSize := DMPAPER_A4;
I мог бы вычислить его программно, возможно, что-то вроде свойства Page.Width? Я мог бы использовать его для поиска текущего формата страницы. Кстати, как я могу вызвать диалог настройки печати? В Rave он вызывается по умолчанию, но в FR нет такого диалога, верно? Пользователь может изменить ориентацию страницы, когда он уже начал просматривать отчет, но мне нужно как-то поймать событие изменения ориентации страницы. Как я могу это сделать? –