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

Решение проблемы с позиционированием объектов memo в FastReport VCL 5 в Delphi 2007

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

Привет! Сегодня мы рассмотрим проблему, с которой сталкиваются многие разработчики, работающие с FastReport VCL 5 в Delphi 2007. Речь идет о позиции и размере объектов memo в отчете. Мы рассмотрим, как решить эту проблему, используя пример кода на Object Pascal (Delphi).

Во-первых, давайте рассмотрим описание проблемы. Разработчик хочет переместить некоторые объекты memo и изменить высоту полосы при генерации отчета. Он добавил следующий код в скрипт:

procedure MasterDataOnBeforePrint(Sender: TfrxComponent);
begin
  if (DRID = <TRAN_DETAIL."REFERENCEID">) then
  begin
    txChargeDate.Top := 0;
    txChargeDesc.Top := 0;
    txChargeQuant.Top := 0;
    txChargeAmt.Top := 0;

    txDRInfo.Visible := false;
    txDRDesc.Visible := false;

    MasterData.Height := 0.25;
  end
  else
  begin
    MasterData.Height := 0.65;

    txChargeDate.Top := 0.4;
    txChargeDesc.Top := 0.4;
    txChargeQuant.Top := 0.4;
    txChargeAmt.Top := 0.4;

    txDRInfo.Visible := true;
    txDRDesc.Visible := true;
  end;
  DRID := <TRAN_DETAIL."REFERENCEID">;
end;

Основная идея состоит в том, чтобы проверить, изменился ли идентификатор ссылки (ReferenceID) текущей строки по сравнению с предыдущей. Если он не изменился, то разработчик не хочет, чтобы txDRInfo и txDRDesc отображались в отчете. Кроме того, он не хочет, чтобы отображалось большое пустое пространство, где они должны были бы отображаться. Поэтому он перемещает объекты и скрывает текст, который не должен отображаться.

Проблема заключается в том, что несмотря на то, что этот код находится в событии BeforePrint, любые изменения, которые он вносит в позицию или размер, влияют на все строки, а не только на ту, которую рассматривает событие.

Так как же решить эту проблему? Разработчик нашел лучший способ сделать это. Он обнаружил, что если сделать дочернюю полосу невидимой, вы все равно можете распечатать любые дочерние элементы, которые у нее есть. Поэтому он удалил все из полосы "Мастер-данные" и переместил их в 2 дочерние полосы:

Полоса Мастера (Высота = 0)
  Дочерняя полоса 1 с вещами для скрытия; PrintChildIfInvisible = true
    Дочерняя полоса 2 с вещами для постоянного отображения

Затем в BeforePrint дочерней полосы 1 он просто проверяет, следует ли сделать ее невидимой или нет.

Таким образом, мы можем решить проблему с позиционированием объектов memo в FastReport VCL 5 в Delphi 2007, используя этот подход. Спасибо за внимание!

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

В данном контексте описывается проблема позиционирования и изменения размера объектов memo в отчете при использовании FastReport VCL 5 в Delphi 2007, а также решение этой проблемы с помощью перемещения объектов в дочерние полосы и управления их видимостью


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

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




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:02:43/0.0054111480712891/1