Информация о выделенном объекте

MapInfo, MapBasic
SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Информация о выделенном объекте

Сообщение SergS »

Radost_ писал(а):Undim q_name - не хочет работать этот оператор.
что-то я разобраться не могу как очищать окно и обнулять запрос.
как в инфо - там же тыкаешь - узнаешь, на другую область тыкаешь - изменяются значения.
Undim q_name -
имеет смысл в окне Mapbasic при условии, что до этого и там же Вы использовали команду
dim q_name
в прогамме на Mapbasic (mbx) "Undim" бессмысленна

за очистку окна (того, в который print) отвечает команда
print Chr$(12)
если уж успользуете Mapbasic можно вместо "print Chr$(12)" можно просто написать "CLS"
Аватара пользователя
Radost_
Интересующийся
Сообщения: 15
Зарегистрирован: 27 фев 2011, 08:11
Репутация: 0
Откуда: Красноярск
Контактная информация:

Re: Информация о выделенном объекте

Сообщение Radost_ »

SergS писал(а):Undim q_name -
имеет смысл в окне Mapbasic при условии, что до этого и там же Вы использовали команду
dim q_name
в прогамме на Mapbasic (mbx) "Undim" бессмысленна
сначала я выделяю место в памяти димом. потом undim его очищаю.
у меня компилиться не хочет :(
я пишу этот оператор в той же функции что и дим. после всего. он (злостный мапбейсик :)) пишет что
Command unavailible undim.

чем различается окно и программа Mapbasic?
у всех в голове свои тараканы
SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Информация о выделенном объекте

Сообщение SergS »

Radost_ писал(а): чем различается окно и программа Mapbasic?
Выдержка из справки по Mapbasic:

Назначение
Распускает переменную.

Синтаксис
UnDim variable_name
variable_name – имя переменной, которая была объявлена в Рабочем Наборе или окне MapBasic.

Предупреждение
Оператор UnDim не может использоваться в компилированных программах MapBasic. Его использование разрешено только в Рабочем Наборе или в окне MapBasic.

Описание
После выполнения оператора Dim, создавшего переменную, Вы можете использовать оператор UnDim для освобождения ресурсов, отведенных для этой переменной. Например, Вы ввели в окно MapBasic оператор Dim, обявляющий целочисленную переменную X:

Dim X As Integer

Но Вам стало необходимо изменить тип переменной. Следущие операторы переопределяют переменную X:

UnDim X
Dim X As Float
Аватара пользователя
Radost_
Интересующийся
Сообщения: 15
Зарегистрирован: 27 фев 2011, 08:11
Репутация: 0
Откуда: Красноярск
Контактная информация:

Re: Информация о выделенном объекте

Сообщение Radost_ »

SergS писал(а):Выдержка из справки по Mapbasic:
вы правда думаете что я этого не прочитала? :cry:
я прочитала.
только я не понимаю что значит

Предупреждение
Оператор UnDim не может использоваться в компилированных программах MapBasic. Его использование разрешено только в Рабочем Наборе или в окне MapBasic.
у всех в голове свои тараканы
SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Информация о выделенном объекте

Сообщение SergS »

Radost_ писал(а):
SergS писал(а):Выдержка из справки по Mapbasic:
вы правда думаете что я этого не прочитала? :cry:
я прочитала.
только я не понимаю что значит

Предупреждение
Оператор UnDim не может использоваться в компилированных программах MapBasic. Его использование разрешено только в Рабочем Наборе или в окне MapBasic.
:)
уж что есть, то есть - как разработчик захотел - undim не может использоваться в mbx и все.
но с точки зрения логики - здесь есть смысл.
оператор dim не выделяет память, он ее резервирует на этапе загрузки программы. Если классически - место для локальных переменных выделяется на стеке, после выхода из функции стек автоматически освобождается. специальные действия по освобождению памяти не нужны. Явное управление кучей (если знаете, что это такое) в MB не предусмотрено - динамическое выделение-освобождение памяти ведется опять таки автоматически на уровне среды выполнения программы. Соответственно, явные операторы освобождения памяти просто не нужны.
А в окне MB немножко по другому - там нет программы, для которой уже были бы выделены ресурсы, их нужно выделять дополнительно. Поэтому реализован некий аналог управления кучей - выделение памяти - dim, освобождение памяти - undim
короче, dim в программе MB и в окне MB - несколько разные вещи.
Аватара пользователя
Radost_
Интересующийся
Сообщения: 15
Зарегистрирован: 27 фев 2011, 08:11
Репутация: 0
Откуда: Красноярск
Контактная информация:

Re: Информация о выделенном объекте

Сообщение Radost_ »

SergS писал(а): короче, dim в программе MB и в окне MB - несколько разные вещи.
короче, как сделать так чтобы переменная которая записывалась в дим обновлялась после того как я тыкну другой полигон на карте? :)
у всех в голове свои тараканы
Аватара пользователя
Radost_
Интересующийся
Сообщения: 15
Зарегистрирован: 27 фев 2011, 08:11
Репутация: 0
Откуда: Красноярск
Контактная информация:

Re: Информация о выделенном объекте

Сообщение Radost_ »

так. я вроде разобралась с тем что если по ходу выполнения проги из мапбейска в окне мапбейскик программы мапинфо вводит undim все работает так как надо. но все таки вопрос в том что может быть можно как-то это упростить? и не переключаться между окнами а чтобы следующий тык обнулял предыдущий запрос
у всех в голове свои тараканы
SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Информация о выделенном объекте

Сообщение SergS »

Radost_ писал(а):
SergS писал(а): короче, dim в программе MB и в окне MB - несколько разные вещи.
короче, как сделать так чтобы переменная которая записывалась в дим обновлялась после того как я тыкну другой полигон на карте? :)
да пожалуйста, вот абсолютно рабочий пример (только с объектами в косметике не работает - там чутьок больше написать надо)

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

include "mapbasic.def"

Declare  Sub  SelChangedHandler()
Declare  Sub  Main()

dim Глобальная_переменная as string

Sub  SelChangedHandler()
	dim a as float
	dim ob as object
	CLS
	if commandinfo(CMD_INFO_SELTYPE) = 1 and selectioninfo(SEL_INFO_NROWS) = 1 then
		if tableinfo( selectioninfo(SEL_INFO_SELNAME), TAB_INFO_MAPPABLE) then
			fetch first from selection
			ob = selection.obj
			do case objectinfo(ob, OBJ_INFO_TYPE)
				case OBJ_TYPE_REGION
					a = Area(ob, "sq m")
					Глобальная_переменная = "площадной объект, площадь = " + str$(a) + " кв.м."
				case OBJ_TYPE_LINE, OBJ_TYPE_PLINE
					a = Objectlen(ob, "m")
					Глобальная_переменная = "линейный объект, длина = " + str$(a) + " м."
				case else
					Глобальная_переменная = ""
			end case
			print Глобальная_переменная
		end if
	end if
End  Sub

Sub  Main()
	note "просто для того чтоб запустилась программа и застряла в памяти"	
End  Sub
Последний раз редактировалось SergS 01 июн 2011, 09:14, всего редактировалось 1 раз.
SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Информация о выделенном объекте

Сообщение SergS »

SergS писал(а):
Radost_ писал(а):
SergS писал(а): короче, dim в программе MB и в окне MB - несколько разные вещи.
короче, как сделать так чтобы переменная которая записывалась в дим обновлялась после того как я тыкну другой полигон на карте? :)
да пожалуйста, вот абсолютно рабочий пример (только с объектами в косметике не работает - там чутьок больше написать надо)
хотя, и с косметикой вроде тоже должен работать
Аватара пользователя
Radost_
Интересующийся
Сообщения: 15
Зарегистрирован: 27 фев 2011, 08:11
Репутация: 0
Откуда: Красноярск
Контактная информация:

Re: Информация о выделенном объекте

Сообщение Radost_ »

сейчас посмотрим :)
у всех в голове свои тараканы
Аватара пользователя
Radost_
Интересующийся
Сообщения: 15
Зарегистрирован: 27 фев 2011, 08:11
Репутация: 0
Откуда: Красноярск
Контактная информация:

Re: Информация о выделенном объекте

Сообщение Radost_ »

SergS писал(а):хотя, и с косметикой вроде тоже должен работать
ну я вот запустила сейчас на косметике и в ваше программке все меняется как надо. осталось ее переделать под себя!
спасибо! вы спасли мой диплом!!!!!
у всех в голове свои тараканы
Ответить

Вернуться в «MapInfo»

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей