Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1133254949
Mike Kouzmine
2005-11-29 12:02
2005.12.18
Проблема с WinXP Prof.


2-1132786540
Дева
2005-11-24 01:55
2005.12.18
CommaText


2-1133433950
linox
2005-12-01 13:45
2005.12.18
нужно кинуть таблицу (2, 12) в WORD


2-1133512097
MakNik
2005-12-02 11:28
2005.12.18
MessageBox


4-1129470232
Svin
2005-10-16 17:43
2005.12.18
ReadFile





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский