RUS  ENG 

Управление видимостью элемента по его ключу

Страницы: 1
RSS
Управление видимостью элемента по его ключу
 
Здравствуйте.
Подскажите, пожалуйста, как управлять видимостью элемента по его ключу. Есть набор ключей элементов, видимостью которых нужно управлять в зависимости от масштаба карты. Код должен выглядеть примерно так:
Код
key := Layer.Current_ID;
if MapCtrl.MapScale > 1000 then vis := FALSE
else vis := TRUE;
//Дальше нужно скрыть конкретный элемент по его ключу, причем другие элементы этого режима и типа могут оставаться видимыми
Layer.SetElementVisble(key,vis);//--этой функции не существует в библиотеке (прототип)
Есть функции Layer.SetTypeVisible и Layer.SetModeVisible, но они скрывают весь тип или весь режим, что не совсем подходит для моей задачи.
Изменено: Kostya_LeoG - 14.12.2017 12:57:02
 
Сейчас это можно реализовать через создание объекта Theme, где указать для нужных ключей параметр eThemeInvisible = 23
И добавить временную тему в слой.

https://www.politerm.com/zuludoc/index.html#zuluax/Themes_AddTemporaryTheme.html
 
Спасибо за подсказку
 
Здравствуйте.
Подскажите, пожалуйста, почему не отрабатывается созданная временная тема
Код
//Создание темы: 
  Theme      := CoTheme.Create();
  wPath      := ChangeFileExt(Application.ExeName,'th1.ztm');
  Theme_name := ExtractFileName(ChangeFileExt(ParamStr(0),'ztm'));
  Theme.Create(wPath,Theme_name,Layer.UserName);

//подключение
  param := 23;
  key := 2015; //ключ одного из N элементов в слое, которые нужно временно скрыть
  theme.Parameter[key, eThemeInvisible] := param;
  Theme_id := tpgLayer.Themes.AddTemporaryTheme(theme);
  Layer.Themes.SetEnabled(Theme_id,TRUE);

Код выполняется, но нет ожидаемого результата ни для одного реально существующего элемента карты.

Версия zulu 8.0.0.6590, дата сборки 15.01.2018

 
После присвоения параметров темы, ее нужно сохранять: https://www.politerm.com/zuludoc/zuluax/Theme_Save.html
 
Код поправил по вашей подсказке, но с сохранением все равно не работает...
Код
  param := 23;  key := 2015; //ключ одного из N элементов в слое, которые нужно временно скрыть
  theme.Parameter[key, eThemeInvisible] := param;
  theme.Save;
  Theme_name := theme.Name;
  tpgLayer.ThemeName  := Theme_name;
  Theme_id := tpgLayer.Themes.AddTemporaryTheme(theme);
  Layer.Themes.SetEnabled(Theme_id,TRUE);
  zMapMain.Redraw();
 
Для временных тем все работает без Create через файл и без Save. Сам параметр eThemeInvisible = 23, а его значение должно быть1
Код
Const eThemeInvisible = 23


Sub ThemporaryTheme
    
    Set L = zulu.ActiveMapDoc.Layers.Active
    
   Set Th = CreateObject("ZuluLib.Theme")    
        
    Th.Parameter(128, eThemeInvisible) = 1
    
    ID = L.themes.AddTemporaryTheme (Th)
    
    L.themes.SetEnabled ID, true
    
End Sub
 
Спасибо, Алексей.
У меня получилось с вариантом Theme := CoTheme.Create(); и т.д., но не пойму как работает ваш вариант... Подскажите, что за функция CreateObject, как она работает в делфи?
 
В VBScript CreateObject в дельфи Co<>.Create
 
Спасибо
Страницы: 1