Если создание пользовательского контрола кажется слишком сложным, можно создать ячейки динамически, используя 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 с подчеркиванием. Для этого нужно:
Вставить Text object в отчет, как показано на рисунке:
В свойствах Text object установить стиль шрифта на "Подчеркнутый".
В коде Delphi создать функцию для форматирования строки. Например:
function FormatString(const Input: string): string;
begin
Result := '';
for var i := 1 to Length(Input) do
Result := Result + '| ' + Input[i] + ' ';
Result := Result + '|';
end;
В событии OnGetValue отчета вызвать созданную функцию для форматирования строки:
procedure TForm1.frxReport1GetValue(const VarName: string;
var Value: Variant);
begin
if VarName = 'TEST_STR' then Value := FormatString('SAMI');
end;
Результат должен получиться следующим образом:
Способ 5: Использование MemoView
Самый простой и быстрый способ - использовать TfrxMemoView. Для этого нужно:
Вставить 4 объекта TfrxMemoView в отчет (или столько, сколько нужно).
В коде 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;
Результат должен получиться следующим образом:
Примечание: В данном примере предполагается, что объекты TfrxMemoView имеют имена "M1", "M2", "M3" и "M4". Если имена другие, нужно соответствующим образом изменить код.
Вы можете выбрать любой из этих способов в зависимости от своих потребностей и предпочтений. Каждый из них имеет свои преимущества и недостатки, но все они решают задачу вставки данных из базы данных в ячейки в FastReport.
Материал описывает несколько способов вставки данных из базы данных в ячейки в FastReport.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS