|
Кастомный текстовый редактор
|
|||
---|---|---|---|
#18+
Доброго времени суток, уважаемые форумчане! Делаю для себя носимое (на флешке) приложение-органайзер. Одной из его частей планируется расширенный механизм заметок, из содержимого которых идут ссылки на различные записи в различных таблицах БД приложения (sqlite). Например: • создаю заметку-напоминалку, ввожу во встроенном текстовом редакторе фразу: "Позвонить Коляну, попросить помочь с настройкой АРМ"; • выделяю слово "Коляну", жму на тулбаре (или в контекстном меню) кнопку "Связать с контактом" -> открывается список контактов -> выбираю контакт Коляна; • выделяю слово "попросить", жму "Ж" -> шрифт слова становится полужирным; • выделяю слова "настройкой АРМ", жму "Связать с задачей" -> открывается список задач -> выбираю задачу по настройке АРМ. В итоге заметка в редакторе выглядит примерно как на картинке, фрагмент №1. Сохраняю заметку. В дальнейшем, когда я ее просматриваю, она выглядит так же. Нажатие на "ссылки" приводит к (например) открытию форм просмотра соответствующих записей: контакт Коляна и задача по настройке. Как мне такой текстовый редактор лучше сделать? На основе каких контролов? Варианты возможных событий при нажатии (или двойном нажатии) на "ссылку": • открытие окна • открытие ссылки в браузере по умолчанию • открытие в проводнике указанной папки (напр., %appdata%) • появление какого-то текста после ссылки (наподобие спойлера, только in-line; повторное нажатие закрывает "спойлер") Как хранить связи я уже примерно представляю - см. рисунок, фрагмент №2. В Notes.Content хранится текст с какими-то регулярками наподобие тегов html, например, для упомянутого варианта выглядеть содержимое будет как-то так: Код: html 1.
В NoteRefs хранятся все пути переходов. Тут: NoteRefs. ID - этот код подставляется в тег <ref: 1 > NoteRefs.NoteID - ИД заметки, для которой эта ссылка NoteRefs.Entity - таблица, в которой хранится запись, на которую ссылается эта ссылка NoteRefs.EntityID - ИД записи в таблице Ваяю: MSA 2003, mdb | VB.NET + mdb/SQL Express | 1Сv8, ТК УП | WPF C# + FDB/sqlite ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2017, 21:05 |
|
Кастомный текстовый редактор
|
|||
---|---|---|---|
#18+
КириллН, нужно Позвонить Коляну, попросить помочь с WPF. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2017, 10:12 |
|
Кастомный текстовый редактор
|
|||
---|---|---|---|
#18+
КириллН, если по существу, то основной контрол TextBox, далее уже в зависимости от деталей. Если у Вас будут все сообщения типа "Метод объект метод объект" ("Позвонить Коляну, попросить помочь с настройкой АРМ"), то это просто, однако вряд ли у Вас будет все ваши заметки вписываться в эту схему. Поэтому вопрос о контролах задан достаточно рано- Вам нужно еще подумать над тем как Вам разбивать Вашу заметку на схемы типа выше приведенной. Вручную это делать - неблагодарный труд- да и полезность такой программы будет сомнительна. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2017, 13:49 |
|
Кастомный текстовый редактор
|
|||
---|---|---|---|
#18+
vb_subесли по существу, то основной контрол TextBox,С чего вдруг? Раз нужны ссылки, форматирование и прочая лабутень, то как минимум WPF-RichTextBox https://professorweb.ru/my/WPF/documents_WPF/level28/28_7.php ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2017, 14:20 |
|
Кастомный текстовый редактор
|
|||
---|---|---|---|
#18+
vb_sub, Благодарю за конструктив. =) Разумеется, заметки будут писаться в произвольной форме (я порой тот еще "маэстро эпистолярного жанра"), после чего будут крепиться ссылки на отдельные слова. Но TextBox видится мне вовсе неподходящим элементом для таких целей. Допускаю, что я что-то упустил, но не припоминаю возможности отображения форматированного текста в нем. Shocker.Pro, С приведеной вами ссылки я и начал изучать вопрос. Сейчас, начав читать про FlowDocument, все больше убеждаюсь в правильности этого решения. Но попробовав сделать первую же гиперссылку Код: c# 1. 2. 3.
...не обнаружил возможности переходить по ней в режиме редактирования... Видимо, придется писать дополнительные обработчики, меняющие вид курсора при наведении на эти ссылки и позволяющие им (ссылкам) срабатывать... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2017, 15:01 |
|
Кастомный текстовый редактор
|
|||
---|---|---|---|
#18+
Не могу сейчас попробовать сам - а если с нажатым Ctrl ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2017, 15:54 |
|
Кастомный текстовый редактор
|
|||
---|---|---|---|
#18+
Shocker.Pro, Пробовал, не работает. И тултипов никаких не выскакивает при наведении. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2017, 16:28 |
|
Кастомный текстовый редактор
|
|||
---|---|---|---|
#18+
TextRichBox это лишь редактор для FlowDocument, 1 делом стоит разобраться, что такое FlowDocement, как он устроен, как осуществляется навигация и позиционирование в документе (например: что будет если вы поставите курсор на границу жирного и не жирного текста, в каком именно части вы окажитесь, в жирной или нежирной? и т.д. Потом можно будет ковырять RichTextBox. Еще при этом стоит разобраться с сохранением и загрузкой этих документов, там огромное количество подводных камней, так как далеко не все свойства сохраняются при сохранении в XAML или обратно. А запилить там гиперссылки не самая сложная задача :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2017, 17:29 |
|
Кастомный текстовый редактор
|
|||
---|---|---|---|
#18+
Shocker.Pro, Hyperlink это просто TextElement, там вроде не реализован переход куда либо, нужно обрабатывать, лучший из вариантов это RoutedCommand, так как делегаты при сохранении "не сохраняются" :) да и команды вроде тоже, их надо будет восстанавливать после сохранения/загрузки, на сколько я помню. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2017, 17:31 |
|
Кастомный текстовый редактор
|
|||
---|---|---|---|
#18+
Roman Mejtes, Да, ковырялся с простейшими вещами типа зачеркивания текста и заметил, что не все так просто с этими "пограничными" положениями. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Если выделить фрагмент текста в RTB и нажать кнопку с приведенным выше обработчиком - текст зачеркнется. Повторное нажатие отменит подчеркивание. Но если выделить одновременно зачекрнутый и незачеркнутый текст, то TextDecorationCollection будет null, и в 5 строке вывалится NullReferenceException. Согласен также с тем, что сохранять/загружать все свойства и обработчики не выйдет, поэтому и хочу хранить их в приведенном в первом сообщении виде, а при вставке в мой CustomTextEditor парсить, приводя к должному форматированию. А при необходимости выгрузки в наружний документ сохранять как есть в html, при этом мои кастомные теги (<ref>) можно спокойно выгружать, т.к. они никакого эффекта на внешний вид документа не оказывают. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2017, 18:54 |
|
Кастомный текстовый редактор
|
|||
---|---|---|---|
#18+
Отсюда и вопрос: как мне сделать такой редактор? Это что-то типа редактируемой вручную веб-страницы получается... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2017, 18:56 |
|
Кастомный текстовый редактор
|
|||
---|---|---|---|
#18+
Хм... А может, это и должна быть веб-страница?.. С прозрачным фоном, а позади нее какой-нить canvas, на котором мигает вертикальная линия, имитирующая каретку. Очень велосипедисто выглядит - согласен. xD Но пока ничего в голову не приходит больше... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2017, 19:00 |
|
|
start [/forum/topic.php?fid=21&fpage=9&tid=1440571]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 193ms |
0 / 0 |