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