Mais je trouve ca moche . Je me demandais s'il y avait pas un moyen de faire une boucle, un truc du genre :
Final.TCustomCollectionItem(Index).Time:=15*(Index+1);. Si quelqu'un a une idée (Même si je dois retoucher pas mal de chose), je suis prenneur.
function TFinal.GetAsTA(const index: integer): TA;
begin
result := TA(fABC[index]);
end;
function TFinal.GetAsTB(const index: integer): TB;
begin
result := TB(fABC[index]);
end;
function TFinal.GetAsTC(const index: integer): TC;
begin
result := TC(fABC[index]);
end;
function TFinal.GetItem(index: integer): TCustomCollectionItem;
begin
result := fABC[Index];
end;
procedure TFinal.SetAllDoubleTime(const DblTmA, DblTmB, DblTmC: single);
begin
if Assigned(fABC[0]) then fABC[0].DoubleTime := DblTmA;
if Assigned(fABC[1]) then fABC[1].DoubleTime := DblTmB;
if Assigned(fABC[2]) then fABC[2].DoubleTime := DblTmC;
end;
procedure TFinal.SetAllSameDoubleTime(const DblTmABC: single);
begin
if Assigned(fABC[0]) then fABC[0].DoubleTime := DblTmABC;
if Assigned(fABC[1]) then fABC[1].DoubleTime := DblTmABC;
if Assigned(fABC[2]) then fABC[2].DoubleTime := DblTmABC;
end;
procedure TFinal.SetAllSameTime(const TmABC: single);
begin
if Assigned(fABC[0]) then fABC[0].Time := TmABC;
if Assigned(fABC[1]) then fABC[1].Time := TmABC;
if Assigned(fABC[2]) then fABC[2].Time := TmABC;
end;
procedure TFinal.SetAllTime(const TmA, TmB, TmC: single);
begin
if Assigned(fABC[0]) then fABC[0].Time := TmA;
if Assigned(fABC[1]) then fABC[1].Time := TmB;
if Assigned(fABC[2]) then fABC[2].Time := TmC;
end;
procedure TCustomCollectionItem.Assign(Source: TPersistent);
begin
if (source is TCustomCollectionItem) then
with TCustomCollectionItem(Source) do
begin
Self.fTime := fTime;
Self.fDoubleTime := fDoubleTime;
Self.fItemType := fItemType;
end
else
inherited Assign(source);
end;
function TCustomCollectionItem.GetDisplayName: string;
begin
result := '<'+IntToStr(Self.Index)+'>';
end;
{ TA }
procedure TA.Assign(Source: TPersistent);
begin
if (source is TA) then
begin
fPenColor := TA(source).fPenColor;
inherited assign(TCustomCollectionItem(Source));
end
else
inherited Assign(source);
end;
function TA.GetDisplayName: string;
begin
result := inherited GetDisplayName+' type A';
end;
{ TB }
procedure TB.Assign(Source: TPersistent);
begin
if (source is TB) then
begin
fGrid := TB(source).fGrid;
inherited assign(TCustomCollectionItem(Source));
end
else
inherited Assign(source);
end;
function TB.GetDisplayName: string;
begin
result := inherited GetDisplayName+' type B';
end;
{ TC }
procedure TC.Assign(Source: TPersistent);
begin
if (source is TC) then
begin
fLabel := TC(source).fLabel;
inherited Assign(TCustomCollectionItem(Source));
end
else
inherited Assign(source);
end;
@Guillemouze : J'ai pensé à ta méthode mais en fait elle ne répond pas tout à fait à ma problématique . En effet il faut que A soit déclaré comme un TA et non un TCustomCollectionItem (Idem pour B et C). En fait je cherche à utiliser dans un premier uniquement les propriétés de A, B et C relatives à TCustomCollectionItem. Puis apres (mais c'est la seconde étape et elle a lieu dans une autre procédure ) utilisér les propriétés spécifiques à A ou à B ou à C.
@f0xi : ca répond à ma demande. Ceci dit j'ai une question : Ai je besoin de définir le create dans TCustomCollectionItem dans la mesure ou dans TA un create est définit (Idem pour TB et TC) et qu'il ne s'agit pas d'un vrai héritage dans ce cas (enfin je me comprend).
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 12 mai 2009 à 21:14
moi je me demande surtout pourquoi tu as utilisé TCollectionItem alors que tu n'utilise pas de TCollection, et que tu n'ai pas penser a utiliser TPersistent a la place puisque placé dans un TComponent...
<hr size="2" width="100%" />
Vous n’avez pas trouvé la réponse que vous recherchez ?
@f0xi : A mais si si, j'utilise TCollection : je te rassure .
En fait je l'avais souligné au tout début de ma question : il s'agit juste du principe. Ca n'a rien de confidentiel, seulement le composant fait 1500 lignes : j'ai préféré vous épargner une séance de spéléologie (surtout qu'il y a des implications de collection) et rentrer dans le vif du sujet. Maintenant effectivement présenté comme ca, je peux comprendre que cela peut paratre stupide