![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Есть RichEdit. Пользователь набил в нем текст.
Как узнать, использовал ли он форматирование или весь текст набит одним форматом. Мне нужен просто текст, если форматирование не использовалось и RTF, если использовалось. Не могу отличить... |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Текст может быть форматированым и иметь один формат. Поясни... Добавлено @ 19:10 Может быть через EM_GETCHARFORMAT и EM_SETCHARFORMAT можно узнать. Это сообщение отредактировал(а) Yanis - 1.3.2006, 19:02 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Нет. Это я и так могу узнать.
Мне нужно, к примеру: если в тексте пользователь хотя бы одну буковку сделал наклонной или другого цвета, то текст считается, использующим форматирование. Если на протяжении всего текста, его оформление остается постоянным, то такой тест считать неформатированным. Смысл этого: Если пользователь просто пишет текст, считать, что его интересует только текст. Если он использует элементы оформления (жирный, наклонный, цвет, шрифт, размер), то считать, что ему нужен и текст и оформление. Исходя из этого я должен брать либо RTF, либо PlainText. Приоритетный PlainText. Но, если вдруг пользователю захочется... Тогда нужно брать RTF. У пользователя спрашивать нельзя - программа должна сама понимать, что если пользователь меняет оформление, значит оно ему нужно. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Пока придумал только такой вариант:
Смотреть RTF текст и искать в нем теги форматирования (\b\ и т.п.). Еще есть мысль пробежаться курсором по всем позициям и сравнивать текущий аттрибут с аттрибутом первой позиции. Но сравнить аттрибуты не так просто. Вероятно все же буду просматривать на наличие тегов. Если никто более умного не подскажет... |
|||
|
||||
| DemoCode |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 890 Регистрация: 20.10.2005 Где: Россия Репутация: 2 Всего: 41 |
Могу подсказать более глупого Создаёшь второй невидимый richedit со свойством plaintext:=true. Когда надо проверить. Текст из первого (твоего) richedit'а копируешь во второй. И далее, если длина строки первого едита равна длине строки второго, то форматирования не использовалось, иначе оно использовалось. -------------------- Жить стало лучше, жить стало веселей © И.В. Сталин |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Каким образом пользователь форматирует текст? -------------------- |
|||
|
||||
| Quadr0 |
|
|||
|
Unregistered |
...
Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 10:37 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Практически 2 варианта: ввод текста с клавиатуры и оформление кнопочками и хоткеями. Второй - вставка из буфера обмена. Это ты зачем так сказал? Вот описание на русском: http://grandad.by.ru/rtf.html А также можно найти полное описание на сайте M$. Причем версий вплоть до Office2003. Там бэкслаш символы. Они превращаются \\. Думаю можно попробовать упростить этот процесс при помощи сериализации объекта TTextAttributes. Все же мне кажется, что быстрее и разумней будет искать по формату. Завтра поэксперементирую. (точнее уже сегодня). Добавлено @ 00:03 А вот и линк на описание формата RTF от Microsoft |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Попробовал. Перестает работать сразу после того, как появляется форматированный текст. После этого всегда говорит, что форматирован.
Хотя можно пролечить, если пойти по моей схеме - отталкиваться не от эталона, а от первой позиции. Но тогда не покажет, если весь текст форматирован. В принципе это уже не так важно. Но вариант с тэгами тут лучше. С другой стороны, можно всегда сбрасывать на дефолтовое значение. Но остается проблема со вставкой из буфера - там может быть обычный текст, просто фонт не ариал, а таймс, например... Все же теги надежней. Ладно, будем думать и копать... |
|||
|
||||
| Quadr0 |
|
|||
|
Unregistered |
...
Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 10:40 |
|||
|
||||
| DemoCode |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 890 Регистрация: 20.10.2005 Где: Россия Репутация: 2 Всего: 41 |
Имеем два ричедита. С первым работает пользователь Второй - невидимый. Когда натсупает момент проверить использовано ли форматирование. Копируем содержимое первого ричедита во второй. Во втором его конвертируем в plain text. Сохраняям оба. Сравниваем. Если размер первого больше, второго, значит форматирование использовано, иначе нет. -------------------- Жить стало лучше, жить стало веселей © И.В. Сталин |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Здрасте, приехали. Я тебе без сравнивания скажу, что RTF будет длинее, чем plain text.
Независимо от форматирования. |
|||
|
||||
| DemoCode |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 890 Регистрация: 20.10.2005 Где: Россия Репутация: 2 Всего: 41 |
Но можно из RTF'a перед сравнением вырезать то, что он пихает туда по-умолчанию. Добавлено @ 17:42 Проверил так, работает только с латинницей. -------------------- Жить стало лучше, жить стало веселей © И.В. Сталин |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
В таком случае получается еще более сложный вариант, чем определение наличия тегов.
Хотя... В эту сторону тоже можно подумать. Кирилицу легко можно законвертить в RTF. Но! Проблема появится, когда строк будет несколько, а не одна - в RTF это новые параграфы. |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
2 Snowy
Посмотри, пожалуйста мой вариант. Он основывается на сверке первого символа с остальными. Что скажешь? Присоединённый файл ( Кол-во скачиваний: 3 )
rtf_style_detect.zip 2,90 Kb |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |