RUS  ENG 

Как программно отключить надпись для элемента

Страницы: 1
RSS
Как программно отключить надпись для элемента
 
Здравствуйте.
Пытаюсь программно отключить/включить отображение надписи для элемента по его ключу:
Код
 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);//сохранение надписи
но надпись всегда остается видимой. Подскажите что не так...

Версия zulu 8.0.0.6671 от 06.04.2018
Изменено: Kostya_LeoG - 10.04.2018 11:57:48
 
У меня работает. У Вас в коде 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);
даже принудительный сброс видимости не отключает надписи.
 
Попросил выполнить макрос для конкретного варианта надписей и конкретного ключа.
Либо зашейте в текст временно число вмеcто key
 
И кто сказал, что должны отключится все надписи. Отключится одна надпись для ключа key
 
Спасибо, за подсказки. Разобрался с проблемой помог тест по шагам начиная с конкретной надписи и ключа.
Страницы: 1