Проблема в том, что у меня на форме должны быть активные элементы, по нажатию которых происходило нечто...
Но, рисунки объектов неправильной формы, т.е. не прямоугольные и не квадратные...
например параллелограммы и параллелепипеды.
КАК ???
Да и формы самих картинок не знаю как сделать по их контуру. В Фотошопе чтоль?
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1.Caption ="координаты указателя (" & X & ", " & Y & ")"
Хакер писал(а):А квадраты не является частным случаем прямоугольника?
ALX_2002 писал(а):создавать регионы для этих объектов и проверять API'шной функцией PointInRgn ( как то так она называлась ) принадлежность точки (координат курсора) региону.
Неа!Saturn.65 писал(а):А если попробовать ...
Mikle писал(а):параллельно с Image с прозрачным цветом хранить невидимую Picture с таким же изображением и по событию Image.MouseDown опрашивать Picture.Point с соответствующих координат и проверять цвет на прозрачность.
А если два изображения окажутся рядом и наложатся?
пытаюсь сделать карту района с активными (по нажатию) объектами - зданиями.
Здания, как сами понимаете, не все прямо стоят, да и размерами разные.
Хакер писал(а):Ээээ...мм..м.. Прости? Каким образом здания могут наложиться друг-на-друга? Угол одного здания будет построен на угле крыши другого, да?
А вообще - Image-ы не нужны тебе. Рисуй всё просто, как графику а затем отдельно разбирайся с кликами.
Насколько я понял, ты предлагаешь [1] на форме с фоновым рисунком проверять координаты курсора на соответствие их координатам зданий[2]?
Но, позвольте, у одного здания порядка двух-трёх сотен пикселей в периметре (не говоря уже об внутренних), перемножить это всё на четыре -пять десятков зданий... Даже если ЭТО всё собрать в массивы, всё равно получается мартышкин труд, который я к пенсии закончу.
Хакер писал(а):1. Периметр измерять в пикселях - это оригинально.
2. Что всё "ЭТО" ты собрался "собирать в массивы" и зачем?
Хакер писал(а):yojik5_67
1) Зачем вообще тебе периметр. К чему он тебе?
2) Исключи из этой схемы массив. Потому что твоя картинка - уже двухмерный массив. Зачем плодить двухмерные массивы, и при этом изобретать ещё какие-то сложные схемы порождения одного массива от другого?
tyomitch писал(а):Можно же создать юзерконтрол, и засунуть ему в MaskPicture что душе угодно.
Те же регионы, только гораздо нагляднее и проще.
Или я чего-то пропустил?
yojik5_67 писал(а):Если есть дельный совет, большая просьба пиши с примерным синтаксисом (или хотя бы по русски и поконкретней, попонятней) или где прочесть, ссылку, плиз.
tyomitch писал(а):netdemon, цикл с GetPixel -- это очень плохо и медленно. Тем более, что более простые и быстрые способы есть.
А ещё мне не нравится наличие урла на твоей новой аватаре. Если тебя не затруднит его замазать, буду благодарен.
tyomitch писал(а):Да гонял я все эти циклы с GetPixel. Даже писал свой вариант, который быстрее стандартного в несколько раз, и выкладывал его здесь на форуме. Но я вновь спрашиваю: зачем вся эта премудрость, когда можно обойтись стандартными встроенными средствами VB?
Что аватар был одобрен одним из членов администрации, я в курсе.
netdemon писал(а):Ему нужен рабочий вариант. Я дал ему его. Пускай пробует, набирается опыта. Я ему и на Ассемблере могу тоже самое сделать, но ему это нафиг сейчас не нужно.
tyomitch писал(а):netdemon писал(а):Ему нужен рабочий вариант. Я дал ему его. Пускай пробует, набирается опыта. Я ему и на Ассемблере могу тоже самое сделать, но ему это нафиг сейчас не нужно.
Гы, какие понты
Давай на ассемблере, мне интересно поглядеть
'в модуле
Public Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
'в программе
q = GetPixel (GetDC(0), x, y)
Имелось в виду .hWndC контроллом, у которого нет свойства hDC (например с кнопкой) - GetDC(MyCommandButton.hDC).
Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 48