RUS  ENG 

Открытие слоя (как проверить?)

Страницы: 1
RSS
Открытие слоя (как проверить?)
 
Программирую на Builder C++? Zulu версия 6.
Необходимо получить доступ к элементу слоя.
Открываю слой:
LayerAuto->Open(ZuluLayer.w_str());

LayerAuto - это компонент типа TLayer.
ZuluLayer - строка, ссылка на слой

Как проверить что слой уже открыт?
Свойство Active всегда = 0. Независимо от того, открыт он или нет.
Или можно всегда перед обращением к слою пытаться открывать его?

IElement *zuluElement;
LayerAuto->Open(ZuluLayer.w_str());
LayerAuto->Elements->get_Item(44, &zuluElement);

так все работает, но есть сомнение, корректно ли каждый раз делать Open() ?

p.s.
Если пытаюсь обращаться к не открытому слою, то возникает ошибка,

(GetDefaultInterface()->get_Elements(&pVal))) Error:80040401
(-2147220479)@..\ZuluLib_OCX.cpp/1090

которая не обрабатывается конструкцией

try
{
LayerAuto->Elements->get_Item(44, &zuluElement);
}
catch (...)
{
}
 
Свойство Active может быть TRUE, если слой загружен в карту, и в ней является активным. Без карты это свойство всегда FALSE. Если слой просто открывается через Open, то при неудаче уже будет ошибка и вызов других методов для этого объекта смысла не имеет. В простивном случае слой открыти ничего дополнительно проверять не надо.
 
Наверное Вы не поняли мой вопрос.
1. слой открыт. сервер по какой-либо причине не работает (пропала связь, сервер перезагружается и т.д.).
Если не проверять, открыт ли слой, то при попытке обращения к нему возникает ошибка,
которая не перехватывается try - catch.

2. слой открыт. если я повторно буду открывать слой - еще раз ... и так много раз подряд - это криминал? можно так делать?
я так и делаю - ошибок при открытии слоя не возникает.

3. ситуация, когда не работает сервер. Самое проблематичное.
Пытаюсь открывать слой, LayerAuto->Open(ZuluLayer.w_str()); Результата выполнения функции не видно.
Далее пытаюсь обратится к элементу слоя: try - catch -> вылетает ошибка. В итоге весь рабочий стол завален этими сообщениями. Хочется, чтобы этих сообщений не было. Поэтому есть желание проверить - открылся слой или нет.
Существует ли такая возможность?

Вы пишете: Если слой просто открывается через Open, то при неудаче уже будет ошибка.
В том то и дело, что никакой ошибки не возникает.
 
1, 3. Если написать пример на Basic, ошибки на повторное открытие слоя или открытие слоя с неверным именем возникают железно (коды 512, 513). Куда прячет ошибки обертка Builder Вы должны сами разобраться, т.к. там уже не просто ILayer а некий TLayer, который уже как-то наш объект обернул.

2. Чтобы проверить открыт слой или нет, вызовите Layer.Name Если строка не пустая, значит уже открыт.
Страницы: 1