![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
VingradFan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 477 Регистрация: 30.1.2006 Где: Москва Репутация: нет Всего: 3 |
Всех приветствую и прошу помощи. Сразу скажу, что исходники в приложении.
Начинаю писать простейший графический редактор и для начала попробовал рисовать прямые. "Работает" все так: нажимается кнопка мыши, определяются координаты начала луча. Пока кнопка нажата, на дополнительном битмапе (buffer) отрисовывается линия. Как только кнопка отпущена, результат переносится в основной имиджБокс. Так вот два вопроса: 1. Почему пока я не отпущу мышь, начерченная линия не видна, т.е. не показывается результат работы buffer.Canvas.LineTo(x,y); У меня было предположение, что имиджБокс лежит выше буфера на форме, поэтому последнего вообще никогда не видно. Соответственно, пытался дописыват image_box.Hide по нажатию кнопки и image_box.Show по ее "отжатию", но результатов это не принесло... 2. Почему после ресайза формы все, что было нарисовано на канве имиджБокса стирается??? Спасибо за помощь. Присоединённый файл ( Кол-во скачиваний: 13 ) ![]() -------------------- Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу... |
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 6 Всего: 27 |
Во первых. Не отображается потому, что ты рисуешь в объекте TBitmap, который размещен не на форме, а просто в памяти. Конечно его не видно. И появляется прямая только после копирования на PaintBox (кстати, не имиджБокс, а пэинтБокс).
Исчезает потому, что PaintBox не отслеживает изменение своих размеров. Для рисования используй не PaintBox, а TImage. эта проблема уйдет А чтобы отображалась линия, ты должен как минимум копировать её в процедуре onMouseMove. |
|||
|
||||
niteo |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 23.11.2006 Где: Брянск Репутация: нет Всего: 1 |
Не выводишь содержимое своего буфера в ПаинтБокс. Посмотри ты только по отпусканию кнопки мыши это делаешь. Решение: paint_box.Canvas.CopyRect(.....................) Но. У тебя не будут затираться линии после отрисовки, они будут оставаться на канве. Рисуй по ним снова цветом фона.
Потому что при ресайзе твоим контролам приходит сообщение виндовс WP_PAINT. Контрол после этого перерисовывает себя. Решение: Выводи содержимое буфера в ПаинтБокс после WP_PAINT. И конечно поиск --------------------
Мне чужого лишнего не нада.Ешь ананасы, рябчиков жуй,день твой последний приходит, буржуй... |
||||
|
|||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
решение не верное, перекрестные линии будут с дырками. нужно иметь два буфера, на одном "закрепленное" изображение (т.е. когда мышка отпущена и линия нарисовалась), на втором: "закрепленное" изображение + рисование текущей ситуации (ткнули мышкой и тянем линию). Как только протянули линию и отпустли - она рисуется на первом буфере, и им обновляется второй. |
|||
|
||||
VingradFan |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 477 Регистрация: 30.1.2006 Где: Москва Репутация: нет Всего: 3 |
Спасибо всем за ответы
![]()
Хаха... Если бы вы знали, как я был удивлен, когда не нашел у него свойств width, height, visible, и т. п. ![]() Теперь все ясно...
Спасибо, помогло ![]()
За мышкой будет оставаться шлейф из линий, очень красивый, но не нужный ![]() Про идею с двумя бУферами я читал, надеялся реализовать проще, похоже, нереально ![]() Еще раз всем спасибо! PS тему пока не закрываю... -------------------- Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу... |
||||||
|
|||||||
VingradFan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 477 Регистрация: 30.1.2006 Где: Москва Репутация: нет Всего: 3 |
С двумя буферами все получилось, спасибо за советы. На всякий случай, выкладываю рабочие исходники.
И последний вопрос. AntonN, Вроде бы код идеален? Или можно что-то где-то оптимизировать?
Присоединённый файл ( Кол-во скачиваний: 23 ) ![]() -------------------- Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу... |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
да вроде код как код...
но я бы сделал так:
|
|||
|
||||
VingradFan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 477 Регистрация: 30.1.2006 Где: Москва Репутация: нет Всего: 3 |
AntonN, Спасибо!
Это сообщение отредактировал(а) VingradFan - 23.9.2009, 22:14 -------------------- Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |