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

Вставка данных из базы данных в ячейки FastReport

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

Вставка данных из базы данных в ячейки FastReport

При работе с отчетами в FastReport может возникнуть потребность вставлять данные из базы данных в ячейки, подобно тому, как это показано на рисунке:

|||||||||||

То есть, чтобы текст "Sami" отображался следующим образом:

Sami в ячейках

Аналогичным образом, можно отобразить и числа. В этом материале мы рассмотрим несколько способов решения этой задачи.

Способ 1: Создание пользовательского контрола

Один из способов решения этой задачи - создать пользовательский контроль для отображения данных в ячейках. Это можно сделать, используя функционал FastReport для создания пользовательских компонентов отчетов. Более подробную информацию можно найти в документации FastReport по адресу https://www.fast-report.com/documentation/DevMan/index.html?custom_report_components_writing.htm.

Способ 2: Создание ячеек динамически

Если создание пользовательского контрола кажется слишком сложным, можно создать ячейки динамически, используя existing controls. Для этого можно взять, например, текстовый объект, изменить его размер, написать в него одиночный символ, центрировать текст, настроить его рамку и исключить флаг ftTop из свойства Frame.Typ. Это должно дать вам одиночную ячейку, которую вы хотите. Затем, создавая такие ячейки во время выполнения и размещая их по горизонтали с помощью сдвига позиции, вы можете отобразить текст или числа в ячейках.

Способ 3: Рисование ячеек на холсте

Если вы хотите нарисовать ячейки самостоятельно, можно использовать TPaintBox для рисования ячеек на холсте. Вот пример кода, который рисует ячейки для текста в TPaintBox:

procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  i, n, x, y: integer;
  siz: TSize;
  pb: TPaintBox;
begin
  n := 10;  // количество ячеек
  pb := Sender as TPaintBox;
  siz := pb.Canvas.TextExtent('Wp');

  // рисование ячеек
  x := 4; y := siz.cy+2;
  for i := 0 to n do
  begin
    pb.Canvas.MoveTo(i * siz.cx + x, 0);
    pb.Canvas.LineTo(i * siz.cx + x, y);
  end;
  pb.Canvas.MoveTo(x, y);
  pb.Canvas.LineTo(n * siz.cx + 4, y);

  // рисование текста в центре ячеек
  for i := 1 to Length(pbText) do
  begin
    x := (4 + (i-1)*siz.cx + (siz.cx - pb.Canvas.TextWidth(pbText[i])) div 2);
    y := 0;
    pb.Canvas.TextOut(x, y, UpperCase(pbText[i])); // принудительное преобразование в верхний регистр
  end;
end;

Способ 4: Использование Text object с подчеркиванием

Еще один простой, хоть и не самый эстетичный способ - использование Text object с подчеркиванием. Для этого нужно:

  1. Вставить Text object в отчет, как показано на рисунке: Text object в отчете
  2. В свойствах Text object установить стиль шрифта на "Подчеркнутый".
  3. В коде Delphi создать функцию для форматирования строки. Например:
function FormatString(const Input: string): string;
begin
  Result := '';
  for var i := 1 to Length(Input) do
    Result := Result + '| ' + Input[i] + ' ';
  Result := Result + '|';
end;
  1. В событии OnGetValue отчета вызвать созданную функцию для форматирования строки:
procedure TForm1.frxReport1GetValue(const VarName: string;
  var Value: Variant);
begin
  if VarName = 'TEST_STR' then Value := FormatString('SAMI');
end;

Результат должен получиться следующим образом:

Результат с Text object и подчеркиванием

Способ 5: Использование MemoView

Самый простой и быстрый способ - использовать TfrxMemoView. Для этого нужно:

  1. Вставить 4 объекта TfrxMemoView в отчет (или столько, сколько нужно).
  2. В коде Delphi в событии OnPreview отчета настроить объекты TfrxMemoView следующим образом:
procedure TForm1.frxReport1Preview(Sender: TObject);
var
  Str : WideString;
  I : Integer;
  Mem : TfrxMemoView;
begin
  Str := 'Sami';   // или получить из запроса/таблицы (базы данных)

  // настройка объектов TFrxMemoView
  for I := 1 to 4 do
  begin
    Mem := frxReport1.FindObject('M'+IntToStr(I)) as TfrxMemoView;
    Mem.Text := Str[I];
  end;
end;

Результат должен получиться следующим образом:

Результат с MemoView

Примечание: В данном примере предполагается, что объекты TfrxMemoView имеют имена "M1", "M2", "M3" и "M4". Если имена другие, нужно соответствующим образом изменить код.

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

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

Материал описывает несколько способов вставки данных из базы данных в ячейки в FastReport.


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

Получайте свежие новости и обновления по 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 13:23:58/0.0060141086578369/1