Гость
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / [FastReport] перенос строк + табуляция / 4 сообщений из 4, страница 1 из 1
22.01.2009, 22:36
    #35772726
A.Z.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[FastReport] перенос строк + табуляция
Приветствую!
Есть проблемка с формированием текстового поля в отчёте.
Хотелось бы получить такую форму отчёта:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Заголовок
Инфо1
     инфо1. 1 
     инфо1. 2 
Инфо2
     инфо2. 2 
     инфо2. 2 

.....
какие-то данные

Данные как и положено формируются на бэнде MasterData. Заголовок и доп.инфо на ReportTitle.
Инфо выводится с помощью Memo (TfrxMemoView), в котором печатается значение переменной. Переменная заполняется из программы, написанной на C++ Builder. А теперь собственно в чём проблема: не могу сформировать строку, чтобы информация вывелась с переносами строк и отступами. Сначала пробовал так: str = "Инфо1\n" + "\tинфо1.1\n" + "\tинфо1.2". FastReport ругается, ему не нравятся символы "\n". Заменил на "& # 13; & # 10". Переносы строк появились. С табуляцией ничего сделать не получилось. Заменил Memo на RichView. Появились и табуляции и переносы строк, но не получается сделать его растягиваемым. Признаки Stretch установлены как для бэнда, так и для RichView.

Подскажите, как можно выйти из данной ситуации?

P.S. FastReport - 4.0.11
C++ Builder - 6.0 update 4
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
12.01.2017, 15:31
    #39383265
[FastReport] перенос строк + табуляция
Нужно иметь исходники и их править.

Текст поля Memo, где должны быть отсупы должен начинать символом табуляции и только сначала строки (можно несколько символов табуляции).

Далее

unit frxGraphicUtils;

Редактируем в нескольких местах

1. Глобальная константа
const
IncTab = 30; // количество пикселей отступа.

Везде где встречается FParagraphGap делаем правки.

2. procedure TfrxDrawText.SetText(Text: TWideStrings; FirstParaBreak: Boolean);

вместо

if not FirstParaBreak then
WrapTextLine(s,
Round(Width * FPPI),
Round((Width - FParagraphGap) * FPPI),
Round(FCharSpacing * FPPI))

пишем

if not FirstParaBreak then
begin
k := FParagraphGap; // обьявить k: extended;
ss := Text[i]; // обьявить ss: string
while Copy(ss, 1, 1) = #9 do
begin
k := k + IncTab;
ss := Copy(ss, 2, Length(s) - 1);
end;
WrapTextLine(s,
Round(Width * FPPI),
Round((Width - k) * FPPI),
Round(FCharSpacing * FPPI));
end

По аналогии

3. procedure TfrxDrawText.DrawText(C: TCanvas; HAlign: TfrxHAlign; VAlign: TfrxVAlign);

вместо

for i := 0 to n - 1 do
begin
gx := 0;
al := HAlign;
par := Integer(FText.Objects[i]);
if (par and 1) <> 0 then
if HAlign in [haLeft, haBlock] then
gx := Round(FParagraphGap * FScaleX);
if (par and 2) <> 0 then
if HAlign = haBlock then
if FRTLReading then
al := haRight else
al := haLeft;

DrawTextLine(C, FText[i], x + gx, y, dx - gx, i, al, fh, oldfh);
Inc(y, Round(Ar[i] * CosA));
Inc(x, Round(Ar[i] * SinA));
end;

пишем

for i := 0 to n - 1 do
begin
gx := 0;
al := HAlign;
par := Integer(FText.Objects[i]);
if (par and 1) <> 0 then
if HAlign in [haLeft, haBlock] then
begin
k := FParagraphGap; // k: extended
ss := FText[i]; // ss: string
while Copy(ss, 1, 1) = #9 do
begin
k := k + IncTab;
ss := copy(ss, 2, Length(ss) - 1);
end;
gx := Round(k * FScaleX);
end;
if (par and 2) <> 0 then
if HAlign = haBlock then
if FRTLReading then
al := haRight else
al := haLeft;

DrawTextLine(C, FText[i], x + gx, y, dx - gx, i, al, fh, oldfh);
Inc(y, Round(Ar[i] * CosA));
Inc(x, Round(Ar[i] * SinA));
end;

4. function TfrxDrawText.CalcWidth: Extended;

вместо

par := Integer(FText.Objects[LineIndex]);
if (par and 1) <> 0 then
Inc(Sz.cx, Round(FParagraphGap * ratio));

пишем

par := Integer(FText.Objects[LineIndex]);
if (par and 1) <> 0 then
begin
k := FParagraphGap; // k: extended
s := FText[LineIndex]; // s: string
while Copy(s, 1, 1) = #9 do
begin
k := k + IncTab;
s := copy(s, 2, Length(s) - 1);
end;
Inc(Sz.cx, Round(k * ratio));
end;
...
Рейтинг: 0 / 0
12.01.2017, 18:33
    #39383482
gpi
gpi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[FastReport] перенос строк + табуляция
Проще написать функцию, которая будет заменять символ табуляции на несколько пробелов
...
Рейтинг: 0 / 0
04.10.2017, 11:01
    #39530626
MrReportWriter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[FastReport] перенос строк + табуляция
Добрый день!
Вот как я решил вопрос с табуляцией - добавил в запрос поле
Код: sql
1.
'       ' TAB

и вставлял его там где мне нужна табуляция в Memo.
Может не очень красиво, зато просто (в отличии от правки исходников).

Надеюсь кому-то поможет!

P.S. Конструктивная критика моего решения приветствуется! Спасибо!
...
Рейтинг: 0 / 0
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / [FastReport] перенос строк + табуляция / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]