Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RichEdit. Форматирован ли текст. 
:(
    Опции темы
Snowy
Дата 1.3.2006, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Есть RichEdit. Пользователь набил в нем текст.
Как узнать, использовал ли он форматирование или весь текст набит одним форматом.
Мне нужен просто текст, если форматирование не использовалось и RTF, если использовалось.
Не могу отличить...
PM MAIL   Вверх
Yanis
Дата 1.3.2006, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Snowy @ 1.3.2006, 18:57 Найти цитируемый пост)
Как узнать, использовал ли он форматирование или весь текст набит одним форматом.

Текст может быть форматированым и иметь один формат. Поясни...
Добавлено @ 19:10
Может быть через EM_GETCHARFORMAT и EM_SETCHARFORMAT можно узнать.

Это сообщение отредактировал(а) Yanis - 1.3.2006, 19:02


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Snowy
Дата 1.3.2006, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Yanis @ 1.3.2006, 19:01 Найти цитируемый пост)
Может быть через EM_GETCHARFORMAT и EM_SETCHARFORMAT можно узнать.
Нет. Это я и так могу узнать.
Мне нужно, к примеру: если в тексте пользователь хотя бы одну буковку сделал наклонной или другого цвета, то текст считается, использующим форматирование. Если на протяжении всего текста, его оформление остается постоянным, то такой тест считать неформатированным.
Смысл этого:
Если пользователь просто пишет текст, считать, что его интересует только текст.
Если он использует элементы оформления (жирный, наклонный, цвет, шрифт, размер), то считать, что ему нужен и текст и оформление.
Исходя из этого я должен брать либо RTF, либо PlainText.
Приоритетный PlainText. Но, если вдруг пользователю захочется... Тогда нужно брать RTF.
У пользователя спрашивать нельзя - программа должна сама понимать, что если пользователь меняет оформление, значит оно ему нужно.
PM MAIL   Вверх
Snowy
Дата 1.3.2006, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Пока придумал только такой вариант:
Смотреть RTF текст и искать в нем теги форматирования (\b\ и т.п.).
Еще есть мысль пробежаться курсором по всем позициям и сравнивать текущий аттрибут с аттрибутом первой позиции. Но сравнить аттрибуты не так просто.
Вероятно все же буду просматривать на наличие тегов.
Если никто более умного не подскажет...
PM MAIL   Вверх
DemoCode
Дата 1.3.2006, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: 2
Всего: 41



Цитата(Snowy @ 1.3.2006, 21:11 Найти цитируемый пост)
Если никто более умного не подскажет...

Могу подсказать более глупого smile способа:

Создаёшь второй невидимый richedit со свойством plaintext:=true. Когда надо проверить. Текст из первого (твоего) richedit'а копируешь во второй. И далее, если длина строки первого едита равна длине строки второго, то форматирования не использовалось, иначе оно использовалось. smile Можно ещё и хэши этих строк сравнивать например.


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
Демо
Дата 1.3.2006, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(Snowy @ 1.3.2006, 18:57 Найти цитируемый пост)
если форматирование не использовалось


Каким образом пользователь форматирует текст?


--------------------
    
PM MAIL ICQ Skype   Вверх
Quadr0
Дата 1.3.2006, 21:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 10:37
  Вверх
Snowy
Дата 2.3.2006, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(DemoCode @ 1.3.2006, 20:38 Найти цитируемый пост)
екст из первого (твоего) richedit'а копируешь во второй. И далее, если длина строки первого едита равна длине строки второго, то форматирования не использовалось
Не понял твоей мысли. Если мы один и тот же текст сконвертим в plain, оба варианта будут равны. А сравнивать RTF и Plain по длине бессмысленно.

Цитата(Демо @ 1.3.2006, 20:52 Найти цитируемый пост)
Каким образом пользователь форматирует текст?
Практически 2 варианта: ввод текста с клавиатуры и оформление кнопочками и хоткеями. Второй - вставка из буфера обмена.

Цитата(Quadr0 @ 1.3.2006, 21:06 Найти цитируемый пост)
RTF - закрытый формат
Это ты зачем так сказал?
Вот описание на русском: http://grandad.by.ru/rtf.html
А также можно найти полное описание на сайте M$. Причем версий вплоть до Office2003.

Цитата(Quadr0 @ 1.3.2006, 21:06 Найти цитируемый пост)
не превращаются в escape-символы
Там бэкслаш символы. Они превращаются \\.

Цитата(Quadr0 @ 1.3.2006, 21:06 Найти цитируемый пост)
Проверяем аттрибуты форматирования
Думаю можно попробовать упростить этот процесс при помощи сериализации объекта TTextAttributes.

Все же мне кажется, что быстрее и разумней будет искать по формату. Завтра поэксперементирую.
(точнее уже сегодня).
Добавлено @ 00:03
А вот и линк на описание формата RTF от Microsoft
PM MAIL   Вверх
Snowy
Дата 2.3.2006, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Quadr0 @ 1.3.2006, 21:06 Найти цитируемый пост)
Вот это уже получше вариант. Я пробовал его. Попробуй так:
Попробовал. Перестает работать сразу после того, как появляется форматированный текст. После этого всегда говорит, что форматирован.
Хотя можно пролечить, если пойти по моей схеме - отталкиваться не от эталона, а от первой позиции.
Но тогда не покажет, если весь текст форматирован.
В принципе это уже не так важно. Но вариант с тэгами тут лучше.
С другой стороны, можно всегда сбрасывать на дефолтовое значение.
Но остается проблема со вставкой из буфера - там может быть обычный текст, просто фонт не ариал, а таймс, например...
Все же теги надежней.
Ладно, будем думать и копать...
PM MAIL   Вверх
Quadr0
Дата 2.3.2006, 00:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 10:40
  Вверх
DemoCode
Дата 2.3.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: 2
Всего: 41



Цитата(Snowy @ 2.3.2006, 01:02 Найти цитируемый пост)
Не понял твоей мысли. Если мы один и тот же текст сконвертим в plain, оба варианта будут равны. А сравнивать RTF и Plain по длине бессмысленно.


Имеем два ричедита.
С первым работает пользователь
Второй - невидимый.

Когда натсупает момент проверить использовано ли форматирование. Копируем содержимое первого ричедита во второй. Во втором его конвертируем в plain text. Сохраняям оба. Сравниваем. Если размер первого больше, второго, значит форматирование использовано, иначе нет.


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
Snowy
Дата 2.3.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Здрасте, приехали. Я тебе без сравнивания скажу, что RTF будет длинее, чем plain text.
Независимо от форматирования.
PM MAIL   Вверх
DemoCode
Дата 2.3.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: 2
Всего: 41



Цитата(Snowy @ 2.3.2006, 18:24 Найти цитируемый пост)
Здрасте, приехали. Я тебе без сравнивания скажу, что RTF будет длинее, чем plain text.
Независимо от форматирования.

Но можно из RTF'a перед сравнением вырезать то, что он пихает туда по-умолчанию.
Добавлено @ 17:42
Проверил так, работает только с латинницей.


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
Snowy
Дата 2.3.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



В таком случае получается еще более сложный вариант, чем определение наличия тегов.
Хотя... В эту сторону тоже можно подумать.
Кирилицу легко можно законвертить в RTF.
Но! Проблема появится, когда строк будет несколько, а не одна - в RTF это новые параграфы.
PM MAIL   Вверх
Yanis
Дата 4.3.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



2 Snowy
Посмотри, пожалуйста мой вариант. Он основывается на сверке первого символа с остальными. Что скажешь?

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  rtf_style_detect.zip 2,90 Kb


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0848 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.