Как сделать Image в форме рисунка?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 02.10.2007 (Вт) 0:28

iGrok писал(а):
C контроллом, у которого нет свойства hDC (например с кнопкой) - GetDC(MyCommandButton.hDC).
Имелось в виду .hWnd

Кстати, если уж тебе так понравились регионы, есть ф-ция PtInRegion, проверяющая соответствие координат точки определенному региону..
Тогда тебе нужен вообще одномерный массив - с номерами регионов...


Ууу... Эт ж тогда памяти сколько занято буит .. :(

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.10.2007 (Вт) 1:21

В сотни раз меньше, чем при использовании трёхмерного массива.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

yojik5_67
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 24
Зарегистрирован: 25.09.2007 (Вт) 17:52

Сообщение yojik5_67 » 06.10.2007 (Сб) 19:20

Признаю, с массивами я перемудрил!!!

Тогда, прошу опять помощи, уже с регионами.
Чего-нибудь внятного по-русски про регионы эти я не нашёл. Отрывочные упоминания на форуме понимания сути не добавили, да и в других местах нет вразумительных пояснений. В книгах, имеющихся у меня нет такого в помине.
Так помогите же, пожалуйста. А то я на грани паники и срыва.

Имеются текстовые файлы с координатами объектов на карте (здание-файл, 34 шт.).
1 - как задать регионы с координатами, перечисленными в файлах (прилагаю)
2 - не понимая сути, не пойму, как проверять соответствие координат клика координатам региона
3 - проверять соответствие координат клика координатам регионОВ:
Код: Выделить всё

If коорд.клик = коорд.регион1 Then ...
If коорд.клик = коорд.регион2 Then ...
If коорд.клик = коорд.регион3 Then ...
... 34 здания
???

Но, ведь это не рационально. Или другого пути нет?

4 - где искать информацию по регионам (русскую). Про существование в природе книг по API я знаю. В данный момент негде взять.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 06.10.2007 (Сб) 19:26

yojik5_67
Регион это упорядоченный список координат точек.
Допустим:
10;10
100;10
100;100
10;100

- это квадратный регион. Твои здания надо представить в виде регионов, т.е. тебе необходимы всего лишь координаты углов зданий (у зданий 4 угла - 4 элемента массива. Сравни с идеей о трёхмерных массивах. Чувствуешь экономию?)


1) Хранить координаты в бинарном виде, вместо текстового. Установить сплиттинг на здания. Или это у тебя весь файл для одного здания? :shock:

2) А я не пойму смысл фразы "соответствие координат клика координатам региона"

3) См. пункт 2.
Код на первый взгляд бредов и непонятен. На второй - просто непонятен.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

yojik5_67
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 24
Зарегистрирован: 25.09.2007 (Вт) 17:52

Сообщение yojik5_67 » 06.10.2007 (Сб) 19:46

Хакер писал(а):- это квадратный регион. Твои здания надо представить в виде регионов, т.е. тебе необходимы всего лишь координаты углов зданий (у зданий 4 угла - 4 элемента массива. Сравни с идеей о трёхмерных массивах. Чувствуешь экономию?)

- Здания у меня не только квадратные (если помнишь - я выкладывал примерное изображение). Но и опять же как?
- Экономию чувствую, согласен, бредил. Но почему-то при обдумывании будущего проекта они (массивы) мне сразу въелись в башку, и никак не мог понять твоих упрёков, что это бред. Теперь разобрался.
Хакер писал(а):Хранить координаты в бинарном виде, вместо текстового. Установить сплиттинг на здания.

Можно помедленней?
Хакер писал(а):Или это у тебя весь файл для одного здания?

Да. Это результат работы програмки-сканера. Здание-файл, здание-файл... 34 раза.
Я сам в шоке, но уж что есть...
Хакер писал(а):А я не пойму смысл фразы "соответствие координат клика координатам региона"

Это я так пытаюсь доходчиво (как сам люблю чтоб мне объясняли) сформулировать выполнения команды или фрагмента программы.
Расшифровываю: в момент клика у курсора есть координаты Х и Y. Надо проверить является ли точка с координатами Х и Y частью какого-либо региона.
Хакер писал(а):Код на первый взгляд бредов и непонятен. На второй - просто непонятен.

Вот я и спрашиваю: КАК?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 06.10.2007 (Сб) 19:56

- Здания у меня не только квадратные (если помнишь - я выкладывал примерное изображение). Но и опять же как?

Да хоть 32-угольные. Какая разница?

Можно помедленней?

А именно?

Да. Это результат работы програмки-сканера. Здание-файл, здание-файл... 34 раза.
Я сам в шоке, но уж что есть...

Фтопку прогу-сканер как тупиковый путь. Расставляй точки регионов ручками.

Это я так пытаюсь доходчиво (как сам люблю чтоб мне объясняли) сформулировать выполнения команды или фрагмента программы.

У тебя это не получается.

Вот я и спрашиваю: КАК?

Что КАК? Как проверять соответствие координат клика координатам
региона
?
Я не в состоянии ответить на твой вопрос, потому что я не понимаю смысл фразы "соответствие координат клика координатам
региона".
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 06.10.2007 (Сб) 19:59

Тут походу появилась очень важная часть, а именно:

Расшифровываю: в момент клика у курсора есть координаты Х и Y. Надо проверить является ли точка с координатами Х и Y частью какого-либо региона.


Пример того, как можно определить, попадает ли точка в регион или нет я недавно выкладывал. (Там пример не конкретно этого, это является обязательностью частью того, что демонстрирует тот пример)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

yojik5_67
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 24
Зарегистрирован: 25.09.2007 (Вт) 17:52

Сообщение yojik5_67 » 06.10.2007 (Сб) 20:27

Пример того, как можно определить, попадает ли точка в регион или нет я недавно выкладывал.

Я так понимаю, что это закладывание координат вершин региона (?):
Код: Выделить всё
f.AddVertex 0, -258.5752
f.AddVertex 44.91019, -222.6913
f.AddVertex 66.86628, -169.9208
f.AddVertex 84.83035, -131.9261...

- Здания у меня не только квадратные

Да хоть 32-угольные. Какая разница?

Прикладываю увеличенное изображение одного из зданий. Красные пикселы (142!!! шт.) - это периметр (о котором я упоминал в начале темы) или как ты говоришь "хоть 32" углы будущего региона.
Фтопку прогу-сканер как тупиковый путь. Расставляй точки регионов ручками.

Ты всё ещё настаиваешь на этом? Напоминаю: 142 угла (пиксела, как угодно назови) одного здания помножить на хотя бы 15 таких же...
Можно помедленней?

А именно?

- Как хранить координаты в бинарном виде, вместо текстового.
- сплиттинг на здания. - это что такое и как его устанавливать?
Последний раз редактировалось yojik5_67 06.10.2007 (Сб) 20:53, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 07.10.2007 (Вс) 8:16

Я так понимаю, что это закладывание координат вершин региона (?):
Код: Выделить всё
f.AddVertex 0, -258.5752
f.AddVertex 44.91019, -222.6913
f.AddVertex 66.86628, -169.9208
f.AddVertex 84.83035, -131.9261...

"Закладывание"... хм... Если обладать знанием английского, то будет очевидно что метод "Добавить Вершину" делает именно то, что ты предположил.

___________________________________

- Здания у меня не только квадратные


Да хоть 32-угольные. Какая разница?


Прикладываю увеличенное изображение одного из зданий. Красные пикселы (142!!! шт.) - это периметр (о котором я упоминал в начале темы) или как ты говоришь "хоть 32" углы будущего региона.


Забудь к чёртовой матери про свой долбаный фигов периметр :twisted: (я уже не знаю какие эпитеты подобрать - уж настолько не к месту в твоё сознание въелся этот периметр).

В приложенной тобою картинке здание имеет 4 угла. В чём проблема?

Ты всё ещё настаиваешь на этом? Напоминаю: 142 угла (пиксела, как угодно назови) одного здания помножить на хотя бы 15 таких же...


Ты всё таки покажи мне 142-угольное здание? А лучше на снимке с Google Maps? Чтобы уж сразу в Книгу Рекордов занести такое чудо-творение архитектуры.

В скобках написано "пиксела, как угодно назови". Так вот. Здание не состоит из пикселов. Здание состоит из плит, кирпечей и прочей строительной арматуры. Тебя должны волновать лишь координаты углов здания. Тот пример будет для тебя сверх-навороченным (потому что в твём случае здания не могут вращаться друг относительно друга и менять свои размеры - а у меня всё это учитывается).


- Как хранить координаты в бинарном виде, вместо текстового.

Записывать в файл не текстовое представление чисел, а сами числа.

сплиттинг на здания. - это что такое и как его устанавливать?

Тот вопрос был бы актуален, если бы ты хранил данные для всех зданий в одном файле. Тогда сплиттер был бы тем, что разделяет данные для разных зданий в одном файле.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

yojik5_67
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 24
Зарегистрирован: 25.09.2007 (Вт) 17:52

Сообщение yojik5_67 » 07.10.2007 (Вс) 16:21

в твоё сознание въелся этот периметр. В чём проблема?

Проблема в том, что при создании моей карты я пользовался Paint'ом, и при увеличении вида картинки видел не что иное, как МНОГОугольные фигуры. Значит не прав. Ладно, чтож злиться то. Я же не специально издеваюсь, а просто заблуждался.

yojik5_67
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 24
Зарегистрирован: 25.09.2007 (Вт) 17:52

Сообщение yojik5_67 » 07.10.2007 (Вс) 18:10

CPolygon.cls из ссылки +
Module1:
Код: Выделить всё
Option Explicit

Public Meshes As Collection
' Координаты курсора:
Type POINTAPI
        x As Long
        y As Long
End Type

Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public CoordCursor As POINTAPI


Form1:
Код: Выделить всё
Option Explicit
Dim x As Long
Dim y As Long
Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
  ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
'Dim lpPoint As POINTAPI

Private Sub Form_Load()
    Set Meshes = New Collection
    Dim f As New CPolygon
'================== 24
f.AddVertex 425, 247
f.AddVertex 425, 380
f.AddVertex 472, 380
f.AddVertex 472, 247
    Meshes.Add f, "дом 24"
'==================
'Set f = New CPolygon
    'f.AddVertex _, '_
    'f.AddVertex _, '_
    'f.AddVertex _, '_
    'f.AddVertex _, '_
'Meshes.Add f, "следующий"
End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    ' клик по региону?
If GetCursorPos(CoordCursor.x, CoordCursor.y) = f Then
       Label1.Caption = "ПОЛУЧИЛОСЬ"
End Sub


If GetCursorPos(CoordCursor.x, CoordCursor.y) = f Then
Не прокатывает. Пишет "Compile error: ByRef argument type mismatch"
А как?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 07.10.2007 (Вс) 19:08

А что должно получиться?

Встречный вопрос: ты вообще понимаешь хоть чуть-чуть то, что у тебя написано?

Например, что делает GetCursorPos, что такое POINTAPI?

А главное, что ты пытаешься сделать тут:
Код: Выделить всё

If GetCursorPos(CoordCursor.x, CoordCursor.y) = f Then
       Label1.Caption = "ПОЛУЧИЛОСЬ"
End Sub
label:
cli
jmp label

yojik5_67
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 24
Зарегистрирован: 25.09.2007 (Вт) 17:52

Сообщение yojik5_67 » 07.10.2007 (Вс) 19:31

iGrok писал(а):А что должно получиться?

см. эту тему
iGrok писал(а):ты вообще понимаешь хоть чуть-чуть то, что у тебя написано?

чуть-чуть понимаю, а если что-то не так, так скажи, как надо, а не принижай тех кто меньше твоего знает.
Да, я не "бывалый", у меня нет четырёх звёздочек на аватаре, я только хочу научиться, или хотя бы доделать то, что начал, так что, пожалуйста не глумись, а помоги, если можешь
iGrok писал(а):А главное, что ты пытаешься сделать тут:
Код: Выделить всё
If GetCursorPos(CoordCursor.x, CoordCursor.y) = f Then
       Label1.Caption = "ПОЛУЧИЛОСЬ"
End Sub

проверить что всё это работает

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 07.10.2007 (Вс) 19:49

yojik5_67
Ты пишешь полную чушь, а потом просишь, чтобы если что в ней не так, то это поправили и указали как надо. Однако всё проблема в том, что это полная чушь, и в ней, собственно, нечего править.

И дело абсолютно не в том, "Бывалый" ты или нет: и бывалые, случаются, пишут чушь, и я, бывает, её пишу.

Так вот, код, в котором используется GetCursorPos абсолютно бредов. Поправить в нём что-то не представляется возможным, так же как не представляется возможным поправить что-либо в строке "Ты ывапич вирова туцак куишь?", чтобы она стала иметь какой-то смысл.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 08.10.2007 (Пн) 0:29

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

Вот что, например, значат вот эти три вещи?
Код: Выделить всё
Type POINTAPI
        x As Long
        y As Long
End Type
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public CoordCursor As POINTAPI

Если почему-то ты не догадаешься где у тебя ошибка, мы тебе подскажем. А не говорим сразу только потому, что несколько человек на этом форуме пытаются научить других пользоваться своими а не чужими думалками. Это ведь не сложно ,-)
label:
cli
jmp label

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 08.10.2007 (Пн) 19:40

