|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Создание на Delphi компонентов с непрямоугольной областью реакции на события мыши |
|
Delphi - Создание на Delphi компонентов с непрямоугольной областью реакции на события мыши
|
Старожил Сообщения: 174 |
Мне надо на дельфях сделать компоненты в стиле автокада типа линия, ломаная линия сплайн и т.д., но не просто нарисовать, а чтоб они были обьектами, их можно было бы зацепить мышей и перетащить, изменить и т.д..
Подскажите как это реализовать, плиз! ОЧЕНЬ НАДО!!! |
|
Отправлено: 22:16, 05-05-2007 |
Новый участник Сообщения: 12
|
Профиль | Отправить PM | Цитировать ну и зделай их объектами.
Создай класс у которого будут свойства описывающие твою кривую а также rect описывающий область в которой нарисована эта кривая. затем в событии нажатия кнопки мыши проверяешь координаты, не попала ли она в область описанную в свойстве rect если попала то в событии движения мышки смещаеш координаты rect в соответствии с координатами передвижения мышки. ну а в тонкостях думаю разберёшся. незабудь перерисовать объект когда отпутишь мышку |
Отправлено: 22:07, 25-11-2007 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 174
|
Профиль | Отправить PM | Цитировать ОК! а когда такая ситуация, что таких обджектов куча (как в автокаде) и тот который получил событие считает что не он его должен обработать, как ему передать событие "нижнему" по зет порядку обьекту, а тот может быть передаст его еще более "нижнему" или сам обработает!?
|
Отправлено: 10:34, 26-11-2007 | #3 |
Старожил Сообщения: 435
|
Профиль | Отправить PM | Цитировать Тогда наверное разумно ввести понятие слоя. И делать так чтобы в одном слое кривые (объекты) не накладывались друг на друга.
Как вариант можно посмотреть как это реалиазовано в каком нибудь открытом векторном редакторе. И здесь же я так понимаю у вас еще встанет проблема сохранения всего этого в файл для последующего редактирования. Cледовательно вам прийдется либо избретать свой формат, либо брать уже готовый открытый векторный и смотреть как это реализовано там. P.S. А зачем вам это нужно, коль не секрет??? |
------- Отправлено: 14:05, 26-11-2007 | #4 |
Новый участник Сообщения: 12
|
Профиль | Отправить PM | Цитировать Не ребят ну всё достаточно просто. Не могут же области перекрывать другдруга полностью достаточно попасть в область не занятую другими объектами. а если же перекрыли то не обессутьте оттащите объект в сторону и занимайтесь нижним. а понятие слоя обязательно. У тебя должен быть масив объектов. перебирая его в событиях ты и будишь манипулировать объектами. а положение в этом мосиве и будет определять уровень слоя по принципу последний элемент верхний слой. можно реализовать функцию перемещения слоя вверх вниз. по такому принцыпу помоему построены все редакторы.
удачи в разработке былобы интересно посмотреть что получиться в итоге |
|
Отправлено: 17:28, 26-11-2007 | #5 |
Старожил Сообщения: 174
|
Профиль | Отправить PM | Цитировать Цитата BlackEric:
Как вариант есть идея создать холст, на нём рисовать, но чтоб холст, опрашивая свои объекты (линии, кривые и т.д.) сам принимал решение за то с каким контролом надо работать. Единственное что мне не очень понятно то то как организовать перерисовку нужной части холста не мучаясь с перерисовкой всего холста... Что посоветуете? Цитата BlackEric:
Как вариант есть идея создать холст, на нём рисовать, но чтоб холст, опрашивая свои объекты (линии, кривые и т.д.) сам принимал решение за то с каким контролом надо работать. Единственное что мне не очень понятно то то как организовать перерисовку нужной части холста не мучаясь с перерисовкой всего холста... Что посоветуете? |
||
Отправлено: 19:42, 01-12-2007 | #6 |
Старожил Сообщения: 435
|
Профиль | Отправить PM | Цитировать Если на VCL - то я бы попробовал использовать PaintBox. Там можно без особых проблем перерисовывать часть изображения.
Т.е. там можно копировать область с заданными прямоугольными координатами. Если же нужны градиентные заливки, текстуры и прочее, то я бы смотрел в сторону OpenGL/DirectX. Есть не плохие книги Краснова по работе с OpenGL/DX из Delphi. |
------- Отправлено: 13:16, 02-12-2007 | #7 |
Старожил Сообщения: 174
|
Профиль | Отправить PM | Цитировать Ок! Спасибо всем! Буду пробовать!
|
Отправлено: 16:34, 02-12-2007 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
EventID - Уведомление Ист. события: HHCTRL Категория события: Отсутствует. Код события: 1903 | cleric1985_n | Устранение критических ошибок Windows | 7 | 27-11-2015 16:14 | |
Delphi - Delphi, Скрытие компонентов через INI. | androidz | Программирование и базы данных | 4 | 25-05-2009 05:40 | |
[решено] Кроссброузерное создание обработчика события | benya | Вебмастеру | 4 | 21-12-2006 13:40 | |
Создание компонентов в C++ Builder. | XCodeR | Программирование и базы данных | 3 | 08-08-2005 09:41 | |
Delphi - Delphi | События при создании формы | riddler | Программирование и базы данных | 1 | 05-03-2005 13:16 |
|