Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
baston1981
Зарегистрирован: 13.03.2010 Сообщения: 10 Откуда: МО, Голицыно
|
Добавлено: Пт Окт 21, 2011 9:32 am Заголовок сообщения: Составить выражение |
|
|
Ребят, подскажите пожалуйста. В таблице есть символьный столбец "name", все поля пустые. Хочу, чтобы при заполнении изменялся цвет полигона. Т.е. заполнено - регион красный, пустое поле - цвет по умолчанию. Ну или направьте на путь истинный) |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Пн Окт 24, 2011 4:24 pm Заголовок сообщения: |
|
|
Только с помощью тематического слоя. |
|
Вернуться к началу |
|
|
Vovik
Зарегистрирован: 04.05.2008 Сообщения: 57
|
Добавлено: Ср Ноя 02, 2011 6:48 am Заголовок сообщения: Re: Составить выражение |
|
|
Можно попробовать такой вариант (разумеется название таблиц и стили могут быть какие угодно)
Т.к. MapInfo не имеет события по изменению данных в колонке таблицы, запуск процедуры Procedura… осуществлен через изменение выборки
В принципе эту проблему (отсутствия события) можно решить
Коментировать код излишне.
Include "MAPBASIC.DEF"
Include "Icons.def"
Include "MENU.DEF"
Declare Sub Main
Declare Sub Procedura(ByVal row_id As Integer)
Declare Sub SelChangedHandler
Dim r0, r1 As Integer
Sub Main
End Sub
Sub Procedura(ByVal row_id As Integer)
Dim Zn, tablica As string
Dim Metka As Object
Dim objtype As SmallInt
Dim BorderStyle As Pen
Dim BrushStyle As Brush
OnError GoTo dd
If SelectionInfo(SEL_INFO_NROWS) = 1 Then
tablica = SelectionInfo(SEL_INFO_TABLENAME)
If tablica <> "Регионы" Then Exit SUB End If
Fetch First From Selection
Metka = selection.obj
Zn = selection.name
If Zn = "" Then
BorderStyle =MakePen (1,1,0) ' по умолчанию
BrushStyle = MakeBrush(2, 16776960, 16777215)
else
BorderStyle =MakePen (2,2,256)
BrushStyle = MakeBrush(2, 16711935, 1677721)
End If
objtype = ObjectInfo(Metka,OBJ_INFO_TYPE)
If (objtype = 7) or (objtype = 2) or (objtype = 8) or (objtype = 9) Then ' Если REGION или ELLIPSE или RECT или ROUNDRECT
Alter Object Metka Info OBJ_INFO_BRUSH, BrushStyle
Update tablica Set Obj= Metka where RowId = row_id
Alter Object Metka Info OBJ_INFO_PEN, BorderStyle
Update tablica Set Obj= Metka where RowId = row_id
End If
End If
dd:
End Sub
Sub SelChangedHandler
OnError Goto dd
If CommandInfo(CMD_INFO_SELTYPE) = 1 Then r0 = CommandInfo(CMD_INFO_ROWID ) End If '1 – если строка была добавлена
If CommandInfo(CMD_INFO_SELTYPE) = 2 Then r1 = CommandInfo(CMD_INFO_ROWID ) End If '2 – если строка была исключена из предыдущей выборки
If (r0 = 0) or (r1 = 0) Then Exit SUB End If
If r0 <> r1 Then Call Procedura(r0) End If
dd:
End Sub |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Ср Ноя 02, 2011 8:17 am Заголовок сообщения: |
|
|
Понятно, что перекрасить объект с помощью MapBasic-команд - проблем нет. Я подозреваю, что ключевое в исходном посте:
"Хочу, чтобы при заполнении изменялся цвет полигона"
А за изменение данных в таблицах у MapInfo обработчика нет :( Так что автоматически только тематикой сверху. |
|
Вернуться к началу |
|
|
|