Юрик.

Для тебя непонятливого задолбавшего всех предлагаю следующий вариант:

1. У тебя есть файл описывающий параметры здания (номер, адрес и т.д. не важно. Есть рисунок дома в виде какойто плоской фигуры.)
2. Я тебе выкладывал пример. Там рисунок произвольной формы. Контрол PictureBox обрезан по контуру этого рисунка.
3. Задать координаты контрола на карте- не проблема.
4 Натыкать этих контролов тоже не проблема.
5. Каждый контрол обрабатывается и у тебя получается карта на которой куча контролов обрезанных по контуру рисунков в них.
6. Это уже массив.
7. Клик на контроле вызывает событие PictureBox_Click(Index as integer)

И не надо морочить голову с кучей проверок координат и т.д.

Если есть желание, то выложи весь проект, я подскажу как сделать.

:D

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 08.10.2007 (Пн) 19:43

iGrok писал(а):Тему я смотрел. Что ты хочешь получить догадываюсь.
Я не глумлюсь, и ни сколечки не принижаю твоего знания, т.к. наверняка есть область, в которой ты знаешь больше меня. Я же просто хочу заставить тебя думать.

Вот что, например, значат вот эти три вещи?
Код: Выделить всё
Type POINTAPI
        x As Long
        y As Long
End Type
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public CoordCursor As POINTAPI

Если почему-то ты не догадаешься где у тебя ошибка, мы тебе подскажем. А не говорим сразу только потому, что несколько человек на этом форуме пытаются научить других пользоваться своими а не чужими думалками. Это ведь не сложно ,-)


А эта функция передаёт текущие координаты курсора на экране. Но никак не форме. или контроле. :D

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 08.10.2007 (Пн) 23:37

netdemon писал(а):А эта функция передаёт текущие координаты курсора на экране. Но никак не форме. или контроле. :D
Эх.. Таки ты не в теме... (((
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 09.10.2007 (Вт) 3:21

И не надо морочить голову с кучей проверок координат и т.д.


Не надо советовать делать дерьмово, netdemon. :x
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

yojik5_67
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 24
Зарегистрирован: 25.09.2007 (Вт) 17:52

Сообщение yojik5_67 » 09.10.2007 (Вт) 3:56

iGrok писал(а):Если почему-то ты не догадаешься где у тебя ошибка, мы тебе подскажем.

Во-во это и прошу
iGrok писал(а):А не говорим сразу только потому, что несколько человек на этом форуме пытаются научить других пользоваться своими а не чужими думалками. Это ведь не сложно ,-)

С некоторыми думалками у меня проблема:
мало того, что знаний-опыта нет, так ведь и с литературой беда... А думалки-то они не из форумов берутся, а из книги-источника знаний.
Приходится вот из форумов-кворумов, всякие архивы чужих придумывалок, по крохам собирать. Ест-но многого, что скопировал из чужих примеров и из API-Viewer'а я не понимаю, что-то понимаю, но на уровне интуиции. Твёрдых знаний нет.
Поэтому я и прошу конкретной подсказки, или где подсмотреть, чтоб додумать самому.

yojik5_67
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 24
Зарегистрирован: 25.09.2007 (Вт) 17:52

Сообщение yojik5_67 » 09.10.2007 (Вт) 4:06

Хакер писал(а):Ты пишешь полную чушь, и в ней, собственно, нечего править.

Так вот, код, в котором используется GetCursorPos абсолютно бредов. Поправить в нём что-то не представляется возможным

Тогда где посмотреть небредовый код? Или другим методом?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 09.10.2007 (Вт) 4:14

yojik5_67
Что значит "где посмотреть"? Код надо написать а не посмотреть где-то.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 09.10.2007 (Вт) 8:04

Блин..
Код: Выделить всё
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Объявляет ф-цию, которая определяет координаты курсора.
Она принимает ОДИН параметр. В данном случае этот параметр - типа POINTAPI. В него она и запишет координаты. Возвращает она Long с номером ошибки.

Код: Выделить всё
If GetCursorPos(CoordCursor.x, CoordCursor.y) = f Then


А вот в этом месте ты ей подсовываешь ДВА параметра. Причем типа Long. И она у тебя ругается на несовпадение типа первого параметра. Если исправить тип первого параметра она начнет ругаться на несовпадение кол-ва параметров.
Причем с чем ты ее сравниваешь - вообще не понятно. f - не определена.

Тебе же надо:
1) Получить через GetCursorPos координаты мыши
2) Поправить координаты(если необходимо)
3) Пробежаться по коллекции регионов, вызывая для каждого PtInRegion, определяя, попал ли ты мышью в какой-либо регион.
label:
cli
jmp label

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 09.10.2007 (Вт) 9:23

