|
[FastReport] перенос строк + табуляция
|
|||
---|---|---|---|
#18+
Приветствую! Есть проблемка с формированием текстового поля в отчёте. Хотелось бы получить такую форму отчёта: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Данные как и положено формируются на бэнде 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2009, 22:36 |
|
[FastReport] перенос строк + табуляция
|
|||
---|---|---|---|
#18+
Нужно иметь исходники и их править. Текст поля 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; ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 15:31 |
|
[FastReport] перенос строк + табуляция
|
|||
---|---|---|---|
#18+
Проще написать функцию, которая будет заменять символ табуляции на несколько пробелов ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 18:33 |
|
[FastReport] перенос строк + табуляция
|
|||
---|---|---|---|
#18+
Добрый день! Вот как я решил вопрос с табуляцией - добавил в запрос поле Код: sql 1.
и вставлял его там где мне нужна табуляция в Memo. Может не очень красиво, зато просто (в отличии от правки исходников). Надеюсь кому-то поможет! P.S. Конструктивная критика моего решения приветствуется! Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 11:01 |
|
|
start [/forum/topic.php?fid=31&tid=1533044]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 258ms |
total: | 396ms |
0 / 0 |