RTFTextControl и Report

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Андрей
Старожил
Сообщения: 263
Зарегистрирован: 30 Октябрь 2005, 3:58

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)

Аватара пользователя
ingasoftplus
Старожил
Сообщения: 271
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)

RTFTextControl и Report

Сообщение ingasoftplus » 08 Март 2015, 0:37

Так вроде... Ставишь обычный ТЕКСТ контрол в репорт, и у него включаешь флаг 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.

Андрей
Старожил
Сообщения: 263
Зарегистрирован: 30 Октябрь 2005, 3:58

RTFTextControl и Report

Сообщение Андрей » 08 Март 2015, 14:17

ingasoftplus писал(а): Ставишь обычный ТЕКСТ контрол в репорт, и у него включаешь флаг RTF
Так это у меня и сделано. Мне нужно в него динамически "подмешивать" доп. текст, индивидуальный для каждого лиц. счета. Для этого вроде как есть метод FindAndReplace,но чтобы им воспользоваться нужен еще доп. контрол RTFTextControl, вот его то и не пойму как добавить в Report.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4144
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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
«V» значит Вендетта !

Андрей
Старожил
Сообщения: 263
Зарегистрирован: 30 Октябрь 2005, 3:58

RTFTextControl и Report

Сообщение Андрей » 08 Март 2015, 19:21

Так разве в случае с RTF такая замена пройдет ? Текст ведь приходится хранить не в STRING, а в MEMO ?

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4144
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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, обрабатывай замены процедурой как она есть и печатай. Все. :)
«V» значит Вендетта !

mike_ch
Бывалый
Сообщения: 62
Зарегистрирован: 11 Июль 2007, 13:21
Откуда: Беларусь, Минск

RTFTextControl и Report

Сообщение mike_ch » 23 Ноябрь 2018, 10:14

А как можно используя RTF в отчете установить на некоторые участки текста жирный шрифт? Пробовал форматировать в соответствии с описанием RTF, что-то типа

Код: Выделить всё

Info = '{{\rtf1\ansi\deff0' & |
            '{{\colortbl\red0\green0\blue0;\red48\green146\blue242;}' & |
            ' Какой-то текст {{\cf1 \b Внимание}. Какой-то текст.}'
В RTF на окне это работает, в RTF на отчете почему-то нет.

kreator
✯ Ветеран ✯
Сообщения: 3356
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

RTFTextControl и Report

Сообщение kreator » 23 Ноябрь 2018, 11:27

Не работает только жирный шрифт? Или любое форматирование не работает?
Вот работающий у меня в отчёте кусок:

Код: Выделить всё

    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-строка.
We are hard at work… for you. :)

kreator
✯ Ветеран ✯
Сообщения: 3356
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

RTFTextControl и Report

Сообщение kreator » 23 Ноябрь 2018, 11:35

Тэг "\b" должен быть два раза в строке, начало жирности и её конец. Вроде как.
We are hard at work… for you. :)

mike_ch
Бывалый
Сообщения: 62
Зарегистрирован: 11 Июль 2007, 13:21
Откуда: Беларусь, Минск

RTFTextControl и Report

Сообщение mike_ch » 23 Ноябрь 2018, 12:17

Не работает. В отчет идет все содержимое. Не пойму почему так.
Вложения
Снимок.PNG
Снимок.PNG (7.95 КБ) 301 просмотр

mike_ch
Бывалый
Сообщения: 62
Зарегистрирован: 11 Июль 2007, 13:21
Откуда: Беларусь, Минск

RTFTextControl и Report

Сообщение mike_ch » 23 Ноябрь 2018, 12:29

А прошу прощения, работает! :)
До этого текст отправлял на RTF через prop:text. Так нельзя. Надо через use переменную.
Спасибо!

Ответить