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) :
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
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;
qui marche aussi et est beaucoup plus simple, alors pourquoi s'embêter avec la première méthode ?
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;
Il doit y avoir quelque chose qui m'échappe
Partager