![]() |
|
![]() ![]() ![]() |
|
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
Вопрос такой. Допустим на канве нарисован некий объект. Поверх него создан еще один объект, скажем в виде стрелки. Как можно стереть эту стрелку, неповредив нижележащий объект?
|
|||
|
||||
Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
имхо канва перерисовывает, поэтому нужно создать новый объект (типа канвы) и передвигать ее.
-------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Предварительно скопировать квадратик такого размера как стрелка на битмап, а потом, когда нужно восстановить, то нарисовать битмап обратно туда где он был.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 1 Всего: 92 |
можно сконструировать свое окно, регион ему в виде стрелки установить, потом можно работать как с обычным окном. Не знаю правда как в Билдере реализуется. |
|||
|
||||
Glorius |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
Я рассматривал такой вариант, но это решение очень громоздкое какое-то. таких стрелочек может быть много, нужно постоянно, перед вставкой очередной стрелки запомнать тот участочек канвы, создать ассоциацию именно с этой стрелкой...хотелось бы решение попроще. Добавлено через 1 минуту и 38 секунд
Я могу сделать окошко ввиде стрелки...надо подумать, но опять же как-то это через ж..у по-мойму)) Добавлено через 2 минуты и 56 секунд
А если у меня 25 таких стрелок, то осздавать 25 холстов? И еще немного не догнал методу создания новой канвы... |
||||||
|
|||||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
В таких случаях перерисовывают всю картинку целиком это быстрее чем восстанавливать много мелких каритнок. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 1 Всего: 92 |
через ж.. или нет понятно только тебе, так как ты один знаешь условие задачи. Я предложил альтернативу, выбор за тобой. Если тебе нужно просто программно двигать свои стрелки, то создание окна для этого, возможно(!), перебор, но если нужен еще какой-либо функционал (реагирование на клавиатуру, мышь, еще что нить) то этот вариант избавит от изобретения многих велосипедов. Кстати, может ты просто не правильно реагируешь на слово "окно", в курсе что все контролы (кнопки, комбо-боксы и пр.) по сути - окна? Возьмем тот же static-text (не знаю как в Билдере правильно называется) - получается для вывода строки текста, мы создаем целое окно! - это тоже через ж.. придумали? Это сообщение отредактировал(а) zkv - 23.6.2007, 16:32 |
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
Я поясню тогда задачу. На канве компонента TImage я создаю расчетную схему балки. Балка - это прямая жирная линия, она никогда не меняется. Нагрузка на балку двух типов - сосредоточеная сила в виде стрелки и распределенная нагрузка в виде тонкой горизонтальной прямой линии (длиной, соглосно действующей нагрузки) и от этой линии вниз идут маленькие стрелочки. Так вот большие стрелки сосредоточенных сил могут и будут пересекаться с распределенной нагрузкой. Я хочу сделать так, чтобы пользователь мог удалять ошибочно введенные нагрузки без ущерба для остального рисунка. Прихожу к выводу, что нужно постоянно перерисовывать весь рисунок в таком случае. |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
что через ж а что нет определяется очень легко: реализуем самый простой вариант (минимум кода) -- а именно перерисовку всего окна. если при таком варианте нет заметных морганий -- останавливаемся на этом варианте. если есть -- реализуем другой.
кстати. создать ассоциированные битмапы -- не так уж и сложно: создаем постой битмап и кладем его в map'у (с id == id стрелки (стрелка should be классом (хотя можно и ее указатель использовать...)) -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
hunter, похоже это действительно самый правильный вариант, поскольку графической информации должно быть не так уж и много. Но меня еще интересует и вопрос перемещения графических объектов мышкой (это из другой программы). Как это лучше делать? |
|||
|
||||
Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 18 Всего: 154 |
Если нужно быстро перерисовать часть изображения, можно использовать Xor. Сначала рисуешь фон, затем устанавливаешь ...->Canvas->Pen->Mode = pmXor и рисуешь стрелку. Когда надо перерисовать, сначала рисуешь стрелку ещё раз (Pen->Mode = pmXor), после этого остаётся только фон, затем рисуешь её в другом месте.
|
||||
|
|||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
а вот для перемещения уже желательно переходить на классы: тогда (при опускании кнопки) просто пробегаем по вектору стрелок и смотрим лежит ли точка в пределах стрелки (метод класса "стрелка") если лежит -- при перемещении мыши задаем стрелке новые координаты и перерисовываем экран.
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
Hunter, спасибо.
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |