cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 2018
-
27 déc. 2008 à 10:57
Utilisateur anonyme -
28 déc. 2008 à 10:49
Bonjour,
Dans l'unité d'un composant graphique TGrille, je défini plusieurs Type intermédiaires qui sont utilisés
dans le Type TGrille.
Dans le principe des déclarations forward de procédures, j'ai voulu déclarer le Type TGrille avant
les autres type.
Mais j'obtiens l'erreur : Le Type TGrille n'est pas complètement défini.
Si je complète cette première déclaration par TGrille = class(TGraphicControl); L'erreur devient type redéclaré.
Comment faire? Y a t-il une décaration typeforward pour les Types?
Type
TGrille = class; // ER : TGrille n'est pas complètement défini
cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 20183 27 déc. 2008 à 16:06
J'ai trouvé!
Mille milliards de Saperlipopettes! j'ai trouvé...
L'erreur vient du fait que j'ai mis le mot réservé Type une deuxième fois avant ma deuxième déclaration de TGrille (En rouge)! il faut l'enlever et ça compile Impeccable!
Type
TGrille = class; // ER : TGrille n'est pas complètement défini
Je ne comprends pas ...
En général quand tu reçois cette erreur c'est que tu tentes d'appeller recursivement un type dans le même type. Regarde, ce code là bug :
type
TMonType=record
Str: String;
MonTypeEnRecursif: TMonType; // Le type TMonType n'est pas encore complètement défini.
MonInt: Integer;
end;
Donc, ton problème vient de ce qu'il y ait un appel récursif de TColorGrille à TGrille :
TColorGrille = class(TCollection)
private
FGrille : TGrille; // Appel de TGrille depuis TColorGrille
...
end;
TGrille = class(TGraphicControl)
private
...
FGrilleColor : TColorGrille; // Appel de TColorGrille depuis TGrille
...
end;
Voilà, il faudrait arranger cela ... mais je ne vois pas encore comment.
cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 20183 27 déc. 2008 à 15:36
Merci Bacterius pour tes reflexions.
Effectivement, si je m'en tiens au code que j'ai posté, il n'y a pas d'erreur à la compilation. La déclaration
TGrille = class;donnée dans l'aide Delphi est donc valable.
Je pense donc que c'est dans mon code qu'il y a peut-être comme tu dis un appel récursif ou qlq chose qui ne lui plait pas. Je vais essayer d'isoler le code qui plante.
La ligne TGrille = class; // ER : TGrille n'est pas complètement défini est optionnelle : tu n'en as pas besoin ici (Sauf si tu nous as pas tout donné )
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 20183 27 déc. 2008 à 20:33
Salut Francky
Ben oui, je n'avais pas tout donné, t'imagines plus de 1000 lignes pour l'instant, je n'en suis qu'au début! TGrille fait appel à la création d'une TCollection : items etc...pour définir des paramètres couleur dans la Grille.
En fait, je passe par une TCollection, mais je suis pas sûr que ce soit la meilleure solution pour mon problème. Mon but étant de mémoriser dans le composant quelques paramètres de définition de grilles utilisables par l'utilisateur avec possibilités pour ce dernier d'en rajouter lui-même des personnalisées (couleurs essentiellement). Je voulais éviter de passer par un fichier!
Qu'en penses-tu?