Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблема с свойством PaperSize в FastReport и Delphi: почему не меняется ширина и высота отчета при смене размера бумаги?

Delphi , Базы данных , Отчеты

При работе с Delphi и FastReport для печати этикеток может возникнуть необходимость менять ширину и высоту страницы отчета в зависимости от типа принтера, используемого клиентом. Однако, пользователи могут столкнуться с проблемой, когда свойство PaperSize не влияет на фактические размеры страницы отчета.

Один из пользователей столкнулся с подобной проблемой и поделился своим опытом на форуме FastReport:

Я работаю с Delphi и FastReport над приложением для печати этикеток. Мне нужно менять ширину и высоту страницы отчета в зависимости от типа принтера, который использует клиент. Я пытаюсь изменить свойство PaperSize на странице отчета, но оно не влияет на фактические размеры страницы. Согласно документации, это должно изменить высоту и ширину страницы автоматически, но этого не происходит.

Код, который пользователь использовал для изменения размера бумаги, выглядит следующим образом:

Page:= reportePrueba.FindObject('Page1') as TfrxReportPage;
Page.PaperSize:= frxPrinters.Printer.PaperNameToNumber(ComboPapel.Items[ComboPapel.ItemIndex]);

Здесь Page - это TfrxReportPage, а размер бумаги выбирается из комбо-бокса и преобразуется из строки в число, например, "29mm x 90mm" в 271.

Хотя свойство PaperSize меняется на странице отчета, это не приводит к изменению фактической ширины и высоты страницы.

Подтвержденный ответ:

Проблема может быть связана с тем, что FastReport не обновляет размеры страницы отчета автоматически после изменения свойства PaperSize. Чтобы решить эту проблему, пользователь может вручную установить ширину и высоту страницы отчета после изменения свойства PaperSize.

Ниже приведен пример кода, который решает эту проблему:

Page:= reportePrueba.FindObject('Page1') as TfrxReportPage;
Page.PaperSize:= frxPrinters.Printer.PaperNameToNumber(ComboPapel.Items[ComboPapel.ItemIndex]);

// Получаем текущий размер бумаги после изменения PaperSize
var
  PaperSizeInfo: TfrxPaperSizeInfo;
  PaperWidth, PaperHeight: Integer;
begin
  PaperSizeInfo := frxPrinters.Printer.PaperSizeInfo(Page.PaperSize);
  PaperWidth := PaperSizeInfo.Width;
  PaperHeight := PaperSizeInfo.Height;

  // Устанавливаем ширину и высоту страницы отчета вручную
  Page.Width := PaperWidth;
  Page.Height := PaperHeight;
end;

В этом примере мы сначала меняем свойство PaperSize, а затем получаем текущий размер бумаги с помощью метода PaperSizeInfo. После этого мы устанавливаем ширину и высоту страницы отчета вручную, используя полученные значения.

Альтернативный ответ:

Если ручное установление ширины и высоты страницы отчета не решает проблему, пользователь может попробовать пересоздать страницу отчета после изменения свойства PaperSize. Для этого можно использовать следующий код:

Page:= reportePrueba.FindObject('Page1') as TfrxReportPage;
Page.PaperSize:= frxPrinters.Printer.PaperNameToNumber(ComboPapel.Items[ComboPapel.ItemIndex]);

// Создаем новую страницу отчета с текущим размером бумаги
var
  NewPage: TfrxReportPage;
begin
  NewPage := TfrxReportPage.Create(nil);
  NewPage.Name := Page.Name;
  NewPage.PaperSize := Page.PaperSize;
  NewPage.Width := Page.Width;
  NewPage.Height := Page.Height;

  // Копируем все объекты со старой страницы на новую
  for var i := 0 to Page.ComponentCount - 1 do
    NewPage.Components.Add(Page.Components[i].Clone);

  // Заменяем старую страницу на новую
  reportePrueba.Components[i].Assign(NewPage);
  NewPage.Free;
end;

В этом примере мы создаем новую страницу отчета с текущим размером бумаги, копируем все объекты со старой страницы на новую и заменяем старую страницу на новую. Это должно привести к обновлению размеров страницы отчета после изменения свойства PaperSize.

Создано по материалам из источника по ссылке.

'Пользователь столкнулся с проблемой при работе с Delphi и FastReport, когда свойство PaperSize не влияло на фактические размеры страницы отчета при смене размера бумаги.'


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Отчеты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 11:22:13/0.0053548812866211/1