Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Кузнецов Андрей
Зарегистрирован: 22.04.2005 Сообщения: 28 Откуда: Магнитогорск
|
Добавлено: Ср 26 Окт 2005 16:03 Заголовок сообщения: Вопрос Мише Власову |
|
|
Михаил, я пытаюсь реализовать идею динамической "подмены" стиля.
Пишу код в ИнГео. Все хорошо, но не нашел описания метода "PaintContour" у стиля, а точнее последнего его параметра.
Стиль в моем случае рисует данные из семантической таблицы, и, видимо параметр "aData" должен содержать их, но в каком виде не понял.
Вот код:
' Вызывается перед рисованием каждого слоя
sub DbPaint_LayerWillPaint(aSurface, aLayerID, aVisible)
Dim MOS
Dim MO
Dim Contour
Dim NightStyle
Dim MOQ
Dim PaintData
If aLayerID <> "000100000E65" Then Exit Sub
' Подмена стиля
Set NightStyle = Application.ActiveDb.StyleFromID("00010002E12D")
Set MOS = Application.ActiveDb.MapObjects
Set MOQ = MOS.QueryByStyle("000100002337", inqsAll)
Do While Not MOQ.EOF
Set MO = MOS.GetObject(MOQ.ObjectID)
Set Contour = MO.Shapes.Item(0).Contour
' Здесь не понятно !!!!
PaintData = MO.SemData.GetValue("RFCITIES", "NAME_RWIN")
NightStyle.PaintContour aSurface, Contour, PaintData
MOQ.MoveNext
Loop
end sub |
|
Вернуться к началу |
|
 |
Наталья Колонтай

Зарегистрирован: 01.11.2005 Сообщения: 22 Откуда: Москва
|
Добавлено: Чт 10 Ноя 2005 12:44 Заголовок сообщения: Изменение стиля |
|
|
Мне удалось решить эту проблему через изменение индекса стиля у форм объекта. Не забудь потом обновить набор объектов. |
|
Вернуться к началу |
|
 |
Кузнецов Андрей
Зарегистрирован: 22.04.2005 Сообщения: 28 Откуда: Магнитогорск
|
Добавлено: Вт 15 Ноя 2005 12:55 Заголовок сообщения: Re: Изменение стиля |
|
|
Наталья Колонтай писал(а): | Мне удалось решить эту проблему через изменение индекса стиля у форм объекта. Не забудь потом обновить набор объектов. |
Уважаемая, Наталья. Очень буду рад примеру кода, я не совсем понял Вашу идею.
Поясню, то что хочу я: нужно рисовать в динамике текст другим цветом, при этом не меняя параметров стиля объекта, чтобы другие пользователи работающие в это время не испытали "дискомфорта". Дублировать объекты не желательно (их десятки тысяч), поэтому хотелось бы "на лету" рисовать по своему. Очень симпотичен вариант, когда стиль уже определен и его бы просто использовать, но есть непонятности, о которых я писал ранее. |
|
Вернуться к началу |
|
 |
Азаматов Азамат Хадисович
Зарегистрирован: 17.02.2005 Сообщения: 100 Откуда: г. Учалы, Респ. Башкортостан
|
Добавлено: Вт 15 Ноя 2005 20:27 Заголовок сообщения: |
|
|
А нельзя просто рисовать после рисования слоя?
Тогда просто то что вы нарисуете в модуле перекроет на экране "штатную" отрисовку |
|
Вернуться к началу |
|
 |
Наталья Колонтай

Зарегистрирован: 01.11.2005 Сообщения: 22 Откуда: Москва
|
Добавлено: Ср 16 Ноя 2005 14:32 Заголовок сообщения: |
|
|
Мне нужно было перехватывать работу пользователя и "перекрашивать" объекты. В Delphi механизм перекрашивания реализовывался так
theObjShapes:= theObject.Shapes;//Берем коллекцию фигур объекта
for j:=0 to theObjShapes.Count-1 do begin
theObjShape:=theObjShapes.Item[j];//Берем фигуру
theObjShape.StyleID:=IDZUStyleOtkr;//Присваиваем ее индексу стиля новое значение
end;
theObjects.UpdateChanges; //Обновляем объект
А подвешивать действительно пришлось на перерисовку слоев. Как уже говорила ранее- "Это не есть хорошо, господа разработчики". |
|
Вернуться к началу |
|
 |
Михаил Власов

Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
|
Добавлено: Чт 01 Дек 2005 21:44 Заголовок сообщения: |
|
|
Если стиль содержит текстовый метод отображения с форматными вставками вида "{name1} {name2}", то последний параметр метода PaintContour должен содержать подстановку для "name1" и "name2" в следующем виде:
Код: |
PaintData = "name1=value1" & vbNewLine & "name2=value2"
|
В результате будет отображен текст "value1 value2". _________________ С уважением, Михаил Власов. |
|
Вернуться к началу |
|
 |
|