На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Страницы: (10) 1 2 [3] 4 5 ...  9 10 все  ( Перейти к последнему сообщению )  
> Поиск объекта , Вопрос тем, кто работал с MapX5.0
    А откуда уверенность, что это именно 48-й слой? Чем не нравится обращение к слою по имени?
      Я через свойство lyr->Name в операторе if предварительно убедилась, что имя этого слоя равно "_ROAD" именно это улицы. Мало того я могу во время выполнения, используя MapX просмотреть в специальном окне расположение слоев после их динамической загрузки. Слой "_ROAD" на последнем 48 месте.
      Я бы с удовольствием хотела обратиться по имени слоя в методе _Item в Builder, но он принимает параметр tadVariant index, раз index значит по номеру, поэтому я не знаю, как передать по имени "_ROAD" как если бы это было в Делфи. Вот в Делфи метод Item принимает имя слоя.
        Цитата Лена @
        tadVariant index, раз index значит по номеру
        Раз VARIANT, значит принимает значения разных типов. Это ActiveX - значит интерфейс определяется компонентом, а не языком. Не может быть такого, чтобы один и тот же компонент принимал текст из программы на одном языке и не принимал на другом.
        Цитата Лена @
        поэтому я не знаю, как передать по имени "_ROAD"
        Так и передать.
          Спасибо, в понедельник попробую. Проект на работе в офисе, мысль понятна. Просто слово index мною однозначно интенпритировалось в данном контексте как номер!

          Добавлено
          Правда, пока не понимаю как передать пустой второй параметр в функции Search.
            Цитата Лена @
            Правда, пока не понимаю как передать пустой второй параметр в функции Search.

            В этом - весь идиотизм ActiveX, написанных шибко продвинутыми программерами :wall: :wall: :wall:
            Особливо для переменной типа Variant...Попробуй методом тыка - 0, NULL, "", EmptyParam (как в Ворде)...
              ExpandedWrap disabled
                void __fastcall TFStr_Search::Button3Click(TObject *Sender)
                {
                 Table2->First();
                 OleVariant unusedParam;
                 unusedParam.operator =(48);//номер слоя
                 CMapXLayer * lyr = Form1->Map1->Layers->_Item(unusedParam);
                 AnsiString id = "_ROAD"; //имя слоя
                 WideString wsid = WideString(id);
                 
                //---- начало проверки -------------------
                          if(WideString(lyr->Name) == wsid)
                                {
                                Form1->Label5->Caption = (WideString(lyr->Name));
                                Application->MessageBox("Cëîé_ROAD","Проверка",MB_ICONEXCLAMATION);
                                }
                //----- конец проверки. Успешно ---------
                 
                 
                 
                  OleVariant unusedParam1; //готовлю параметр для  _Item в цепочке поиска
                  unusedParam1.operator =(id);
                 
                  OleVariant unusedParam2; //готовлю пустой параметр для Search
                  unusedParam2.IsEmpty();
                 
                  CMapXFindFeature *FoundObj;
                  FoundObj = Form1->Map1->Layers->_Item(unusedParam1)->get_Find()->Search(WideString(Table2->FieldByName("ID")->AsString),unusedParam2);
                 
                  if (FoundObj->FindRC % 10 == 1)
                  {
                   ShowMessage("Yes");
                   Form1->Map1->Zoom = 30;
                   Form1->Map1->CenterX = FoundObj->get_CenterX();
                   Form1->Map1->CenterY = FoundObj->get_CenterY();
                  }
                  else
                   {
                    ShowMessage("No");
                   }
                 
                }

              Все время попадаю в секцию else.
              Если написать в Search первым параметром WideString(Table2->FieldValues["ID"]) вместо WideString(Table2->FieldByName("ID")->AsString возникает исключение (см.рисунок).
              Прикреплённая картинка
              Прикреплённая картинка
                Цитата Лена @
                Правда, пока не понимаю как передать пустой второй параметр в функции Search.
                Вообще его не указывать. На то и существуют в C++ параметры со значениями по умолчанию, что бы в данном случае вызов без указания второго параметра был бы эквивалентен пустому параметру.
                  Цитата Лена @
                  Слой "_ROAD" на последнем 48 месте

                  А индексация начинается с 0, или с 1?
                    Индексация в MapX начинается с 1, это относиться к слоям и фичам на слое...
                      Цитата Coala @
                      Mapxlib_tlb::CMapXFeatures* __fastcall Search(BSTR strWhere, VARIANT Variables/*[opt]*/= TNoParam());

                      Если следовать букве...то первый параметр типа BSTR должен создаваться примерно так:
                      ExpandedWrap disabled
                          WideString layName;
                          ...Search(layName.BSTR(),...);

                      Что касается второго параметра - Лена, что за метод TNoParam(), что там про это дело в хелпе сказано?
                        Цитата Coala @
                        Цитата Coala @
                        Mapxlib_tlb::CMapXFeatures* __fastcall Search(BSTR strWhere, VARIANT Variables/*[opt]*/= TNoParam());

                        Если следовать букве...то первый параметр типа BSTR должен создаваться примерно так:
                        ExpandedWrap disabled
                            WideString layName;
                            ...Search(layName.BSTR(),...);

                        Что касается второго параметра - Лена, что за метод TNoParam(), что там про это дело в хелпе сказано?

                        Cпасибо буду пробывать. Мысль layName.BSTR(),...); интересная.
                        По поводу вторго параметра, есть тольк информация в файле TLB и описание его для Делфи (ниже). Описание методов и примеров для Builder нет.

                        A string, which is the name of the refining boundary object. Used when a refining layer is specified. For example, "NY", "21135".
                        If a refine layer has been set, this argument is required; otherwise it is optional.

                        В Builder этот параметр не тип string, а Variant и судя по коду переделываемого мной приложения он не нужен. Речь идет о каком-то refining boundary object, котрый мы не определяем и поэтому в первом приложении было так
                        find = l_A.OlePropertyGet("Find").OleFunction("Search", Table2->FieldValues["ID"], "" );
                        второй параметр пустой.
                          Цитата Лена @
                          второй параметр пустой

                          Он не пустой, он - пустая строка.
                          Меня больше всего смущает его описание в хидере - тип VARIANT. Это в Дельфи - Variant и VARIANT - одно и то же...
                            Цитата Лена @
                            unusedParam2.IsEmpty();
                            IsEmpty не делает объект пустым, а проверяет объект на пустоту
                              Цитата trainer @
                              Цитата Лена @
                              unusedParam2.IsEmpty();
                              IsEmpty не делает объект пустым, а проверяет объект на пустоту

                              Тогда что выглядит более правильным:
                              OleVariant unusedParam2;
                              unusedParam2.IsNull(); //для второго параметра Search
                              или
                              OleVariant unusedParam2;
                              AnsiString Second ="";
                              unusedParam2.operator =(Second);
                                Лена, Variant и OleVarint - разные типы! Может тут... :(
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (10) 1 2 [3] 4 5 ...  9 10 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0760 ]   [ 15 queries used ]   [ Generated: 20.05.24, 00:40 GMT ]