Перейти к содержимому

Фотография

MapBasic и все что с ним связаноМожет я не один такой?!


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 388

#41
Jismo

Jismo
  • Свой человек
  • 975 сообщений
Думаю вот этот пример(со справочника) тебе поможет разобраться

Include "mapbasic.def"

Declare Sub Main
Declare Sub ToolHandler

Sub Main
  Note "The ToolHandler demonstration is now in place. "
  + "Select the MapBasic tool (+) and click on a Map "
  + "to see a printout of map coordinates."
End Sub

Sub ToolHandler
  If WindowInfo( FrontWindow(), WIN_INFO_TYPE ) = WIN_MAPPER Then
	Print "X: " + Str$( CommandInfo(CMD_INFO_X) )
	Print "Y: " + Str$( CommandInfo(CMD_INFO_Y) )
	Print " "
  End If
End Sub

  • 0

#42
Conkistador

Conkistador
  • Гость
  • 33 сообщений
а что за справочник то ? Help?
что то совсем не понятно...
главный вопрос как перекрыть событие selectObject - ну это я так думаю что оно должно называться ;)

Сообщение отредактировал Conkistador: 20.05.2009, 19:21:37

  • 0

#43
Jismo

Jismo
  • Свой человек
  • 975 сообщений
Да это хелп книга пдф формата, есть еще руководство пользователя.
Кстати на какой версии МВ ты работаешь?
  • 0

#44
Conkistador

Conkistador
  • Гость
  • 33 сообщений
MB 9.5 ну и MI 9.5 в связке с Oracle11g работаю круто сказано мне бы передать одно строковое значение в библиотеку .Net и все было бы замечательно...
в принципе думаю где-то в районе Selection.Obj я найду то что мне нужно или хотя бы получу ключ чтобы в базу сходить за всем остальным, а вот как заставить его вызываться это совсем не понятно...
  • 0

#45
Jismo

Jismo
  • Свой человек
  • 975 сообщений
я чето не понял ты что литературой не пользуешься?
Вот там обчно лежит вся литра: C:\Program Files\MapInfo\Professional\Documentation

и еще что значит передать в бибилотеку строковое значение? Ты же библиотеку юзаешь чтоб работать с ней в МБ а не наоброт, или я не прав?
  • 0

#46
Conkistador

Conkistador
  • Гость
  • 33 сообщений
да литературу эту первый раз увидел, спасибо.
а по поводу того кто с кем работает: дело будет так пользователь откроет в MI таблицу с точками и при выборе любой точки необходимо получить данные связанные с этой точкой и обработать их, обработка будет происходить в форме нарисованной на .Net
  • 0

#47
Jismo

Jismo
  • Свой человек
  • 975 сообщений
ну тогда тебе просто надо создать кнопку и своб панельку, пусть пользователь как только выберет точку нажимает на кнопку и вуаля вылазиет твоя .NET форма, делов то ;)

пролистай первые 6-7 глав из руководства пользователя МВ и ты сможешь сделать то что ты хочешь
  • 0

#48
Conkistador

Conkistador
  • Гость
  • 33 сообщений
да кнопка с панелькой уже есть ;) осталось получить значение этого параметра связанного с точкой, который вылазит в панельке "Информация" и все-таки хотелось бы что бы пользователь не нажимал кнопочку на панельке после выбора точки а сразу после выбора передавался этот параметр...
я и не сомневаюсь что это просто но с MB знаком пол дня :)

пролистай первые 6-7 глав из руководства пользователя МВ и ты сможешь сделать то что ты хочешь


уже листаю :D
  • 0

#49
Jismo

Jismo
  • Свой человек
  • 975 сообщений
насчет того чтоб пользователь не нажимал на кнопочку скажу сразу не знаю ;). А чтоб нажимал знаю :)
  • 0

#50
Conkistador

Conkistador
  • Гость
  • 33 сообщений
а вот как получить доступ к полям Selection.Obj не знаешь случайно ;)?

Сообщение отредактировал Conkistador: 20.05.2009, 19:51:19

  • 0

#51
Jismo

Jismo
  • Свой человек
  • 975 сообщений
Dim o As Object
o = Selection.Obj
Dim s As Symbol
s = ObjectInfo(o, OBJ_INFO_SYMBOL)
Dim PointColor As Integer
PointColor = StyleAttr(s, SYMBOL_COLOR)
Вот таким вот образом я вытащил цвет точки, так же другими способами можешь вытащить все отсальные данные из этой точки!
Все я домой попер а то чтото зщадержался на работе сильно!
  • 0

