Страница 2 из 2
Re: Информация о выделенном объекте
Добавлено: 01 июн 2011, 05:31
SergS
Radost_ писал(а):Undim q_name - не хочет работать этот оператор.
что-то я разобраться не могу как очищать окно и обнулять запрос.
как в инфо - там же тыкаешь - узнаешь, на другую область тыкаешь - изменяются значения.
Undim q_name -
имеет смысл в окне Mapbasic при условии, что до этого и там же Вы использовали команду
dim q_name
в прогамме на Mapbasic (mbx) "Undim" бессмысленна
за очистку окна (того, в который print) отвечает команда
print Chr$(12)
если уж успользуете Mapbasic можно вместо "print Chr$(12)" можно просто написать "CLS"
Re: Информация о выделенном объекте
Добавлено: 01 июн 2011, 05:38
Radost_
SergS писал(а):Undim q_name -
имеет смысл в окне Mapbasic при условии, что до этого и там же Вы использовали команду
dim q_name
в прогамме на Mapbasic (mbx) "Undim" бессмысленна
сначала я выделяю место в памяти димом. потом undim его очищаю.
у меня компилиться не хочет

я пишу этот оператор в той же функции что и дим. после всего. он (злостный мапбейсик

) пишет что
Command unavailible undim.
чем различается окно и программа Mapbasic?
Re: Информация о выделенном объекте
Добавлено: 01 июн 2011, 05:55
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
Re: Информация о выделенном объекте
Добавлено: 01 июн 2011, 06:07
Radost_
SergS писал(а):Выдержка из справки по Mapbasic:
вы правда думаете что я этого не прочитала?
я прочитала.
только я не понимаю что значит
Предупреждение
Оператор UnDim не может использоваться в компилированных программах MapBasic. Его использование разрешено только в Рабочем Наборе или в окне MapBasic.
Re: Информация о выделенном объекте
Добавлено: 01 июн 2011, 06:29
SergS
Radost_ писал(а):SergS писал(а):Выдержка из справки по Mapbasic:
вы правда думаете что я этого не прочитала?
я прочитала.
только я не понимаю что значит
Предупреждение
Оператор UnDim не может использоваться в компилированных программах MapBasic. Его использование разрешено только в Рабочем Наборе или в окне MapBasic.
уж что есть, то есть - как разработчик захотел - undim не может использоваться в mbx и все.
но с точки зрения логики - здесь есть смысл.
оператор dim не выделяет память, он ее резервирует на этапе загрузки программы. Если классически - место для локальных переменных выделяется на стеке, после выхода из функции стек автоматически освобождается. специальные действия по освобождению памяти не нужны. Явное управление кучей (если знаете, что это такое) в MB не предусмотрено - динамическое выделение-освобождение памяти ведется опять таки автоматически на уровне среды выполнения программы. Соответственно, явные операторы освобождения памяти просто не нужны.
А в окне MB немножко по другому - там нет программы, для которой уже были бы выделены ресурсы, их нужно выделять дополнительно. Поэтому реализован некий аналог управления кучей - выделение памяти - dim, освобождение памяти - undim
короче, dim в программе MB и в окне MB - несколько разные вещи.
Re: Информация о выделенном объекте
Добавлено: 01 июн 2011, 06:32
Radost_
SergS писал(а):
короче, dim в программе MB и в окне MB - несколько разные вещи.
короче, как сделать так чтобы переменная которая записывалась в дим обновлялась после того как я тыкну другой полигон на карте?

Re: Информация о выделенном объекте
Добавлено: 01 июн 2011, 08:13
Radost_
так. я вроде разобралась с тем что если по ходу выполнения проги из мапбейска в окне мапбейскик программы мапинфо вводит undim все работает так как надо. но все таки вопрос в том что может быть можно как-то это упростить? и не переключаться между окнами а чтобы следующий тык обнулял предыдущий запрос
Re: Информация о выделенном объекте
Добавлено: 01 июн 2011, 08:36
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
Re: Информация о выделенном объекте
Добавлено: 01 июн 2011, 08:56
SergS
SergS писал(а):Radost_ писал(а):SergS писал(а):
короче, dim в программе MB и в окне MB - несколько разные вещи.
короче, как сделать так чтобы переменная которая записывалась в дим обновлялась после того как я тыкну другой полигон на карте?

да пожалуйста, вот абсолютно рабочий пример (только с объектами в косметике не работает - там чутьок больше написать надо)
хотя, и с косметикой вроде тоже должен работать
Re: Информация о выделенном объекте
Добавлено: 01 июн 2011, 09:06
Radost_
сейчас посмотрим

Re: Информация о выделенном объекте
Добавлено: 01 июн 2011, 09:10
Radost_
SergS писал(а):хотя, и с косметикой вроде тоже должен работать
ну я вот запустила сейчас на косметике и в ваше программке все меняется как надо. осталось ее переделать под себя!
спасибо! вы спасли мой диплом!!!!!