Создание классификатора
-
- Интересующийся
- Сообщения: 42
- Зарегистрирован: 08 окт 2007, 06:00
- Репутация: 0
Создание классификатора
Добрый день! Нужна помощь! Пишу курсовик по разработке классификатора для СТП. В программировании почти новичок. На данный момент почти получилось сделать диалог сохранения по шаблону, но никак не получается по нажатию на кнопку Button сформировать список слоев (сейчас у меня вместо этого PopupMenu). Очень бы помогло, если бы поизучать код стандартной утилиты MapInfo "создание новой таблицы". Может быть знаете, где его можно посмотреть или м.б. есть подобный код.
-
- Активный участник
- Сообщения: 216
- Зарегистрирован: 21 окт 2009, 13:29
- Репутация: 28
- Откуда: Новосибирск
Re: Создание классификатора
Честно говоря, не уловил суть вопроса. Попробуйте описать проблему подробнее. Вам нужно интерфейс приложения написать на MapBasic? А версия MapInfo какая?
Что-то мне подсказывает, что нигде. Вполне возможно что это часть системы. А чем она вам поможет?Варя писал(а):Очень бы помогло, если бы поизучать код стандартной утилиты MapInfo "создание новой таблицы". Может быть знаете, где его можно посмотреть или м.б. есть подобный код.
- ginpetr
- Завсегдатай
- Сообщения: 380
- Зарегистрирован: 21 июн 2011, 12:07
- Репутация: 140
- Откуда: Орск
- Контактная информация:
Re: Создание классификатора
Чтобы создать новую таблицу в нужном каталоге, нужно получить путь с помощью FileSaveAsDlg( ) и выполнить Create Table, где задаётся всё остальное (структура и т.п.). Если структура не фиксирована, придётся делать диалог редактирования структуры таблицы.
В чём сложности создания списка слоёв?
В чём сложности создания списка слоёв?
-
- Активный участник
- Сообщения: 160
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: Создание классификатора
М.б. полезно
Пример программы -
- Интересующийся
- Сообщения: 42
- Зарегистрирован: 08 окт 2007, 06:00
- Репутация: 0
Re: Создание классификатора
Попытаюсь объяснить подробнее) На данном этапе создаю диалоговое окно, которое бы загружало шаблон (пока что это просто слой, потом может быть попробую так называемые "сшитые таблицы") и по этому шаблону формируется новая таблица с возможностью добавления и удаления полей. За основу взяла как раз из того учебника, что мне скинули (программирование для MI) пример кода "диалог с использованием элементов ListBOX и PopupMenu". Поменяла его, но никак не получается заменить popupmenu, где указывается тип слоя (мне это совсем не нужно) на button, которая бы запускала просто загрузку слоя (слоев) в следующий элемент диалога - ListBox. Там дело в том, что применяется функция ReadControlValue(1002)-1 (а она для button) не работает. Не могу понять, чем ее заменить. В общем. Могу код сбросить, но может быть кто-нибудь сможет так сказать, в чем может быть проблема или, где можно почитать. Цель-то у меня понять, а не просто утилиту написать. Очень жду предложений.
-
- Интересующийся
- Сообщения: 42
- Зарегистрирован: 08 окт 2007, 06:00
- Репутация: 0
Re: Создание классификатора
Ах, да, работаю в MI 12.0, в качестве среды разработки использую MapBasic IDE.
-
- Активный участник
- Сообщения: 160
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: Создание классификатора
О построении диалога:
1. Удалите все, что касается выбора типа слоя.
2. Вставьте в начало кода вызов CreateListLayerNames. Предварительно отредактируйте эту функцию – исключите проверку на тип слоя.
3. Никакой дополнительной кнопки не требуется. При загрузке диалога формируется список слоев активной карты и заполняется соответствующий ListBox.
1. Удалите все, что касается выбора типа слоя.
2. Вставьте в начало кода вызов CreateListLayerNames. Предварительно отредактируйте эту функцию – исключите проверку на тип слоя.
3. Никакой дополнительной кнопки не требуется. При загрузке диалога формируется список слоев активной карты и заполняется соответствующий ListBox.
-
- Интересующийся
- Сообщения: 42
- Зарегистрирован: 08 окт 2007, 06:00
- Репутация: 0
Re: Создание классификатора
Ура! Получилось. Хотя, честно говоря, пыталась и раньше удалить, но он мне почему-то бесконечные ошибки выдавал. В этот раз, видимо, помог Ваш совет)
-
- Интересующийся
- Сообщения: 42
- Зарегистрирован: 08 окт 2007, 06:00
- Репутация: 0
удаление элемента массива
Вопросы продолжаются(. Пытаюсь теперь добавить в тот же диалог создания таблицы по шаблону кнопки удалить и добавить поля. Точнее пока что пытаюсь только удалить. Как я поняла удалять мне нужно из массива, в котором хранится список полей. Попыталась взять процедуру, которая заполняет этот массив и переписать ее смещая элементы массива. Ошибок при компиляции нет, а вот при использовании диалога ничегошеньки не происходит( Где ошибка понять не могу. может вообще все не правильно или есть какая-нибудь функция, которая удаляет указанный элемент массива?
Код выглядит так:
Sub fild_delete
dim z as smallint
Dim iColNum as SmallInt
Dim fild_count As Integer
Dim tp,Fwidth,Fdecplaces As smallint
dim sType, sCol as string
Dim d As Integer
fild_count = NumCols(Untitled2)
d = fild_count-1
ReDim fildames(fild_count)
ReDim fildtype(fild_count)
ReDim filditog(fild_count)
z = ReadControlValue(1003)
if z = 0 then
exit sub
else
For iColNum = z to d
sCol="COL" & Str$(iColNum+1)
fildames(iColNum) = ColumnInfo("Untitled2", sCol, COL_INFO_NAME)
tp = ColumnInfo("Untitled2", sCol, COL_INFO_TYPE)
Fwidth = ColumnInfo("Untitled2", sCol, COL_INFO_WIDTH)
Fdecplaces = ColumnInfo("Untitled2", sCol, COL_INFO_DECPLACES)
Do case tp
case COL_TYPE_CHAR
sType="Char" & " " & "(" & Fwidth & ")"
case COL_TYPE_DECIMAL
sType="Decimal" & " " & "(" & Fwidth & "," & Fdecplaces & ")"
case COL_TYPE_FLOAT
sType="Float"
'ну и т.д.
case Else
sType="Не определен"
end Case
fildtype (iColNum)= sType
filditog (iColNum)= fildames(iColNum) & " " & fildtype (iColNum)
Next
end if
End Sub
Код выглядит так:
Sub fild_delete
dim z as smallint
Dim iColNum as SmallInt
Dim fild_count As Integer
Dim tp,Fwidth,Fdecplaces As smallint
dim sType, sCol as string
Dim d As Integer
fild_count = NumCols(Untitled2)
d = fild_count-1
ReDim fildames(fild_count)
ReDim fildtype(fild_count)
ReDim filditog(fild_count)
z = ReadControlValue(1003)
if z = 0 then
exit sub
else
For iColNum = z to d
sCol="COL" & Str$(iColNum+1)
fildames(iColNum) = ColumnInfo("Untitled2", sCol, COL_INFO_NAME)
tp = ColumnInfo("Untitled2", sCol, COL_INFO_TYPE)
Fwidth = ColumnInfo("Untitled2", sCol, COL_INFO_WIDTH)
Fdecplaces = ColumnInfo("Untitled2", sCol, COL_INFO_DECPLACES)
Do case tp
case COL_TYPE_CHAR
sType="Char" & " " & "(" & Fwidth & ")"
case COL_TYPE_DECIMAL
sType="Decimal" & " " & "(" & Fwidth & "," & Fdecplaces & ")"
case COL_TYPE_FLOAT
sType="Float"
'ну и т.д.
case Else
sType="Не определен"
end Case
fildtype (iColNum)= sType
filditog (iColNum)= fildames(iColNum) & " " & fildtype (iColNum)
Next
end if
End Sub
- ginpetr
- Завсегдатай
- Сообщения: 380
- Зарегистрирован: 21 июн 2011, 12:07
- Репутация: 140
- Откуда: Орск
- Контактная информация:
Re: Создание классификатора
Вы кажется про alter control забыли... или не знали.
Я к тому, что не разобравшись как что работает, используя куски чужого кода Вам долго придётся создавать классификатор. Пишите лучше самостоятельно, читайте справку, понимайте и применяйте! А уж если в справке что-то непонятно, тогда спрашивайте.
Успехов!
Я к тому, что не разобравшись как что работает, используя куски чужого кода Вам долго придётся создавать классификатор. Пишите лучше самостоятельно, читайте справку, понимайте и применяйте! А уж если в справке что-то непонятно, тогда спрашивайте.
Успехов!
-
- Интересующийся
- Сообщения: 42
- Зарегистрирован: 08 окт 2007, 06:00
- Репутация: 0
Re: Создание классификатора
Добрый день) Вы ошибаетесь, я не просто использую чужой код, но и еще и читаю учебники, какие нашла и справку. Про alter control знаю и он в коде есть. С помощью участка кода (который указан выше), я пыталась сформировать массив (измененный вариант, из которого удалено выбранное поле), который и будет использоваться в операторе Alter Control. Мне нужно понять, правильно ли я делаю, что формирую новый массив и верно ли написала процедуру (потому что вроде как получается, что он формируется с элемента, который удаляется).ginpetr писал(а):Вы кажется про alter control забыли... или не знали.
Я к тому, что не разобравшись как что работает, используя куски чужого кода Вам долго придётся создавать классификатор. Пишите лучше самостоятельно, читайте справку, понимайте и применяйте! А уж если в справке что-то непонятно, тогда спрашивайте.
Успехов!
- ginpetr
- Завсегдатай
- Сообщения: 380
- Зарегистрирован: 21 июн 2011, 12:07
- Репутация: 140
- Откуда: Орск
- Контактная информация:
Re: Создание классификатора
Удалите выбранное поле с помощью
Alter Table "имя_таблицы" ( drop поле )
запустите опять процедуру построения массива полей таблицы и
alter control
Alter Table "имя_таблицы" ( drop поле )
запустите опять процедуру построения массива полей таблицы и
alter control
-
- Интересующийся
- Сообщения: 42
- Зарегистрирован: 08 окт 2007, 06:00
- Репутация: 0
Re: Создание классификатора
Пробовала так сделать) Но только мне же ведь не нужно удалять поле таблицы-шаблона (по которой я создаю новый слой) ведь Alter Table именно это и сделает, на сколько я понимаю. А мне нужно удалить поле в процессе создания новой таблицы. Или вы предлагаете создать новую таблицу из нее удалить поле и сохранить изменения?ginpetr писал(а):Удалите выбранное поле с помощью
Alter Table "имя_таблицы" ( drop поле )
запустите опять процедуру построения массива полей таблицы и
alter control
-
- Активный участник
- Сообщения: 128
- Зарегистрирован: 07 окт 2012, 16:25
- Репутация: 20
- Откуда: Москва
Re: Создание классификатора
вот мой вариант программы "Классификатор", (с исходным кодом, может что то пригодится)
кратко: программа позволяет изменять вид объекта(объектов) в соответствии с классификатором и/или атрибут в соответствии с классификатором.
Классификаторы должны храниться в папке с программой (папка "классификаторы"). Классификаторы можно (и нужно) создавать в самой программе.
Чтобы начать работу: запустите программу, выделите объект и нажмите на кнопку "К" на панели. Подробная инструкция в архиве.
Писал где то год назад, вроде все ошибки отловил, но наверно могут быть ошибки, которые я не успел заметить.
кратко: программа позволяет изменять вид объекта(объектов) в соответствии с классификатором и/или атрибут в соответствии с классификатором.
Классификаторы должны храниться в папке с программой (папка "классификаторы"). Классификаторы можно (и нужно) создавать в самой программе.
Чтобы начать работу: запустите программу, выделите объект и нажмите на кнопку "К" на панели. Подробная инструкция в архиве.
Писал где то год назад, вроде все ошибки отловил, но наверно могут быть ошибки, которые я не успел заметить.
- Вложения
-
- программа классификатор_v50.7z
- (63.67 КБ) 488 скачиваний
-
- Активный участник
- Сообщения: 160
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: Создание классификатора
Формирование новой таблицы на базе существующей с удалением выбранных полей.
- Вложения
-
- editTbDel.zip
- (1.92 КБ) 424 скачивания
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей