DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 2009
-
25 janv. 2006 à 13:51
DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 2009
-
25 janv. 2006 à 21:22
Salut les djeunz,
J'ai un petit problème. Pas grave grave, aisément contournable d'ailleurs, mais ca me turlupine:
Je développe une appli avec plusieures Forms, chacune remplissant une tache paticulière, et je comme dois partager des variables entre plusieures de ces form, je me suis crée une unit qui regroupe toute les variables strictement globales de mon appli.
Pour chaque Form, les variables concernant sa salade interne sont déclarée dans la form et hop, ca roole.
Le problème : J'ai un type record déclaré dans mon unit globale et une variable de ce type, appelons là C.
Dans une de mes Form j'utilise ce meme type de record (déclaré strictement de la meme manière) et j'ai 2 variables A & B. Dans cette form, mon unit globale est dans les Uses, pour pouvoir accéder à C.
Si dans ma form je fais A:= B, ca marche impec, mais au moment de faire C:=B, boom, type incompatible. Je fais donc
with B do begin " recopie champs à champs B vers C " end;
Ca marche mais bon voila quoi... pas glop.
Y aurait il un moyen pour résoudre ca, pour pouvoir écrire C: =B directement, ou que le type record en question soit compréhensible dans toute les forms de mon appli ?
DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 20092 25 janv. 2006 à 21:22
Bon ben j'ai trouvé, héhéh lol
"Afin de réduire les risques de références circulaires, il est préférable à chaque fois que cela est possible de lister les unités dans la clause uses de l'implémentation. C'est uniquement si des identificateurs d'une autre unité sont utilisés dans la section interface qu'il est nécessaire d'indiquer cette unité dans la clause uses de l'interface."
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 25 janv. 2006 à 14:42
salut,
si j'ai bien compris tu as redeclarer un type record dans une autre
form. Dans ce cas il et nomal que le compilateur que donne un message
d'erreur.
En effet chaque fois que tu déclares un type pour lui il s'agit
d'un nouveau et peu importe que sa structure soit strictement identique
( je te l'accorde il pourrait faire un controle à ce niveau mais il ne
le fait pas c'est comme çà)
pour éviter ce genre de désagréemnt il suffit de retenir :
nouvelle déclaration= nouveau type.
d'ailleurs pour s'en convaincre il suffit de faire dans la même form:
record1= record
A:integer;
end;
record2= record
A:integer;
end;
var
C:record1;D:record2;
C:=D;---->type incompatible;
dans ton cas déclares le type dans l'unité de 'service' regroupant tes
variables et utilises ce type sans le redéclarer dans les autres unités.
personnellement j'ai une form SetUp qui fait office d'unité de service
mais là c'est un choix personnel qui me permet de récupérer l'unité
dans toutes les applis.
DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 20092 25 janv. 2006 à 16:45
J'ai deux déclarations Use dans mes units qui ont une form, l'une sous Interface qui me liste tout les composants, l'autre sous Implémentation qui me liste les Unit accessibles. (enfin je l'ai fait comme ca, ca me permettait de tester chaque form indépendament comme un projet propre, avant de le fusionner au Grand Tout)
Si je mets mon Unit-variables-globales dans le Use sous Interface alors les types crées dans cette unit me sont accessibles et mon problème est résolu, si je le mets dans le Use sous Implémentation, ca foire....
Je crois que j'ai compris mais si qqun pouvait m'expliquer (avec des mots simples ) la différence entre un Use dans Interface et un Use dans Implémentation, et dans quel cas les utiliser, ca me rendrait bien service (paske j'ai une form principale, 6+ autres forms secondaires et 3 unit sans form , avec des interfaces matérielles vers le monde extérieur - GPS, camera, interface Bus Can, et un (ou plus) HID qui doivent travailler ensemble de manière homogène et fluide (quasi temps réel)... et je me suis lancé dans cette histoire en ayant oublié pas mal des notions de POO et de portée des variables, my bad.
Euh sorry pour le post en double dans le forum, y a eut rebond.