powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Кастомный текстовый редактор
14 сообщений из 14, страница 1 из 1
Кастомный текстовый редактор
    #39390641
КириллН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, уважаемые форумчане!
Делаю для себя носимое (на флешке) приложение-органайзер. Одной из его частей планируется расширенный механизм заметок, из содержимого которых идут ссылки на различные записи в различных таблицах БД приложения (sqlite). Например:
• создаю заметку-напоминалку, ввожу во встроенном текстовом редакторе фразу: "Позвонить Коляну, попросить помочь с настройкой АРМ";
• выделяю слово "Коляну", жму на тулбаре (или в контекстном меню) кнопку "Связать с контактом" -> открывается список контактов -> выбираю контакт Коляна;
• выделяю слово "попросить", жму "Ж" -> шрифт слова становится полужирным;
• выделяю слова "настройкой АРМ", жму "Связать с задачей" -> открывается список задач -> выбираю задачу по настройке АРМ.
В итоге заметка в редакторе выглядит примерно как на картинке, фрагмент №1.
Сохраняю заметку.
В дальнейшем, когда я ее просматриваю, она выглядит так же.
Нажатие на "ссылки" приводит к (например) открытию форм просмотра соответствующих записей: контакт Коляна и задача по настройке.

Как мне такой текстовый редактор лучше сделать? На основе каких контролов? Варианты возможных событий при нажатии (или двойном нажатии) на "ссылку":
• открытие окна
• открытие ссылки в браузере по умолчанию
• открытие в проводнике указанной папки (напр., %appdata%)
• появление какого-то текста после ссылки (наподобие спойлера, только in-line; повторное нажатие закрывает "спойлер")

Как хранить связи я уже примерно представляю - см. рисунок, фрагмент №2. В Notes.Content хранится текст с какими-то регулярками наподобие тегов html, например, для упомянутого варианта выглядеть содержимое будет как-то так:
Код: html
1.
Позвонить <ref:1>Коляну</ref>, <b>попросить</b> помочь с <ref:2>настройкой АРМ</ref>


В 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
...
Рейтинг: 0 / 0
Кастомный текстовый редактор
    #39390642
КириллН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Кастомный текстовый редактор
    #39390819
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КириллН,
нужно Позвонить Коляну, попросить помочь с WPF.
...
Рейтинг: 0 / 0
Кастомный текстовый редактор
    #39391098
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КириллН,
если по существу, то основной контрол TextBox, далее уже в зависимости от деталей.
Если у Вас будут все сообщения типа "Метод объект метод объект" ("Позвонить Коляну, попросить помочь с настройкой АРМ"), то это просто, однако вряд ли у Вас будет все ваши заметки вписываться в эту схему. Поэтому вопрос о контролах задан достаточно рано- Вам нужно еще подумать над тем как Вам разбивать Вашу заметку на схемы типа выше приведенной. Вручную это делать - неблагодарный труд- да и полезность такой программы будет сомнительна.
...
Рейтинг: 0 / 0
Кастомный текстовый редактор
    #39391149
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subесли по существу, то основной контрол TextBox,С чего вдруг? Раз нужны ссылки, форматирование и прочая лабутень, то как минимум WPF-RichTextBox https://professorweb.ru/my/WPF/documents_WPF/level28/28_7.php
...
Рейтинг: 0 / 0
Кастомный текстовый редактор
    #39391212
КириллН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vb_sub,
Благодарю за конструктив. =) Разумеется, заметки будут писаться в произвольной форме (я порой тот еще "маэстро эпистолярного жанра"), после чего будут крепиться ссылки на отдельные слова. Но TextBox видится мне вовсе неподходящим элементом для таких целей. Допускаю, что я что-то упустил, но не припоминаю возможности отображения форматированного текста в нем.

Shocker.Pro,
С приведеной вами ссылки я и начал изучать вопрос. Сейчас, начав читать про FlowDocument, все больше убеждаюсь в правильности этого решения. Но попробовав сделать первую же гиперссылку
Код: c#
1.
2.
3.
<Paragraph>
    <Hyperlink NavigateUri="http:\\microsoft.com">Какая-то ссылка</Hyperlink>
</Paragraph>


...не обнаружил возможности переходить по ней в режиме редактирования... Видимо, придется писать дополнительные обработчики, меняющие вид курсора при наведении на эти ссылки и позволяющие им (ссылкам) срабатывать...
...
Рейтинг: 0 / 0
Кастомный текстовый редактор
    #39391275
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу сейчас попробовать сам - а если с нажатым Ctrl ?
...
Рейтинг: 0 / 0
Кастомный текстовый редактор
    #39391310
КириллН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Пробовал, не работает. И тултипов никаких не выскакивает при наведении.
...
Рейтинг: 0 / 0
Кастомный текстовый редактор
    #39391385
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TextRichBox это лишь редактор для FlowDocument, 1 делом стоит разобраться, что такое FlowDocement, как он устроен, как осуществляется навигация и позиционирование в документе (например: что будет если вы поставите курсор на границу жирного и не жирного текста, в каком именно части вы окажитесь, в жирной или нежирной? и т.д. Потом можно будет ковырять RichTextBox.
Еще при этом стоит разобраться с сохранением и загрузкой этих документов, там огромное количество подводных камней, так как далеко не все свойства сохраняются при сохранении в XAML или обратно.

А запилить там гиперссылки не самая сложная задача :)
...
Рейтинг: 0 / 0
Кастомный текстовый редактор
    #39391386
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Hyperlink это просто TextElement, там вроде не реализован переход куда либо, нужно обрабатывать, лучший из вариантов это RoutedCommand, так как делегаты при сохранении "не сохраняются" :) да и команды вроде тоже, их надо будет восстанавливать после сохранения/загрузки, на сколько я помню.
...
Рейтинг: 0 / 0
Кастомный текстовый редактор
    #39391481
КириллН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,

Да, ковырялся с простейшими вещами типа зачеркивания текста и заметил, что не все так просто с этими "пограничными" положениями.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
private void Strikethrough_Click(object sender, RoutedEventArgs e)
        {
            var a = this.richTextBox.Selection;
            TextDecorationCollection tdc = a.GetPropertyValue(Span.TextDecorationsProperty) as TextDecorationCollection;
            foreach (var prop in tdc)
            {
                if (prop.Location == TextDecorationLocation.Strikethrough)
                {
                    //tdc.Remove(prop); - Это вообще не работает из-за RO-свойства IsFreezed, установленного в True
                    a.ApplyPropertyValue(Span.TextDecorationsProperty, null);
                    return;
                }
            }
            a.ApplyPropertyValue(Span.TextDecorationsProperty, TextDecorations.Strikethrough);
        }



Если выделить фрагмент текста в RTB и нажать кнопку с приведенным выше обработчиком - текст зачеркнется. Повторное нажатие отменит подчеркивание. Но если выделить одновременно зачекрнутый и незачеркнутый текст, то TextDecorationCollection будет null, и в 5 строке вывалится NullReferenceException.

Согласен также с тем, что сохранять/загружать все свойства и обработчики не выйдет, поэтому и хочу хранить их в приведенном в первом сообщении виде, а при вставке в мой CustomTextEditor парсить, приводя к должному форматированию. А при необходимости выгрузки в наружний документ сохранять как есть в html, при этом мои кастомные теги (<ref>) можно спокойно выгружать, т.к. они никакого эффекта на внешний вид документа не оказывают.
...
Рейтинг: 0 / 0
Кастомный текстовый редактор
    #39391486
КириллН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отсюда и вопрос: как мне сделать такой редактор? Это что-то типа редактируемой вручную веб-страницы получается...
...
Рейтинг: 0 / 0
Кастомный текстовый редактор
    #39391496
КириллН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм... А может, это и должна быть веб-страница?.. С прозрачным фоном, а позади нее какой-нить canvas, на котором мигает вертикальная линия, имитирующая каретку. Очень велосипедисто выглядит - согласен. xD Но пока ничего в голову не приходит больше...
...
Рейтинг: 0 / 0
Кастомный текстовый редактор
    #39391567
КириллН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По-моему, я пытаюсь сделать это .
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Кастомный текстовый редактор
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]