Страница 1 из 1
RTFTextControl и Report
Добавлено: 08 Март 2015, 0:09
Андрей
Что то не могу разобраться... вот надо в расчетных листках выводить некий общий текст (он хранится в файле Мемо в поле Техt тип MEMO) и в отчет выводится через контрол "TEXT,AT(0,177,7750,417),USE(Mem:Text),RTF(TEXT:Field)" и некий индивидуальный текст для каждого лиц. счета. Понятно, что простой очевидный вариант - добавить еще один детайл который выводить, если индивид. текст не пустой. Но, наверно культурнее бы это сделать через RTFTextControl и в дальнейшем использовать метод FindAndReplace.
Однако... а как RTFTextControl добавить в REPORT ? В Window и Browse, например вижу его в списке контролей, а в Report-е нет ! Как же им воспользоваться в отчете ?
(CW 9.1)
RTFTextControl и Report
Добавлено: 08 Март 2015, 0:37
ingasoftplus
Так вроде... Ставишь обычный ТЕКСТ контрол в репорт, и у него включаешь флаг RTF
Printing Multi-line Text with Word-wrap
A multi-line text control can print a long string (such as a MEMO), automatically word-wrapping and printing as many lines as the MEMO’s contents requires.
Select the TEXT tool from the Controls Toolbox, and DRAG and DROP to the band where you want to place the control.
The center of the crosshair positions the upper left corner of the control.
The Report Designer places a TEXT control in the report structure. Resize the text box by using the mouse to drag its handles.
CLICK the text control and choose Properties from the popup menu to open the Properties Pad for the Text coontrol.
Enter the name of the variable in the Use property.
Set the Resize property to TRUE.
You can optionally display Rich Text Format content by setting the RTF property to TRUE (UseRichTextFormat).
At run-time, the text expands downward, expanding the detail if necessary, to contain the entire text of the memo! If necessary, the text flows onto the following page. The RESIZE attribute only adjusts the height of the TEXT and the DETAIL.
RTFTextControl и Report
Добавлено: 08 Март 2015, 14:17
Андрей
ingasoftplus писал(а): Ставишь обычный ТЕКСТ контрол в репорт, и у него включаешь флаг RTF
Так это у меня и сделано. Мне нужно в него динамически "подмешивать" доп. текст, индивидуальный для каждого лиц. счета. Для этого вроде как есть метод FindAndReplace,но чтобы им воспользоваться нужен еще доп. контрол RTFTextControl, вот его то и не пойму как добавить в Report.
RTFTextControl и Report
Добавлено: 08 Март 2015, 17:11
Игорь Столяров
Я извиняюсь, что может быть не в тему: а не проще сначала "подмешивать" текст, а потом выводить
строку любым контролом без заморочек с RTF и т.д. Вот пример самой простой процедуры замены текста:
Код: Выделить всё
Map
ReplaceText(*String,String,String)
end
! --- Возов
MyString = "Текст произвольной длины, который написал Вася, когда хотел писать"
ReplaceText(MyString,'Вася','Редиска')
Message(MyString)
ReplaceText PROCEDURE (Stroka_,Template_,Field_)
Loc:LastIndex LONG
Loc:FindIndex LONG
CODE
Loc:LastIndex = 1
Loop
Loc:FindIndex = InString(Clip(Template_),Clip(Stroka_),1,Loc:LastIndex)
If Loc:FindIndex and ((Loc:FindIndex + Len(Clip(Template_))) < Size(Stroka_))
Stroka_ = Stroka_[1:(Loc:FindIndex - 1)] & Clip(Field_) & |
Stroka_[(Loc:FindIndex + Len(Clip(Template_))):(Size(Stroka_))]
Loc:LastIndex = Loc:FindIndex + Len(Clip(Field_))
else
Break
end
end
RTFTextControl и Report
Добавлено: 08 Март 2015, 19:21
Андрей
Так разве в случае с RTF такая замена пройдет ? Текст ведь приходится хранить не в STRING, а в MEMO ?
RTFTextControl и Report
Добавлено: 08 Март 2015, 20:02
Игорь Столяров
Какая разница ? RTF - это обычный текст (открой в блокноте любой RTF файл).
Можно либо MEMO переписать в строку для обработки и последующей печати,
либо заменить первый параметр на *? и передавать туда MEMO поле напрямую.
Я привел этот код как пример. В общем случае, при работе с большими строками
непредсказуемой длины (каковыми и являются файлы и тексты RTF) лучше перейти
на работу с указателями и динамическим наращиванием длины строки результата.
(я это показывал в примере:
http://forum.clarionlife.net/phpbb/view ... f=1&t=3342)
С другой стороны - если тексты ты собираешься печатать в обычном REPORT, значит
больше листа A4 с текстом у тебя быть не может. Объявляй строку на 64K - загоняй
в нее текст из MEMO, обрабатывай замены процедурой как она есть и печатай. Все.
RTFTextControl и Report
Добавлено: 23 Ноябрь 2018, 10:14
mike_ch
А как можно используя RTF в отчете установить на некоторые участки текста жирный шрифт? Пробовал форматировать в соответствии с описанием RTF, что-то типа
Код: Выделить всё
Info = '{{\rtf1\ansi\deff0' & |
'{{\colortbl\red0\green0\blue0;\red48\green146\blue242;}' & |
' Какой-то текст {{\cf1 \b Внимание}. Какой-то текст.}'
В RTF на окне это работает, в RTF на отчете почему-то нет.
RTFTextControl и Report
Добавлено: 23 Ноябрь 2018, 11:27
kreator
Не работает только жирный шрифт? Или любое форматирование не работает?
Вот работающий у меня в отчёте кусок:
Код: Выделить всё
LOC:ISP = '{{\rtf1\ansi\ansicpg1251\deff0\deflang1049{{\fonttbl{{\f0\fnil\fcharset204 Times New Roman;}{{\f1\fnil\fcharset0 Times New Roman;}}{{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sl240\slmult1\ul\i\f0\fs16\Закреплены за ПУ:\ulnone\i0\par\par' & clip(ZZZ.A1) & '\par\par' & |
'\lang1049\ul\i\f0\fs16\С других ПУ:\ulnone\i0\par\par' & clip(ZZZ.A2) & '}'
По-моему, здесь шрифт наклонный, не жирный. Если надо посмотрю.
И, сдаётся мне, если подцепить на экране RTF-шаблон, то можно увидеть как должен выглядеть RTF-строка.
RTFTextControl и Report
Добавлено: 23 Ноябрь 2018, 11:35
kreator
Тэг "\b" должен быть два раза в строке, начало жирности и её конец. Вроде как.
RTFTextControl и Report
Добавлено: 23 Ноябрь 2018, 12:17
mike_ch
Не работает. В отчет идет все содержимое. Не пойму почему так.
RTFTextControl и Report
Добавлено: 23 Ноябрь 2018, 12:29
mike_ch
А прошу прощения, работает!
До этого текст отправлял на RTF через prop:text. Так нельзя. Надо через use переменную.
Спасибо!