ReadData method (Layer)

Чтение из слоя дополнительных пользовательских данных в указанный поток.

Применяется к:

Layer

Синтаксис:

Visual Basic:

Function ReadData(Name As String, Stream As Unknown, Code As Long) As Boolean

Name - строковый идентификатор набора данных.

Stream - интерфейс IStream, передаваемый как IUnknown.

Code - зарезервировано, должно быть 1.

Описание:

Действие метода равносильно обращению к пользовательским данным слоя через CustomData: взять индекс набора методом GetIndexByName и прочитать его методом GetItemData.

Set Data = Layer.CustomData
Data.GetItemData Data.GetIndexByName(Name), Stream

Набор с таким именем должен уже быть в слое - его кладет туда метод WriteData. Если имени в слое нет, метод возвращает False и поток остается пустым. Кроме своих наборов в CustomData лежат служебные записи слоя («zulu_sys_ext_xmin», «_zt.tl» и другие).

В качестве потока в макросе на VBScript годится ADODB.Stream: записанные им байты читаются обратно тем же объектом. Значение Code на результат не влияет.

В макросах на python метод недоступен: объект-поток создать нечем - ни win32com, ни comtypes в поставке нет.

Пример:

Пример кладет в слой свой набор данных и читает его обратно.

Visual Basic:

Sub Layer_ReadData
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
'Пишем свой набор в слой
Set S1 = CreateObject("ADODB.Stream")
S1.Type = 2
S1.Charset = "utf-8"
S1.Open
S1.WriteText "проба пера 123"
S1.Position = 0
Ok = L.WriteData("МойНабор", S1, 1)
'Читаем его обратно в чистый поток
Set S2 = CreateObject("ADODB.Stream")
S2.Type = 2
S2.Charset = "utf-8"
S2.Open
Res = L.ReadData("МойНабор", S2, 1)
S2.Position = 0
T = "Записано: " & Ok & vbCrLf & "прочитано: " & Res
T = T & vbCrLf & "байт: " & S2.Size & vbCrLf & "текст: " & S2.ReadText
MsgBox T
End Sub