![]() |
Модераторы: diadiavova, gambit |
![]() ![]() ![]() |
|
percilacus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 21.8.2009 Где: RemoteDetent Репутация: нет Всего: нет |
Здравствуйте!
Помогите, пожалуйста, устранить мерцание при рисовании на форме. Перепробовал все методы в т.ч. двойную буферизацию, Control.SetStyle но ничего не помогает.
|
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Ьой пример сильно отличается от твоего, но советую разобраться. Что ты хотел делать левой и правой кнопкой я не понял, поэтому упростил(только левая работает). Базовый класс Shape создал на случай, если кроме линий понадобиться ещё что-то. С двойной буферизацией сам смотри нужна она тебе или нет
Немного подправил код, так вроде лучше. Это сообщение отредактировал(а) diadiavova - 21.8.2009, 22:44 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
percilacus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 21.8.2009 Где: RemoteDetent Репутация: нет Всего: нет |
diadiavova, Глубоко не вникал но сразу же ошибка вылетает на этой строчке:
16: Me.activeShape.SetMousePoint(e.Location) зы: На заре на столе Разноцветны стёклышки Разноцветны тряпочки- Непонятно ни хрена. +1 ![]() |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Когда менял код от руки, случайно удалил нужную строку ![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
percilacus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 21.8.2009 Где: RemoteDetent Репутация: нет Всего: нет |
Все равно мерцает хотя и не так
Я того же эффекта добивался вводя статик переменную в тело процедуры, тем самым пореже вызывая злополучный Invalidate
Как же тогда, скажем, в AutoCad e не мерцает совсем? Пусть он сделан не на бейсике, но способ значит имеется! А потому и в бейсике должен иметься ![]() |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
У меня ничего не мерцает, и если ты код не менял, то и у тебя не должно.
Присоединённый файл ( Кол-во скачиваний: 7 ) ![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
percilacus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 21.8.2009 Где: RemoteDetent Репутация: нет Всего: нет |
Ultimate
![]() |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Ну теперь хотябы стало ясно, что ты хотел сделать.
![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
percilacus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 21.8.2009 Где: RemoteDetent Репутация: нет Всего: нет |
То был плохой вариант
Вот
![]() |
|||
|
||||
Pilger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 10.5.2008 Где: Германия Репутация: нет Всего: нет |
Ошибка при нажатии правой, когда не рисуешь^^
Это сообщение отредактировал(а) Pilger - 30.8.2009, 15:57 -------------------- Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert. |
|||
|
||||
percilacus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 21.8.2009 Где: RemoteDetent Репутация: нет Всего: нет |
Out Of Memory что-ли?
Это баг такой в VB. Если новый кусочек ломаной начинаешь рисовать то иногда вылетает. Отлаживать надо. ![]() ![]() |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
VB тут не при чём. Ты изначально пошёл не по тому пути. Даже если отладишь и найдёшь проблему, то при попытке расширить возможности программы столкнёшься с кучей новых "багов". Всё, что ты делаешь уже давным давно придумано и реализовано. Не могу сказать, что моя реализация идеальна, но тут важен принцип. Привожу рабочий пример, логика прорисовки немного изменена, поскольку тут она выполняется в несколько кликов, но так просто добавил к шейпу новый производный класс и всё рисует. И если понадобится ещё какие-нибудь фигуры рисовать, то проблем с этим не будет, потому что прорисовка в самих фигурах выполняется, а не в форме, а форма только управляет процессом.
Старый код(в виде класса Line трогать не стал). -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
Pilger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 10.5.2008 Где: Германия Репутация: нет Всего: нет |
Да нет. Там еще логическая ошибка была.
при нажатии правой кнопки не в момент рисования происходит ошибка. Он пытается удалить объект, которого нет. Надо еще проверять If Drawing = True. Однако Out of Memory тоже часто вылазит. Это сообщение отредактировал(а) Pilger - 30.8.2009, 21:36 -------------------- Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert. |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Если выскакивает исключение, то ясное дело, что ошибка была. Не факт, что у меня её нет. Я говорю о гибкости подхода. О том, что расширяя возможности программы можно такую кашу получить, что исправить можно будет только полностью переписав код. Есть стандартные подходы к выведению графических элементов в контролах, можно привести ряд примеров из стандартных библиотек. Эти подходы выработаны практикой и пока ничего лучше ещё не придумали. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
Pilger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 10.5.2008 Где: Германия Репутация: нет Всего: нет |
В твоем коде подобной ошибки не было. Хороший код
![]() Единственное отличие - в его коде при нажатии на правую кнопку последняя линия убирается, а у тебя оставляется, но это всё мелочи. Это сообщение отредактировал(а) Pilger - 30.8.2009, 23:22 -------------------- Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert. |
|||
|
||||
![]() ![]() ![]() |
Правила форума VB .NET | |
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |