Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.07.2009, 10:40
Аватар для artzub
artzub artzub вне форума
Прохожий
 
Регистрация: 12.08.2008
Адрес: крск
Сообщения: 12
Репутация: 10
По умолчанию OLE Коллекции

Добрый день!

Помогите разобраться с коллекциями. Проблема в следующем:

есть com-server WinPrice.WPLib ладно в общем код:
Код:
              
var
   WinPrice,
   Profile,
   Query : OleVarian;
....
                    try                    
                        CoInitialize(nil);
                        WinPrice := CreateOleObject('WinPrice.WPLib');
                    except                       
                    end;

                    Profile := WinPrice.OpenProfile(ini.ReadString(IDFIRM, 'Profile', ''));                 
                    Query := Profile.CreateQuery;
                    Query.Comment := 'блабла';

                    {
                     в идеале должно быть так:
                     Query.DestPoint := Profile.DestPoints(ClientID);  
                     но выдает ошибку Член Группы не найден!
                    }

                    for I := 0 to Profile.DestPoints.Count - 1 do
                    begin
                         // нормально UID показывает
                         if Profile.DestPoints.Item[i].UID = ClientID then
                              // выдает ошибку Член группы не найде
                              Query.DestPoint := Profile.DestPoints.Item[i];                                
                    end; 

Вот кусок описания WPA
Цитата:
Коллекция DestPoints

Коллекция DestPoints содержит все доступные адреса доставки. Элементами коллекции являются объекты WPDestPoint. В качестве индекса при обращении к элементам коллекции можно использовать либо числовой индекс (первый элемент имеет индекс 0), либо уникальный идентификатор пункта доставки (см. свойство UID объекта WPDestPoint).
__________________
Жизнь хитрая штука - как только все карты на руках — она решает сыграть с тобой в шахматы
Ответить с цитированием
  #2  
Старый 21.07.2009, 14:05
Аватар для artzub
artzub artzub вне форума
Прохожий
 
Регистрация: 12.08.2008
Адрес: крск
Сообщения: 12
Репутация: 10
По умолчанию Решение

Код:
var
objEn : IUnknown;
IEnum : IEnumVariant;
ObjEnum : OleVariant;
Fetched : Cardinal;

.....

objEn := Profile.DestPoints._NewEnum;
OleCheck(objEn.QueryInterface(IEnumVariant, IEnum));

while Succeeded(IEnum.Next(1, ObjEnum, Fetched)) do
begin
    if Fetched = 0 then
      Break;
    if ObjEnum.UID = ini.ReadString(idFirm, 'ClientID' + tempStr, '') then
    begin
        Query.DestPoint := ObjEnum;
        break;
    end;
  //В ObjEnum очередной DestPoint
end;
__________________
Жизнь хитрая штука - как только все карты на руках — она решает сыграть с тобой в шахматы
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:11.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025