![]() |
|
Модераторы: diadiavova, gambit |
![]()
|
|
| ShamanK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.2.2010 Репутация: нет Всего: нет |
написал:
выдает ошибку на строке gp.addlines(p): Переменная gp используется до присвоения ей значения. Во время исполнения может произойти исключение при ссылке на значение NULL. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Пикчербокс предназначен для отображения картинок, я так понимаю тебе это не нужно, стало быть нет смысла его использовать. Создать контрол просто: добавляешь в проект новый элемент и в диалоговом окне выбираешь UserControl или Control. В нём надо переопределить метод OnPaint и в нём выполнить прорисовку. Фон(например оси графика) можно прорисовывать там же или в методе OnPaintBackground. А вообще по теме начни отсюда http://msdn.microsoft.com/ru-ru/library/6hws6h2t.aspx -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| xXxSataNxXx |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 25.12.2009 Репутация: 1 Всего: 1 |
А ещё лучше, чтоб не писать Drawing2D.GraphicsPath и тому подобные графические функции, перед классом формы добавь
И этот код не обязательно ставить в событие Paint... Это сообщение отредактировал(а) xXxSataNxXx - 27.2.2010, 17:37 |
||||
|
|||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Прорисовка должна выполняться или в обработчике этого события или в переопределённом методе OnPaint(в производном классе), иначе изображение не будет устойчивым и исчезнец при очередной перерисовке контрола. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| xXxSataNxXx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 25.12.2009 Репутация: 1 Всего: 1 |
Согласен, что исчезнет, но если там постоянное обновление, то все точки будут прорисовываться постоянно...
А на сколько я помню, обновление графикка будет идти со скоростью не больше 1 секунды... =0) Можно вынести точки, чтоб они хранились не в обработчике типо "Public p() as point" Это сообщение отредактировал(а) xXxSataNxXx - 27.2.2010, 18:09 |
|||
|
||||
| Pilger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 10.5.2008 Где: Германия Репутация: нет Всего: нет |
Согласен, для быстродействия в обработчике Paint лучше оставить только:
Но прислушайся к советам diadiavova. Это сообщение отредактировал(а) Pilger - 27.2.2010, 18:26 -------------------- Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
На счёт DrawPath я не думаю, что это хорошая идея, создание лишнего Disposable объекта при такой частой перерисовке - это лишние затраты ресурсов, думаю можно ограничиться DrawLines.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| ShamanK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.2.2010 Репутация: нет Всего: нет |
подскажите а как передвигать график?
к примеру есть двумерный массив с координатами точек. привязка графика к правой сторне, когда приходит новая цена мне необходимо передвинуть весь график влево на определенное число пикселей и нарисовать линию от предпоследней цены к только что пришедшей.. как это лучше сделать? удалить весь старый график ( как это делается ? ) и нарисовать новый с уже пришедшей ценой? и не будет ли при этом мерцания? или передвинуть влево старый график ( как это делается? ) и пририсовать к графику еще одну линию? Это сообщение отредактировал(а) ShamanK - 28.2.2010, 11:25 |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Двумерный массив там не нужен. Тебе понадобится одномерный массив точек(идеальным вариантом будет собственный класс, который будет представлять линию на графике и содержать коллекцию точек за какой-то промежуток времени). Всякий раз при прорисовке контрола тебе надо будет нарисовать оси и прочие фоновые дела, после чего брать точки из этого массива(класса), который будет объявлен в контроле как внутренне поле и рисовать линию по этим точкам. Иными словами для того чтобы всё сдвинуть придётся перерисовать всё заново.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| ShamanK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.2.2010 Репутация: нет Всего: нет |
diadiavova, а можно хотябы небольшой пример. ибо то что вы написали мне понятно по логике а вот по умению написания вообще нихрена не понял..
если вас не затруднит небольшой пример такого класса, как это содержать коллекцию точек? оси и прочие дела не нужны )) как объявить массив (класс) как внутреннее поле контрола? мнеб самый простой примерчик чтобы "догнать" как это все происходит. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
ShamanK, я набросал как примерно может выглядеть упомянутый класс, но сразу хочу оговориться: этот код не для копипасты, разберись как он устроен и приспособь к своей задаче. Общий принцип работы примерно следующий:
В экземпляр класса добавляются пары <Момент времени;Значение>(для них создана специальная структура). Экземпляр удерживает некоторое количество таких элементов, которое соответствует заданному промежутку времени(по умолчанию я задал удерживать все значения за последнюю минуту) и всякий раз при обновлении все более ранние элементы удаляются. Так же можно задать диапазон значений, который будет отображаться в контроле. Для преобразования пары "время-значение" в точку есть две функции, которые тебе придётся реализовать самому и возможно для их поддержки понадобятся дополнительные свойства. Ну и наконец есть функция, которая будет выдавать массив точек для отображения. В своём контроле объявишь переменную, которая будет держать такой объект и при прорисовке контрола используй его данные. Надеюсь разберёшься.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
![]()
|
| Правила форума VB .NET | |
|
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |