Страница 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 переменную.
Спасибо!