Хакер писал(а):
И не надо морочить голову с кучей проверок координат и т.д.


Не надо советовать делать дерьмово, netdemon. :x


А это не дерьмово, это просто. И не надо ничего придумывать этакого.
Блин дайте мне исходник. я поковыряюсь. :D

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 10.10.2007 (Ср) 6:23

Хакер
Вот так будет правильно :


Код: Выделить всё
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    ' клик по региону?
Dim isInRGN As Integer

GetCursorPos lpPoint ' Получаем координаты курсора (lpPoint AS POINTAPI)
isInRGN = PtInRegion(f, lpPoint.x, lpPoint.y) ' Проверяем принадлежит ли точка
                                               ' с координатами х,у в регионе

If isInRGN <> 0 Then  'Если функция вернула не ноль, то принадлежит.
       Label1.Caption = "ПОЛУЧИЛОСЬ"
End If
End Sub


:P
Правда это врядли что даст. А вот так получится:
Код: Выделить всё
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    ' клик по региону?
Dim isInRGN As Integer


isInRGN = PtInRegion(f, x, y) ' Проверяем принадлежит ли точка
                                               ' с координатами х,у в регионе

If isInRGN <> 0 Then  'Если функция вернула не ноль, то принадлежит.
       Label1.Caption = "ПОЛУЧИЛОСЬ"
End If
End Sub


:P


При условии что рисунок загружен в Form.Picture и Координаты вершин полностью совпадают с координатами углов домов на форме.
И f задаётся в Секции General Declarations как.

Private f as CPolygon

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 10.10.2007 (Ср) 7:29

А вот пример создания региона по вершинам.

Код: Выделить всё


Public Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long

Public Type POINTAPI
  x As Long
  y As Long
End Type




Public Const ALTERNATE = 1



Public Function CreatePolRGN(lpvertex() As POINTAPI, iVCount As Integer) As Long
 
     
CreatePolRGN = CreatePolygonRgn(lpvertex(0), iVCount, ALTERNATE)
End Function

Последний раз редактировалось netdemon 10.10.2007 (Ср) 18:31, всего редактировалось 1 раз.

yojik5_67
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 24
Зарегистрирован: 25.09.2007 (Вт) 17:52

Сообщение yojik5_67 » 10.10.2007 (Ср) 15:24

ОГРОМНОЕ СПАСИБО!!!

А как у меня задавались регионы:

Код: Выделить всё
Set Meshes = New Collection
    Dim f As New CPolygon
'================== 24
f.AddVertex 425, 247
f.AddVertex 425, 380
f.AddVertex 472, 380
f.AddVertex 472, 247
    Meshes.Add f, "дом 24"
'==================
'Set f = New CPolygon
    'f.AddVertex _, '_
    'f.AddVertex _, '_
    'f.AddVertex _, '_
    'f.AddVertex _, '_
'Meshes.Add f, "следующий"


не покатит?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.10.2007 (Ср) 15:56

yojik5_67
Регион должен задаваться так, чтобы центр попадал в действительный центр. У тебя же все числа положительные, значит центр остаётся за пределыми здания, что не хорошо. Я не делал авто-центровки. Можешь сделать её сам. Тогда этот код будет отлично работать. С другой сотороны - это малозначительное, если не используются трансформации вращения и скейлинга.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 10.10.2007 (Ср) 17:00

Влад, ну ты загнал. У него мозг не опухнет? :lol:

Какой смысл в классе СPoligon я понять не могу. Если в его коде всё закоментировано. И вообже действия непонятные. :roll:


Если пользоваться функцией, то ей простопередаёшь массив вершин типа POINTAPI , количество вершин и метод заливки. И получишь регион по вершинам. Функция сама всё сделает.
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.10.2007 (Ср) 17:48

netdemon
Простопередаёшь. Какое слово... Мне нравится...

На самом деле, виндовая функция, которую ты пропогандируешь, работает с регионами, вершины которых описываются лонгами. Это не хорошо.

Во-вторых.


Какой смысл в классе СPoligon я понять не могу.

В контексте данной задачи или вообще?
Если в его коде всё закоментировано.

Где там всё закомментировано? У меня, в моём CPolygon? Ну-ну.

И вообже действия непонятные.

Какие действия? Который производятся в моём классе? Спрашивай, я могу пояснить любое из них.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Пред.След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 3

    TopList