Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
в архиве пример и библиотека.exe - вот его сначало запусти, как тока извлечется, открывай и смотри пример, может и тебе идея придет. Там все просто, главное вникнуть в rtf-каракули библиотеку функ, надеюсь знаешь, как посмотреть
Добавлено (31 Июль 2009, 07:07) --------------------------------------------- P.S. сама функ наз-ся "TXT_to_RTF"
Спасибо за идею!! Поработаю над ней! Уже в первом приближении получилось лучше, чем у меня было - по крайней мере исчезли "|", правда добавились дополнительные строки (раза в два больше...). Какие-то скрытые строки NB делает в rtf-файле объекта Статья... Иначе откуда им взяться при построчном копировании/переносе в новый файл? Наверное придется добавить команду удаления строки, после команды копирования. Только я беру за исходный файл не txt а сразу rtf, который делает NB для объекта Статья.
Только я не умею редактировать приведенные параметры:
Но самая важная проблема пока остается нерешенной: в файл копируются имена переменных, а не их значения... Как-то их специально записывать надо видимо. Но вот отображаются же они в самом приложении! Идут же на принтер! Видимо там другие команды используются...
Я, от части, разобрался и хочу поделиться простым решением – как создавать красивые RTF-документы из проектов NB, может кому пригодится ( по крайней мере для форумчан-новичков это может быть очень полезно). Для рядового пользователя нет разницы – RTF или DOC… Файл RTF имеет такой же значок в списке файлов в папке компьютера, и при открытии в MS Word ничем не отличается от док-файла, а при желании без проблем сохраняется как *.doc. А это очень важно для целей создания прикладных программ.
Особенно радует, то, что NB дружит с RTF (есть замечательный внутренний редактор в котором создаются и открываются RTF к объекту Статья), а сам RTF – это текстовый формат (!), язык которого читаем человеком (!) и на нем можно описать всё что душе угодно – это открывает поистине бескрайние просторы для создания любых документов из проектов NB (ведь в NB масса возможностей для работы с файлами, строками и символами). Да хоть даже с картинками (они в RTF, как и таблицы, и сноски и пр. описываются тоже тектом, специальными тегами)
Code
Небольшая справка: "По определению Формат Rich Text это "богатый текст" - в смысле, текст с украшениями в виде форматирования, по логике подобен HTML. RTF - хоть и не самый новый, но, тем не менее, мощный и достаточно гибкий формат для документов, переносимых на различные платформы. Данный формат был определен фирмой Microsoft как стандартный формат для обмена текстовыми документами. Начиная с версии 2.0, RTF введен в Windows в качестве Clipboard-формата, благодаря чему возможен обмен данными между различными прикладными программами Windows. Кроме того, RT-формат поддерживается программами WORD для Macintosh, начиная с версии 3.X, и WORD для PC, начиная с версии 4. X."
Исходная задача у меня была такой: сохранить из проекта NB данные (сформировать отчет) с заданным форматированием, чтобы не просто текст был, да еще и без кодировки, а полноценный, красивый и готовый к печати документ.
Некоторые проблемы с которыми я столкнулся используя просто команду FileWrite: - пользователю приходится выбирать кодировку (при открытии документа в Ворде появляется окошко выбора кодировки, которое введет в ступор большинство рядовых пользователей); - на экране просто безликий текст… (максимум, что мы можем сделать, это играть индексом и пустыми строками…) - если пытаться сохранять данные в документ, копируя под новым именем файл объекта Статья, то форматирование копируется, а вот вместо текста получаем имена переменных в квадратных скобках… Если обойти эту проблему копируя содержимое файла (объекта Статьи) в переменную, а уже потом содержимое переменной записав в файл отчета, то получаем массу вертикальных слешей "|" на месте окончания строки, что конечно же портит всю красоту – не дело, когда вместо знака конца абзаца стоит слеш… Решение получилось простым и его применение даже не требует знания языка RTF (хотя, последнее, очень бы помогло, конечно...).
Добавлено (22 Август 2009, 03:43) --------------------------------------------- Вот технология из 4-х шагов:
1) Создаем объект Статья и в RTF (который создается для этого объекта) строим документ с нужным дизайном (цвет, вид и размер шрифтов, заливка, табуляция, параметры страницы, выравнивание и т.д.).
2) Размещаем в этом документе в нужных местах переменные (которые будут впоследствии нести нужную смысловую нагрузку, например, ответы пользователя на вопросы, переменные полей ввода, переменные для вывода результатов и т.д.). Текст в этих переменных в будущем примет форматирование соответствующей строки. Необязательный совет: Если то, что Вы видите Вам нравится, то сделайте теперь всё тоже самое, но без лишних движений и заново, в другом файле RTF, для того, чтобы в итоге меньше лишнего писалось в данном файле на языке RTF.
3) Нажимаем ОК, т.е. сохраняем RTF, закрывая окно редактора объекта Статья. 4) Открываем получившийся RTF через блокнот (не через редактор NB) и видим то, что мы создали, но уже на языке RTF. Копируем все содержимое файла (благо, в отличие от Ворда - о ужас! - NB создает мало лишних управляющих слов и символов) и вставляем в нужное место кода (в тело кода, в функцию или подпрограмму). Если есть понимание тегов RTF (они в RTF называются управляющие слова и символы), то неплохо бы удалить лишнее, например указание на шрифты, которые вы вообще не используете, и пр.), ниже я приведу самые "горячие" теги. Чтобы создать форматированный документ из NB достаточно дописать к каждой строчке RTF документа команду FileWrite.
Добавлено (22 Август 2009, 03:46) --------------------------------------------- Например, если в проекте мы выполним это:
То получим, открыв документ в Ворде, вот это: А это уже приличный документ, не стыдно показать. Таким образом, в редакторе объекта статья можно создавать любой документ, а потом просто перенести код созданного документа в код. Конечно этот способ не назовешь экономичным, но он работает и позволяет создавать красивые документы из NB очень быстро.
Полезные теги RTF (упомяну здесь только те, что сам использовал или просто контролировал, подробно о тегах см. в прикреплении – делал подборку, для себя, может кому тоже пригодится):
Code
{ начало группы } конец группы
Задает метку начала файла. Метка должна стоять в начале файла. В качестве параметра программа, при помощи которой создается файл, может указывать номер версии. Например:
Code
{\rtf0.......}
Важно, что бы количество открывающих и закрывающих скобок совпадало, иначе в Ворде откроется не форматированный документ, а код RTF во всей красе, или откроется в Ворде только часть вами сохраненных строк, а остальные вы сможете увидеть только в Блокноте (так что стоит проверять результат записи в файл в блокноте, особенно в случаях, когда в Ворде вы налюдаете не то, чего хотелось бы…). Важно! При дописывании в файл RTF нужно удалять закрывающую скобку, иначе все что вы допишете не отобразится в Ворде, а останется скрытым текстом, будет балластом висеть в коде RTF. При дописывании в файл я использовал следующие команды:
Code
.удаляем последнюю сроку (содержит закрывающую RTF-файл скобку) FileDelLine "[imyfilerez]" "[KolichStrok1]" .очищаем формат предыдущей строки (что бы разделить форматирование на страницах) FileWrite "[imyfilerez]" "Append" "\pard" .делаем "разрыв страницы" FileWrite "[imyfilerez]" "Append" "\page" .отмечаем начало новой записи. FileWrite "[imyfilerez]" "Append" "{\*\bkmkstart Del}\par"
…а далее то, что вы желаете дописать, включая, обязательно, финальную скобку "}"
Добавлено (22 Август 2009, 03:51) --------------------------------------------- Если необходимо разместить символы "\", "{" или "}" внутри обычного текста, то перед ними надлежит поставить обратную косую черту: \\ \{ \}. Это важно знать, например, если вы сохраняете адрес, путь к файлу в тексте RTF. Чтобы слеш не был проинтерпретирован как начало управляющего слова замените его на двойной слеш. Например так:
Установка вида кодировки для сохраняемого текста осуществляется с помощью следующих операторов:
Code
\ansi: текст хранится в стандартном ASCII-формате. Этот формат используется, например, в Windows. \mac:. текст хранится в кодировке Macintosh \рс: для вывода текста используется кодировка символов IBM-PC. \рса: IBM-PC Code Page 850 (модель PS\2).
Для передачи текстов между различными системами должна использоваться кодировка \ansi.
Команда для создания группы шрифтов может состоять из таких операторов:
Code
{\fonttbl\f0\fnil default;} {\fl\froman roman h;} {\f2\fswiss helvetica;}
После ключевого слова \fonttbl следует первый номер шрифта \f0. Далее идет определение группы шрифтов. Здесь после номера 0 указано \fnil, т.е. имя группы неизвестно. Следующий параметр обозначает имя выбираемого шрифта (например, roman h). Указание default говорит считывающей программе о том, что следует использовать стандартный шрифт. После имени шрифта стоит точка с запятой. В приведенном примере определены только шрифты с номерами 1 и 2. Вся последовательность может быть объединена фигурными скобками в группу.
\f000 Установка настройки шрифта с указанием в качестве параметра номера фонта.
\fs000 Оператор в качестве параметра содержит высоту символов, заданную в единицах по 1/2 пункта. Стандартное значение высоты равно 24 единицам (12 пунктам).
\page Данная последовательность задает переход на новую страницу.
\line Эта последовательность вызывает переход на новую строку в тексте.
\раr С помощью данной последовательности в тексте отмечается конец абзаца. Последовательность \раr может заменяться последовательностью \10 или \13. При этом \10 соответствует ASCII-символу с кодом 10 (carriage return). Непосредственно ввести ASCII-код 10 (CR) нельзя, т.к. он игнорируется программой чтения. А вообще, для многих управляющих слов и символов можно непосредственно задавать ASCII-код, если вам так удобно. Я использовал тег "\раr" для решения проблемы с вертикальным слешем тоже использовал автозамену, в примере выше вы могли заметить:
Это я знак "|" на момент записи в файл меняю на символ конца абзаца в кодировке RTF, а потом обратно (чтобы на экране введенный текст продолжал отображаться как надо).
Добавлено (22 Август 2009, 03:53) --------------------------------------------- \pard Оператор устанавливает стандартную настройку для абзаца. Я использовал этот оператор для очистки формата вставляемой командой FileWrite строки.
\tab Данная последовательность заменяет табулятор. Например, в первой строке приведенного мною примера есть "\deftab709" табуляция по умолчанию (в twips, где 1 twip равен 1/20 пункта или 1/1440 дюйма). В открывшемся документе будет использоваться проставленное здесь значение (в сантиметрах, в данном примере, это 1,25 см).
В группу операторов, определяющих закладки, входят только два оператора: \*\bkmkstart: начало области \*\bkmkend: конец области \*\bkmkstart: начало области \*\bkmkend: конец области
Однако, удобство предлагаемого решения в том, что можно не заботиться о том, чтобы вручную прописывать операторы (шрифтов, табуляции и прочего...). Все это делается визуально в редакторе объекта статья - какое там форматирование и параметры документа выставим, такие в RTF-коде и отразятся.
Добавлено (22 Август 2009, 03:56) --------------------------------------------- Фото документа (на приведенном рисунке) получилось размытым (это вся страница А4 целиком), но думаю понятно...
VadimLevkin, Поздравляю тебя с первым уроком Молодец , толкого все изложил сразу видно, что не одну бессонную ночь провел, и наверное при входе на поисковик, тот тяжело вздыхает можно дополнить простым исходником с примером для наглядности, как в сосоедней ветке говорилось, для быстроты понимания, да и народ при использовании исходника может найти недочеты или оптимизировать, если конечно это требуется. Зачет +
Сообщение отредактировано sp3d - Сб, 22 Августа 2009, 07:56
Похоже от гугля этого не дождаться Он любого "перебайтит" забавное словечко выдумалось...
Quote (sp3d)
закрепить простым исходником с примером
Да, пожалуй, ты прав. Стоит сделать. Просто видимо лениво было вырезать этот кусок кода из общего. Но надо, иначе как народ ошибки искать будет? Сейчас перекушу и забацаю.
Добавлено... sp3d, Спасибо за репу!! Только вот еще вроде никому не помогло...
это только кажется, я сам недавно хотел остветить тему по RTF, но меня хватило только на начало, сдулся изза нехватки времени и излишество лени. Но ты все упростил для меня, т.к. скоро мне придется в плотную занятся этим RTF. Да и откуда знать, что завтра-послезавтра не придет человек, которому эта тема будет оч нужна?!
Сообщение отредактировано sp3d - Сб, 22 Августа 2009, 08:06
Правильно, давайте уже тоже кипишитесь потихоньку, контент нужен для сайта nb. А то Peter вон уже в больничке, перенапрягся бедный. Как задавать вопросы
Спасибо! Честно говоря, я на урок не претендовал (только поделиться работающим решением), поскольку наверняка привел не оптимальный вариант с массой погрешностей. А урок должен содержать если не лучшее, то одно из лучших решений. Но, общими усилиями, глядишь, и эта тема поднимется, ведь NB + RTF = ОЧЕНЬ МНОГО ВОЗМОЖНОСТЕЙ.
Во, как раз у меня на основе этой темы возникла идейка сделать многофункциональный текстовый редактор, потому что это
Quote (VadimLevkin)
NB + RTF = ОЧЕНЬ МНОГО ВОЗМОЖНОСТЕЙ.
действительно правда. Но самая главная фишка этого редактора будет в том, что он будет подсвечивать скрипты NB То есть получится этакий редактор специально для необукеров
Но вот как это реализовать пока не допер... Вадим, если время будет, поможешь мне в этом
идейка сделать многофункциональный текстовый редактор <...> главная фишка этого редактора будет в том, что он будет подсвечивать скрипты NB
Неслабая затея! Хочется узнать подробнее о задумке. Что редактор будет уметь, что не умеет редактор команд NB? В смысле, чем он будет полезен необукерам? Что они нового благодаря ему смогут получить, использовать?
Не знаю, может пригодится: есть редактор в плагине EditorsToolbox, но о подсветке в нем я не знаю, только посмотреть успел. Как я понял он позволяет в проектах NB делать внутренние текстовые редакторы, по типу WordPad.
Неслабая затея! Хочется узнать подробнее о задумке.
Ага Сам пока не знаю ничего конкретно, эта затея только что в голову пришла, но у меня уже столько идей!!! Можно добавить в этот редактор кучу полезного, например: удаление двойных пробелов, пустых строк и т.д. Но самое главное это совместная работа с необук!!!! Т.е. из редактора можно будет, к примеру, создать в NB новый проект, или вставить в уже открытый проект код, написанный в редакторе... Да моло ли чего еще!!! Да и вообще, давайте все вместе сворганим такую программку, я уверен она окажется очень полезной!!! Ну как идея?? Нравится?
ну логика примерно такая... считываешь строки, если встречаются заданные ключевые слова то раскрашиваешь их, инфу о раскрашиваемых словах хранишь в файле, который подгружается при старте. А в самой проге предусмотрен выбор какие слова и каким цветом красить - сохраняется все в файл - получится типа файл стилей. Как задавать вопросы
сделать с нуля простенький пример, может даже сам найдешь косяки
Quote (sp3d)
хотел остветить тему по RTF
Quote (DEMBEL)
Если есть что добавить по теме, пишите есчё...
Quote (Bodi)
поддержим отечественного производителя
Небольшой простенький пример я сделал. Однако не обошлось без сюрпризов . В частности, я так и не понял почему в просмотре сохраненных в файл RTF результатов (в окне проекта NB) появляются цветные полосы вместо самих результатов , хотя у меня в реальном проекте всё нормально и делаю точно также... странно... В общем, предлагаю вместе покумекать над темой. Это не жанр УРОКА, а скорее жанр ПОИСКА РЕШЕНИЯ. Наряду с Уроками, такой жанр, мне кажется, может быть очень полезен. А итогом станет вполне приличный пример использования RTF в проектах NB. Скорее, таких итогов будет много, поскольку можно постоянно пополнять пример новым функционалом, демонстрирующим возможности применения RTF в NB. Выкладываю пример в сыром виде. Чтобы он был полезнее, в нем нужно решить минимум две задачи: 1) Решить проблему с открытием файла RTF в окне проекта. Дело в том, что сохраняет в файл нормально и если открывать через MS Word, то мы видим красивый документ, как и хотели, а вот открытие его в окне проекта NB приводит к странному эффекту "пустой полосатости" - вместо результатов просто зебра какая-то... 2) Надо придумать проверку на корректность записи/удаления (в коде я специально эти места комментирую (код на кнопках "Создать..." и "Удалить...").
А далее, предлагаю, также в жанре "поиска решения" добавлять к этому примеру новые предложения, новые функции и т.д., которые максимально полно откроют возможности применения RTF в NB-проектах. Для удобства понимания и из экономии времени, на стартовой странице предлагаю отмечать места, где есть код (я уже это сделал, нужно только продолжить).
Добавлено (24 Август 2009, 15:24) ---------------------------------------------
Quote (Bodi)
Т.е. из редактора можно будет, к примеру, создать в NB новый проект, или вставить в уже открытый проект код
Quote (Bodi)
но у меня уже столько идей!!!
Я думаю, что есть смысл браться за такой редактор, если он сможет то, что недоступно из NB или других приличных редакторов, но, при этом, очень нужно. Т.е. если в этом есть необходимость. А в противном случае зачем дублировать то, что уже сделано? Тем более, если столько идей ;)? Было бы совсем замечательно, если бы то, что создаётся не просто позволяло оттачивать навыки и учиться новому, но и было бы практически полезно.
Не знаю, может пригодится: есть редактор в плагине EditorsToolbox
Ага, посмотрел. Но я считаю что для подобной программы плагин ни к чему. Надо слеать так чтобы и функционально, и красиво, и работоспособно, и без плагинов, и главное понятно как все это работает даже начинающему
Quote (VadimLevkin)
Небольшой простенький пример я сделал
Ща поизучаем
Quote (VadimLevkin)
Я думаю, что есть смысл браться за такой редактор, если он сможет то, что недоступно из NB или других приличных редакторов
Нее, это уж слишком. Такой редактор конечно же даже близко не будет стоять с "приличными" редакторами, хотя... если только очень постораться
Quote (VadimLevkin)
Было бы совсем замечательно, если бы то, что создаётся не просто позволяло оттачивать навыки и учиться новому, но и было бы практически полезно.
Конечно хорошо бы, но меня и первый вариант устраивает Главное реализовать задумку, и если все получилось так как ты хотел, то уже хорошо!!
Quote (VadimLevkin)
Однако, синхронно мыслим!
Как говорится "Одна голова хорошо, а n-ое количество еще лучше"
Добавлено (24 Август 2009, 17:50) --------------------------------------------- Нашел один плагинчег. Он как раз для того что нам и надо. Кого еще интересует данная тема могут поизучать, но мне все же кажется что лучше делать подобный редактор без применения плагинов...
У меня созрела еще одна идейка: можно сделать открытие исходных файлов проектов (*.pub) и там тоже подсвечивать разные слова для удобочитаемости. Может у кого тоже есть идеи, или эта тема меня одного интересует???
Bodi, вот, наткнулся в сети, может тебе пригодится... Плагин VariParser - по описанию позволяет извлекать (?) квадратные скобки переменных из текстовых файлов (TXT, HTML, XML и т.д.). Полезен для тех, кто создает ASCII-шаблоны для NeoBook. Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
Peter у меня идея - организуйте на сайте сбор средств на приобретение для скинувшихся пользователей лицензий на всякие прикольные штуковины! Как задавать вопросы
Да, меня тоже заинтересовала, но своей крутизной отпугнула :). Мне еще рановато.
Quote (sp3d)
предлагаю вешать ссылки двух вариантов
А если нажимать на скачивание, то гугл отказывается переводить и предлагает "перейти на оригинальную страницу", вот по этой ссылке и надо нажать - начнется загрузка. Т.е. всего лишь на одно действие больше. Это проще, чем ссылки дублировать.
Добавлено (25 Август 2009, 10:07) ---------------------------------------------
Ну стобаксовые лицензии никто ж не будет брать, а вот по 10-20 кто нибудь да взял бы, но в одного все равно жирно было бы, а если на нескольких вы бы раскидали было бы вполне терпимо думается... У вас на НБ дофига же платного барахла предлагают ) и местами вполне достойного между прочим... Как задавать вопросы