Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Создание на Delphi компонентов с непрямоугольной областью реакции на события мыши (http://forum.oszone.net/showthread.php?t=83619)

Andrik 05-05-2007 22:16 583531

Создание на Delphi компонентов с непрямоугольной областью реакции на события мыши
 
Мне надо на дельфях сделать компоненты в стиле автокада типа линия, ломаная линия сплайн и т.д., но не просто нарисовать, а чтоб они были обьектами, их можно было бы зацепить мышей и перетащить, изменить и т.д..
Подскажите как это реализовать, плиз! ОЧЕНЬ НАДО!!!

daddysam 25-11-2007 22:07 685170

ну и зделай их объектами.
Создай класс у которого будут свойства описывающие твою кривую
а также rect описывающий область в которой нарисована эта кривая.
затем в событии нажатия кнопки мыши проверяешь координаты, не попала ли она в область описанную в свойстве rect
если попала то в событии движения мышки смещаеш координаты rect в соответствии с координатами передвижения мышки.
ну а в тонкостях думаю разберёшся.
незабудь перерисовать объект когда отпутишь мышку

Andrik 26-11-2007 10:34 685343

ОК! а когда такая ситуация, что таких обджектов куча (как в автокаде) и тот который получил событие считает что не он его должен обработать, как ему передать событие "нижнему" по зет порядку обьекту, а тот может быть передаст его еще более "нижнему" или сам обработает!?

BlackEric 26-11-2007 14:05 685501

Тогда наверное разумно ввести понятие слоя. И делать так чтобы в одном слое кривые (объекты) не накладывались друг на друга.

Как вариант можно посмотреть как это реалиазовано в каком нибудь открытом векторном редакторе. И здесь же я так понимаю у вас еще встанет проблема сохранения всего этого в файл для последующего редактирования. Cледовательно вам прийдется либо избретать свой формат, либо брать уже готовый открытый векторный и смотреть как это реализовано там.

P.S. А зачем вам это нужно, коль не секрет???

daddysam 26-11-2007 17:28 685660

Не ребят ну всё достаточно просто. Не могут же области перекрывать другдруга полностью достаточно попасть в область не занятую другими объектами. а если же перекрыли то не обессутьте оттащите объект в сторону и занимайтесь нижним. а понятие слоя обязательно. У тебя должен быть масив объектов. перебирая его в событиях ты и будишь манипулировать объектами. а положение в этом мосиве и будет определять уровень слоя по принципу последний элемент верхний слой. можно реализовать функцию перемещения слоя вверх вниз. по такому принцыпу помоему построены все редакторы.

удачи в разработке былобы интересно посмотреть что получиться в итоге

Andrik 01-12-2007 19:42 688574

Цитата:

Цитата BlackEric
P.S. А зачем вам это нужно, коль не секрет??? »

Да именно надо создать небольшой векторный графический редактор. Типа рисовать линии, кривые с возможностью изменять масштаб.

Как вариант есть идея создать холст, на нём рисовать, но чтоб холст, опрашивая свои объекты (линии, кривые и т.д.) сам принимал решение за то с каким контролом надо работать. Единственное что мне не очень понятно то то как организовать перерисовку нужной части холста не мучаясь с перерисовкой всего холста... Что посоветуете?

Цитата:

Цитата BlackEric
P.S. А зачем вам это нужно, коль не секрет??? »

Да именно надо создать небольшой векторный графический редактор. Типа рисовать линии, кривые с возможностью изменять масштаб.

Как вариант есть идея создать холст, на нём рисовать, но чтоб холст, опрашивая свои объекты (линии, кривые и т.д.) сам принимал решение за то с каким контролом надо работать. Единственное что мне не очень понятно то то как организовать перерисовку нужной части холста не мучаясь с перерисовкой всего холста... Что посоветуете?

BlackEric 02-12-2007 13:16 688894

Если на VCL - то я бы попробовал использовать PaintBox. Там можно без особых проблем перерисовывать часть изображения.
Т.е. там можно копировать область с заданными прямоугольными координатами.

Если же нужны градиентные заливки, текстуры и прочее, то я бы смотрел в сторону OpenGL/DirectX.
Есть не плохие книги Краснова по работе с OpenGL/DX из Delphi.

Andrik 02-12-2007 16:34 688961

Ок! Спасибо всем! Буду пробовать!


Время: 06:48.

Время: 06:48.
© OSzone.net 2001-