#52
Conkistador

Conkistador
  • Гость
  • 33 сообщений
спасибо за помощь, сам бы я долго в потемках блуждал бы!
  • 0

#53
Jismo

Jismo
  • Свой человек
  • 975 сообщений
Ну чтож чем смог тем помог :), если что обращайся помогу чем смогу.
  • 0

#54
d_d_t

d_d_t
  • Завсегдатай
  • 239 сообщений

А все таки как поймать момент когда пользователь что то делает? ну типа обработчик события переопределить...


Можно тулбаттон добавить в панель инструментов MapInfo. Тогда при выборе этой кнопки и нажатии в любой области карты будет срабатывать обработчик соотв. тулбаттона.
Вот пример:

Include "icons.def"
Include "mapbasic.def"

Declare Sub Main
Declare Sub DoSomething


Sub Main
	Alter ButtonPad ID 1
		Add Separator
		Add ToolButton		
		Icon MI_ICON_MAPSYMB_24
		DrawMode DM_CUSTOM_POINT
		Cursor MI_CURSOR_CROSSHAIR
		Calling DoSomething
		HelpMsg "Нажми меня \n Нажми меня "
	Show
End Sub


Sub DoSomething
Dim x, y As Float
		If WindowInfo(FrontWindow(), WIN_INFO_TYPE) = WIN_MAPPER Then
		   x = CommandInfo(CMD_INFO_X)
		   y = CommandInfo(CMD_INFO_Y)
		   Note "DoSomething: " & Str$(x) & ", " & Str$(y)
		End If
End Sub

  • 0

#55
d_d_t

d_d_t
  • Завсегдатай
  • 239 сообщений

... и все-таки хотелось бы что бы пользователь не нажимал кнопочку на панельке после выбора точки а сразу после выбора передавался этот параметр...


При использования ToolButton, вместо PushButton как раз и не надо нажимать кнопку каждый раз при выборе точки. Достаточно один раз нажать на кнопку в начале, а затем кликать по точкам сколько душе будет угодно и каждый раз будет вызываться обработчик тулбаттона. В нем, при помощи CommandInfo извлекать координаты клика, а для нахождения объекта можно использовать функцию SearchPoint (точечные объекты ищутся с некоторым допущением по координатам)
  • 0

#56
Conkistador

Conkistador
  • Гость
  • 33 сообщений
Спасибо за пример, возможно он даже оптимальнее будет для пользователей...

я сейчас попробовал использовать SelChangedHandler, потом можно проверить является ли выбранный объект точкой с помощью

object_name = Str$(Selection.obj)
If object_name = "Point" Then ...

а потом получить данные из таблицы просто

print track.track_id	
print track.frame_id	
и дальше передавать их куда угодно.

P.S. Если у кого-то есть еще варианты хотелось бы взглянуть и на них.

Сообщение отредактировал Conkistador: 21.05.2009, 19:21:39

  • 0

#57
Conkistador

Conkistador
  • Гость
  • 33 сообщений
Возможно кому то пригодится не большое руководство составленное по данной теме...
Подключение MapInfo к .Net
Переопределение обработчика SelChangedHandler
  • 0

#58
Jismo

Jismo
  • Свой человек
  • 975 сообщений
вот пример того как правильно узнать является ли объект точкой:
If ObjectInfo(Selection.obj, OBJ_INFO_TYPE) = OBJ_TYPE_POINT Then
	'А тут пишешь что хоччешь с точкой делать :)
End If

  • 0

#59
Conkistador

Conkistador
  • Гость
  • 33 сообщений

вот пример того как правильно узнать является ли объект точкой:

If ObjectInfo(Selection.obj, OBJ_INFO_TYPE) = OBJ_TYPE_POINT Then
	'А тут пишешь что хоччешь с точкой делать :)
End If

да, такой пример правильнее
  • 0

#60
Conkistador

Conkistador
  • Гость
  • 33 сообщений
Есть еще вопрос о взаимодействии с MapInfo:
В документации есть пример как получить ссылку на запущенный экземпляр MapInfo с помощью VB,
To attach to a previously-running instance of MapInfo Professional which was not launched by a 
Visual Basic CreateObject( ) call, use Visual Basic’s GetObject( ) function. 
Set mapinfo = GetObject( , "MapInfo.Application")

Как сделать тоже самое с помощью C# ?
  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.