Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

аналог for each


mariya_mezenceva ©   (2006-03-30 09:49:00) 

есть ли в delphi аналог конструкции VB
for each ... in ...
next
подскажите, пожайлуста


Сергей М.   (2006-03-30 15:17:00) [1]


> mariya_mezenceva ©   (30.03.06 15:08) [19]


Тип данных OleVariant на то и есть OleVariant, что может хранить в каждый конкретный момент времени данные более чем одного базового типа - и integer, и string, и boolean ...

Не почитать ли тебе умный букварь по Делфи, прежде чем бросаться в дебри олей-программинга ?


mariya_mezenceva   (2006-03-30 15:08:00) [2]

я же написала
item[index:OleVariant]
OleVariant а не integer
поэтому у меня и возникли проблемы


Сергей М.   (2006-03-30 13:21:00) [3]

Впрочем, если св-во Count у объекта-коллекции, имеющего св-во Item, действительно отсутствует, наводит на мысль о "кривизне рук" разработчиков данного ПО. Но и в этом случае, думаю, можно "совершить подвиг", примерно так:

const
 SomeLowestItemIndex = 0; //иногда элементы коллекции индексируются начиная с единицы, это следует проверить (см. документацию и практ.эксперимент)

var
 CollectionIndex: Integer;
 SomeCollectionObject: OleVariant;
 SomeCollectionItemObject: OleVariant;
..

CollectionIndex := SomeLowestItemIndex;
while True do
 try
   SomeCollectionItemObject := SomeCollectionObject.Item[CollectionIndex];
   ..
   Inc(CollectionIndex);
 except
   on e: EOleSysError do Break;
 end;


Сергей М.   (2006-03-30 13:03:00) [4]

Что, ни у одного из объектов, имеющих св-во Item, рпи этом нет св-ва Count ?!

Что-то слабо верится в это ...


mariya_mezenceva   (2006-03-30 12:55:00) [5]

есть только item[index:OleVariant]
т.е. обращаться можно только указывая ссылку на объект коллекции


Сергей М.   (2006-03-30 12:22:00) [6]


> как импортировать?


В главном меню Delphi выбери "Project | Import Type Library..".

Следуй инструкциями в стандартной справке по теме "type libraries, importing"


Плохиш   (2006-03-30 12:15:00) [7]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1143617371&n=1


mariya_mezenceva   (2006-03-30 12:00:00) [8]

как импортировать?


Сергей М.   (2006-03-30 11:58:00) [9]


> это erwin
> там такого свойства нет


Импортируй библ-ку типов erwin'а и убедись, что нечто похожее и там должно быть.


mariya_mezenceva   (2006-03-30 11:38:00) [10]

просто в моем случае это erwin
там такого свойства нет


Сергей М.   (2006-03-30 11:18:00) [11]


> mariya_mezenceva ©   (30.03.06 10:43) [6]
> работаю через ole


олей-серверы, если  они создают какие-либо объекты-коллекции, как правило поддерживают соответствующий интерфейс для обращения к коллекциям.

Например, в Excel св-во Workbooks объекта Application как раз и возвращает ссылку на объект-коллекцию. Обращение к св-ву Worbooks.Count даст число элементов в коллекции, а обращение к св-ву Worbooks.Items[i] вернет ссылку на объект Workbook, являющийся i-ым коллекции Worbooks.

var
 Books, Book: Olevariant;
 i: Integer;
..
 for i := 1 to Books.Count do
   Book := Books.Items[i]; //получение очередного объекта из коллекции


begin...end   (2006-03-30 11:15:00) [12]

> mariya_mezenceva ©   (30.03.06 10:43) [6]

Тогда почему в [4] шла речь о множествах ?


mariya_mezenceva   (2006-03-30 11:10:00) [13]

эх...
ну неужели vb в этом функциональней моего любимого delphi
эх......


Плохиш   (2006-03-30 10:51:00) [14]


> mariya_mezenceva ©   (30.03.06 10:16) [4]
> как тогда можно перебирать элементы множества, к которому
> нельзя обращаться по индексу?

В делфи таких типов нет.


mariya_mezenceva   (2006-03-30 10:43:00) [15]

не подходит
я работаю через ole
выбираю коллекцию объектов
и мне нужно перебрать эти объекты


begin...end   (2006-03-30 10:19:00) [16]

> mariya_mezenceva ©   (30.03.06 10:16) [4]

var
 MySet: set of TMyType;
 I: TMyType;
begin
 for I := Low(TMyType) to High(TMyType) do
   if I in MySet then
     ...
end


mariya_mezenceva   (2006-03-30 10:16:00) [17]

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


MBo   (2006-03-30 10:13:00) [18]

нет.
Да и не вижу большого смысла.


mariya_mezenceva   (2006-03-30 10:00:00) [19]

в 7 есть?


MBo   (2006-03-30 09:56:00) [20]

В последних версиях Дельфи есть


Наверх

Титульная страница Поиск, карта сайта Написать письмо