j'ai essayé bêtement d'utiliser un "for Objet in Collection do" comme en VB, j'ai bien vu que çà marchait pas !

J'ai trouvé dans la FAQ "Comment remplacer l'instruction for each de VB ?" (merci la FAQ ) et le lien vers Encapsulation d'une interface IEnumVariant dans un itérateur. J'ai appliqué l'article de Laurent Dardenne (la partie avant la classe d'encapsulation) qui correspond à la méthode alternative de la FAQ pour arriver au code suivant qui fonctionne (omis parties inutiles) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  CollTiers   : IBICollection;
  Tiers       : IBOTiers3;
  IEnum       : IEnumVARIANT;
  Element     : OleVariant;
  Nombre      : LongWord;
 
IEnum := CollTiers._NewEnum as IEnumVARIANT;
while IEnum.Next(1, Element, Nombre) = S_OK do
begin
  Tiers := IUnknown(Element) as IBOTiers3;
  Writeln(Tiers.CT_Num);
end;
mais ensuite je me suis rendu compte que je pouvais aussi faire simplement :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
var
  CollTiers   : IBICollection;
  Tiers       : IBOTiers3;
  I           : Integer;
 
for I := 1 to CollTiers.Count do
begin
  Tiers := CollTiers.Item[I] as IBOTiers3;
  Writeln(Tiers.CT_Num);
end;
qui marche aussi et est beaucoup plus simple, alors pourquoi s'embêter avec la première méthode ?
Il doit y avoir quelque chose qui m'échappe