Copie de record à record impossible ?

Résolu
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 25 janv. 2006 à 13:51
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Derniè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 ?

4 réponses

DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
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."
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
25 janv. 2006 à 14:03
Salut,
je ne sais pas si j'ai bien compris mais tu fais :

dans Form1 par Ex
Record1 = Record
Nom : String[10];
Prenon : String[10];
...
End;

Var c : Record1;

et dans Form2
Record2 = Record
Nom : String[10];
Prenon : String[10];
...
End;

Var a,b : Record2;

donc a := b ; OK
Mais c := B; ça plante

a mon avis si tu déclares
Var a, b : Record1; // donc de la Form1

tu peux faire a:= b; et c:= a;



@+
Cirec
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
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.



@+

jlen
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
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.
0
Rejoignez-nous