Главная страница
    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.012 c
14-1133149077
Nic
2005-11-28 06:37
2005.12.18
С днём рождения 28 ноября!


2-1133494641
dust
2005-12-02 06:37
2005.12.18
сколько память моя програ в


14-1133014623
Pavel__
2005-11-26 17:17
2005.12.18
Уход за жд


3-1130769931
Asail
2005-10-31 17:45
2005.12.18
Вопрос по работе с датой и временем в SQL-запросе.


2-1133213003
Fl@sh
2005-11-29 00:23
2005.12.18
Связь между двумя таблицами программно, как??





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский