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

Проблема с динамическим добавлением TLineView в отчет под Delphi

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

Заголовок:

Введение

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

Описание проблемы

При попытке добавить объекты TLineView в отчет, количество линий зависит от определенного числа, полученного из источника данных отчета. Однако, вместо получения двух линий, расположенных друг возле друга с промежутком между ними, получается всего одна короткая линия длиной около 3-4 мм.

В контексте приведен пример кода, который был размещен в части инициализации скрипта отчета:

var
  nol, i: integer;
  child, newChild: TfrxChild;
  noteLine1, noteLine2: TfrxLineView;
  page: TfrxPage;
begin
  page := ReportName;
  nol := <DS_MAIN."VOLUME"> /2;
  nol := nol + <DS_MAIN."VOLUME"> mod 2;
  child3.child := TfrxChild.create(nil);
  newChild := child3.child;
  newChild.Visible := true;
  noteLine1 := TfrxLineView.create(newChild);
  noteLine1.name := 'nl1000';
  noteLine1.Top := 0.73;
  noteLine1.Width := 7.5;
  noteLine1.Left := 3;
  noteLine1.Visible := true;
  noteLine1.Parent.Objects.Remove(noteLine1);
  noteLine1.Parent.Objects.Add(noteLine1);
  noteLine2 := TfrxLineView.create(newChild);
  noteLine2.name := 'nl1001';
  noteLine2.Top := 0.73;
  noteLine2.Width := 7.5;
  noteLine2.Left := 11.2;
  newChild.Objects.Add(noteLine2);
  noteLine2.Visible := true;

  for i := 1 to nol do begin
    Child := TfrxChild.create(nil);
    NewChild.child := Child;
    newChild := child;
  end;
end.

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

После изучения материала из контекста и альтернативного ответа было выявлено, что для корректного добавления TLineView в отчет необходимо учитывать несколько моментов:

  1. Создаваемые объекты TLineView должны иметь уникальные имена. В примере кода, приведенном в контексте, используется метод CreateUniqueName, но он не может быть использован в скрипте отчета. В качестве альтернативы можно генерировать уникальные имена вручную, как показано в окончательном решении.
  2. Координаты и размеры объектов устанавливаются в пикселях, поэтому необходимо проводить дополнительные вычисления для перевода единиц измерения.

В окончательном решении предложен следующий код:

procedure Child8OnBeforePrint(Sender: TfrxComponent);
var
  nol, i: integer;
  left1, left2: extended;
  child, newChild: TfrxChild;
  noteLine1, noteLine2, line: TfrxLineView;
  page: TfrxPage;
  band: TfrxChild;
begin
  nol := <DS_MAIN."VOLUME"> /2;
  nol := nol + <DS_MAIN."VOLUME"> mod 2;
  band := TfrxChild(TRP_ORDER_NOTE.FindObject('Child9'));
  // Lines generation
  left1 := 3 * fr1cm;
  left2 := 11.2 * fr1cm;
  for i := 1 to nol do begin
    line := TfrxLineView.Create(band);
    line.Name := 'noteLine' + intToStr(1 + 2 * (i - 1 + trunc(random * 1000000))); // Panic solution
    line.Top := fr1cm * (0.73 + (i - 1) * 0.75);
    line.Width := 7.5 * fr1cm;
    line.Left := left1;
    if (<DS_MAIN."VOLUME"> mod 2 > 0) and (i = nol) then
      exit
    else begin
      line := TfrxLineView.Create(band);
      line.Name := 'noteLine' + intToStr(2 * i + trunc(random * 1000000));
      line.Top := fr1cm * (0.73 + (i - 1) * 0.75);
      line.Width := 7.5 * fr1cm;
      line.Left := left2;
    end;
  end;
end;

Вывод

При динамическом добавлении объектов TLineView в отчет под Delphi необходимо учитывать несколько моментов, таких как уникальные имена объектов и дополнительные вычисления для перевода единиц измерения. В данной статье мы рассмотрели проблему, связанную с добавлением TLineView в отчет, и предложили решение, основанное на материале из контекста. Используя предоставленный окончательный код, вы сможете корректно добавлять объекты TLineView в отчет в зависимости от данных, полученных из источника данных отчета.

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

В контексте рассматривается проблема с динамическим добавлением объектов TLineView в отчет под Delphi с помощью библиотеки FastReport, когда вместо двух линий получается всего одна короткая линия.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-15 23:34:09/0.0035049915313721/0