Здравствуйте. Пытаюсь программно отключить/включить отображение надписи для элемента по его ключу:
Код
elem := Layer.Elements.GetElement(key);
tid := elem.TypeId;
//выборка надписи по типу элемента
for j := 0 to Layer.LabelLayers.Count - 1 do
begin
Label := Layer.LabelLayers.Item[j];
ztid := Label.TypeID;
if ztid = tid then break;
end;
//выборка коллеции
zLabels := Label.Labels;
if Not Assigned(zLabels) then exit;
//выборка элемента коллекции
zLabel := zLabls.Item[key];
if Not Assigned(ZLabel) then exit;
zLabl.Visible := bVisible;//установка признака видимость конкретной надписи
zLabls.SetItem(zLabel);//сохранение надписи
но надпись всегда остается видимой. Подскажите что не так...
У меня работает. У Вас в коде zLabels по ходу текста превратился в zLabls Может это влияет
Код
Sub SetLabelInvisible
'Активный слой текущей карты
set L = zulu.ActiveMapDoc.Layers.Active
'Бирка для набора бирок с ID = 3, для элемента с ElemID = 60
Set label = l.LabelLayers.ItemById(3).Labels.Item(60)
'Вариант надписей ID = 3
Set labels = l.LabelLayers.ItemById(3).Labels
'Бирка для элемента с ElemID = 60
Set label = labels.Item(60)
'Назначаем бирку невидимой
label.Visible = False
'Записываем бирку в слой
labels.SetItem label
End Sub
Это при в этом моем упрощенном примере кода есть опечатка, в коде программы все как нужно... Но почему-то не срабатывает. Код выполняется перед тем, как включается видимость надписей, и предполагается, что сначала выполняются все предварительные настройки надписей в том числе и видимость по отдельным объектам, а потом идет общее включение...
Хотя мой код почти ничем не отличается от приведенного вами кода макроса, поправил почти так как и в приведенном макросе...
Код
elem := Layer.Elements.GetElement(key);
tid := elem.TypeId;
//выборка надписи по типу элемента
for j := 0 to Layer.LabelLayers.Count - 1 do
begin
Label := Layer.LabelLayers.Item[j];
zLabels := Layer.LabelLayers.ItemById[j].Labels;
ztid := Label.TypeID;
if ztid = tid then break;
end;
//выборка элемента коллекции
zLabel := zLabls.Item[key];
if Not Assigned(ZLabel) then exit;
zLabel.Visible := false;//принудительно отключаю надпись, по идее должны отключиться все надписи данного типа для любого ключа...
zLabels.SetItem(zLabel);
даже принудительный сброс видимости не отключает надписи.