Привязать объект к тексту

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

glebkudr
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.07.2010 (Чт) 13:36

Привязать объект к тексту

Сообщение glebkudr » 22.07.2010 (Чт) 13:51

Приветствую!

Только начал разбираться с .net, до этого был опыт с чистым VB. И вот, сходу понадобилось сделать следующую задачку:

Имеется поле с текстом во множестве строк, текст скроллбарами можно двигать. На панели инструментов есть кнопка, по нажатии на кнопку вызывается метод рисования объекта - линии, которая может быть размещена только над определенным текстом в поле, причем цвет линии на данном участке зависит от того, над каким символом мы ее разместили (это в функционале не нужно, но требуется для обработки технологии).

После того как линия нарисована она выравнивается по границе строк, каждому сегменту линии задаются в соответствие буквы текста.

Если мы двигаем скроллбар, то линия должна передвигаться вместе с текстом, таким образом, оставаясь относительно него на одном месте.

Такая вот задачка.
Я даже теоретически не знаю, в какую сторону копать, поэтому прошу подсобить хоть литературой, хоть примерами кода, хоть чем-нибудь :)

Можно пойти другим путем - ввести теги и форматирование и плясать наоборот, от текста, но хочется понять, можно ли то же самое сделать объектами. Вдобавок при теговом форматировании все равно как-то нужно создавать визуализацию всего этого безобразия.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Привязать объект к тексту

Сообщение FireFenix » 22.07.2010 (Чт) 14:01

Проще взять готовый RichTextBox, который умет подчёркивать/форматировать текст
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

glebkudr
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.07.2010 (Чт) 13:36

Re: Привязать объект к тексту

Сообщение glebkudr » 22.07.2010 (Чт) 14:12

FireFenix писал(а):Проще взять готовый RichTextBox, который умет подчёркивать/форматировать текст


Есть проблемка.

Мне нужно будет существенно расширять визуальный функционал платформы, и ричтекстбокс тут не справится (нужно будет сделать процессор для работы с массивами генетической информации). Дело не в подчеркивании текста, а именно в том, чтобы подчеркнутая область задавалась отдельным объектом.
В данном случае необходимо полностью отделить визуальное представление от логики, даже если это и трудно.

Т.е. задача максимум - отображение текста, а над ним куча служебных слоев информации состоящих из отдельных объектов, которые можно произвольно включать/выключать а так же редактировать, причем эти метаслои строго тексту соответствуют.

Пока что я вижу вариант физической привязки к размеру букв и т.д., но как-то это тупо и топорно :(

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Привязать объект к тексту

Сообщение Debugger » 22.07.2010 (Чт) 15:57

Был топик с разными реализациями расширенной прорисовки текста, в том числе с подчёркиваниями букв, в том числе под .NET.
Added: да, viewtopic.php?f=2&t=38292&start=0&st=0&sk=t&sd=a

glebkudr
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.07.2010 (Чт) 13:36

Re: Привязать объект к тексту

Сообщение glebkudr » 22.07.2010 (Чт) 16:19

Спасибо, почитаю.

glebkudr
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.07.2010 (Чт) 13:36

Re: Привязать объект к тексту

Сообщение glebkudr » 22.07.2010 (Чт) 17:36

Вопрос назрел, как программно добавить lineshape на форму? Me.Controls.Add не катит, говорит, что LineShape не являтеся контролом.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Привязать объект к тексту

Сообщение FireFenix » 22.07.2010 (Чт) 17:39

Ох, мсдн нынче не в моде...

http://msdn.microsoft.com/en-us/library ... shape.aspx

ShapeContainer

Т.е. задача максимум - отображение текста, а над ним куча служебных слоев информации состоящих из отдельных объектов, которые можно произвольно включать/выключать а так же редактировать, причем эти метаслои строго тексту соответствуют.

Что мешает вначале отпинать текст, сделать с ним нужные приготовления и оптом отображать в RTB? Т.е. RTB юзать не как контрол-хранилище, а только для отображения
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

glebkudr
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.07.2010 (Чт) 13:36

Re: Привязать объект к тексту

Сообщение glebkudr » 22.07.2010 (Чт) 18:26

FireFenix писал(а):Ох, мсдн нынче не в моде...

http://msdn.microsoft.com/en-us/library ... shape.aspx

ShapeContainer


Спасибо.

Что мешает вначале отпинать текст, сделать с ним нужные приготовления и оптом отображать в RTB? Т.е. RTB юзать не как контрол-хранилище, а только для отображения


Ничего не мешает, так и будет. Только вот потом пользователю с текстом необходимо работать и желательно чем-то удобнее чем через разметку текста.
Вот как-то так должно быть в итоге http://www.nucleics.com/images/site_ima ... -after.gif

Или даже вот так http://i596.photobucket.com/albums/tt50 ... 8large.png
Последний раз редактировалось glebkudr 22.07.2010 (Чт) 18:33, всего редактировалось 1 раз.

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Привязать объект к тексту

Сообщение Debugger » 22.07.2010 (Чт) 18:33

Если надо прорисовывать больше фигур и меньше текста, то ты делаешь всё не так. Надо не объект к тексту привязывать, а букву к месту.

glebkudr
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.07.2010 (Чт) 13:36

Re: Привязать объект к тексту

Сообщение glebkudr » 22.07.2010 (Чт) 18:37

Debugger писал(а):Если надо прорисовывать больше фигур и меньше текста, то ты делаешь всё не так. Надо не объект к тексту привязывать, а букву к месту.


Если отдельными буквами работать, то лучше сразу застрелиться :)

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Привязать объект к тексту

