Copie de record à record impossible ? [Résolu]

Messages postés
459
Date d'inscription
lundi 19 avril 2004
Dernière intervention
8 avril 2009
- 25 janv. 2006 à 13:51 - Dernière réponse :
Messages postés
459
Date d'inscription
lundi 19 avril 2004
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 ?
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Dernière intervention
8 avril 2009
- 25 janv. 2006 à 21:22
3
Merci
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."

Merci DeltaFX 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de DeltaFX
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 25 janv. 2006 à 14:03
0
Merci
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
Commenter la réponse de Cirec
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
- 25 janv. 2006 à 14:42
0
Merci
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
Commenter la réponse de jlen100
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Dernière intervention
8 avril 2009
- 25 janv. 2006 à 16:45
0
Merci
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.
Commenter la réponse de DeltaFX

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.