Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизВыделение объекта по щелчку мышки Найти похожие ветки
← →
Pavor © (2005-11-23 10:06) [0]Приветствую, уважаемые профессионалы!
Пишется программа, что-то вроде специального векторного графического редактора. В памяти элементы содержатся в динамическом массиве Items, структура следующаяtype TNode= record
x,y: integer;
end;
type TBranchType= (PLAIN, DC_EMF, DC_R);// значения для типа ветви
// PLAIN - без элементов ("закоротка")
// DC_EMF - ЭДС постоянного тока
// DC_R - резистор постоянного тока
type TItems=record
Node1,Node2: TNode;
BranchType: TBranchType;
Selected: Boolean;
end;
var Items: array of TItems;
При событии OnPaint массив сканируется и все элементы отрисовываются в соответствии со своим типом.
Вопрос в следующем: как узнать, что по объекту произведен щелчек мышкой? То есть, на входе X,Y курсора, а на выходе - установленные свойстваSelected
в массиве.
Огромная просьба описать подход, либо дать ссылку, где можно почитать материал на эту тему. Заранее спасибо.
← →
clickmaker © (2005-11-23 10:08) [1]
> Вопрос в следующем: как узнать, что по объекту произведен
> щелчек мышкой?
ТоНаЧемРисуется.OnMouseDown
ну а дальше поиск по массиву со сравнением X,Y c Node.x, y
← →
MBo © (2005-11-23 10:10) [2]Если элементов много, и форма у них может быть сложная, то удобен и быстр такой метод - все рисуется на битмапе, каждый элемент - уникальным цветом, например, цвет=индексу элемента. Затем просто проверяешь цвет в точке нажатия.
← →
Pavor © (2005-11-23 10:48) [3]2 clickmaker:
> ТоНаЧемРисуется.OnMouseDown
> ну а дальше поиск по массиву со сравнением X,Y c Node.x,
> y
Я прошу прощения, чего-то не понял: ну проверил, совпадений нет - это же значит, что курсор не попал на начало/конец ветви? А с объектом как?
2 MBo:
С цветами здорово, конечно :), но, наверное, это не подходит.
Всякие Компасы с Автокадами же работают, может кто-нить знает все-таки, как сделать?
← →
Плохиш © (2005-11-23 10:52) [4]
> Pavor © (23.11.05 10:48) [3]
> 2 clickmaker:
>
> > ТоНаЧемРисуется.OnMouseDown
> > ну а дальше поиск по массиву со сравнением X,Y c Node.
> x,
> > y
>
>
> Я прошу прощения, чего-то не понял: ну проверил, совпадений
> нет - это же значит, что курсор не попал на начало/конец
> ветви? А с объектом как?
Ты, эта, думалку включать не пробовал? Намекаю, объекты обычно кроме координат x и y ещё имеют длину и ширину, плюс ко всему могут, наверное, перекрывать друг друга.
← →
Pavor © (2005-11-23 11:16) [5]2 Плохишь:
> Ты, эта, думалку включать не пробовал? Намекаю, объекты
> обычно кроме координат x и y ещё имеют длину и ширину, плюс
> ко всему могут, наверное, перекрывать друг друга.
Пробую помаленьку, пока не заводится :)
То есть получается, все ветви составными делать (резистор = отрезок-прямоугольник-резистор), еще и счетчик "уровня" для каждой ветви... Спасибо, вроде подтолкнул, может поедет даже ;)
А у кого еще идеи есть? О:-)
← →
Pavor © (2005-11-23 11:18) [6]
> (резистор = отрезок-прямоугольник-резистор),
резистор = отрезок-прямоугольник-отрезок, тьфу ты :))))
← →
clickmaker © (2005-11-23 11:32) [7]
>
> резистор = отрезок-прямоугольник-отрезок, тьфу ты
в общем случае - регион
см. в MSDN про регионы и PtInRegion()
← →
Pavor © (2005-11-23 11:50) [8]2 clickaker:
О! Вот и ссылка! Спасибо, пойду почитаю...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.024 c