Сообщение FireFenix » 22.07.2010 (Чт) 20:05

Ты вначале определись - какие должны быть свойства контрола, и что он должен делать, и для каких целей.... может вообще лучше юзать другое...
glebkudr писал(а):Вот как-то так должно быть в итоге http://www.nucleics.com/images/site_ima ... -after.gif
Или даже вот так http://i596.photobucket.com/albums/tt50 ... 8large.png

Судя по первой пикчи - обычное построение графиков с подписями
На второй кроме текста и ниже идущей картинки тоже ничего не понятно... какие зависимости?

Если нужно отображение статистики содержания текста, то можно взять за основу опенсорсный контрол для графиков и поверх него рисовать текст
Ещё идеи статистики можно почерпнуть у биржевого терминала MetaTrader, он специально заточен под графики и работу с ними
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

glebkudr
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.07.2010 (Чт) 13:36

Re: Привязать объект к тексту

Сообщение glebkudr » 22.07.2010 (Чт) 23:34

FireFenix писал(а):На второй кроме текста и ниже идущей картинки тоже ничего не понятно... какие зависимости?


На второй картинке значимой первичной информацией является только верхняя строчка текста, где TTGG начало.

Все остальное - и другой текст и картинки и стрелочки и т.д. - это просто описание данного текста, его метаслои, которые отображаются тут же, в этом окне, генерируются они как автоматически, так и вручную.
Меняется любая буква исходного текста - соответствующим образом меняются и метаслои. Это не статистика, т.к. статистика отталкивается от суммирования, это паттерны, идет парсинг текста на разных уровнях и соответствующая генерация объектов. Скажем, встретил парсер буквосочетание "TTG" и сгенерировал событие вызовы объекта подписи "Leu", а встретил "AAGCTT" и нарисовал загогулину.

какие должны быть свойства контрола, и что он должен делать, и для каких целей.... может вообще лучше юзать другое...


Возможно... Нужен контейнер для текста и графики, чтобы при скролле взаимное расположение текстовых и графических элементов не менялось.
Возможно (сейчас подумал) стоит в таком случае делать общий контейнер где текст не свойство основного поля, как в текстбоксе, а лишь один из объектов.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Привязать объект к тексту

Сообщение FireFenix » 23.07.2010 (Пт) 0:54

Опять таки всей сути не понятно...
glebkudr писал(а):Меняется любая буква исходного текста - соответствующим образом меняются и метаслои. Это не статистика, т.к. статистика отталкивается от суммирования, это паттерны, идет парсинг текста на разных уровнях и соответствующая генерация объектов. Скажем, встретил парсер буквосочетание "TTG" и сгенерировал событие вызовы объекта подписи "Leu", а встретил "AAGCTT" и нарисовал загогулину.

Самое просто что приходит в голову - переопределить OnPaint текстбокс и рисовать в нём свою графику

Вообще правильнее было сделать отдельно текстбокс с этой абракадаброй и в соседнем Image или UserControl рисовать графическое представление с наложением текста абракадабры из текстбокса, ну естесно + всякие велосипеды с отрисовкой тока видимого диапазона и отлова кликов по объектам

А ещё лучше по моему мнению заюзать WPF, он как раз заточен для работы с графикой и в нём можно задать любые шаблоны представления графических данных в контролах и форме
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

glebkudr
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.07.2010 (Чт) 13:36

Re: Привязать объект к тексту

Сообщение glebkudr » 23.07.2010 (Пт) 1:04

FireFenix писал(а):Опять таки всей сути не понятно...


Да очень специфический инструмент просто, кто не работал вряд ли сможет понять досконально, что и как нужно сделать. А кто знает что нужно - не знает как, это типа меня :)

Самое просто что приходит в голову - переопределить OnPaint текстбокс и рисовать в нём свою графику

А поподробнее можно? Загуглил немного, непонятно...

Вообще правильнее было сделать отдельно текстбокс с этой абракадаброй и в соседнем Image или UserControl рисовать графическое представление с наложением текста абракадабры из текстбокса, ну естесно + всякие велосипеды с отрисовкой тока видимого диапазона и отлова кликов по объектам


Похоже так и сделаю. Все это засуну в общий контейнер и буду с ним забавляться. Тут еще загрузка/выгрузка походу нужна будет динамическая, т.к. при достаточной длине текста столько объектов программа просто тупо не сможет держать в памяти.

А ещё лучше по моему мнению заюзать WPF он как раз заточен для работы с графикой и в нём можно задать любые шаблоны представления графический данных в контролах и форме


Про WPF пока не знаю вообще ничего, ушел читать.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList