Passage de variable(s) d'une fiche à une autre (Delphi 7)

Résolu/Fermé
Magicien13005 - 10 sept. 2013 à 20:23
 Magicien13005 - 16 sept. 2013 à 14:19
Bonjour,

Je souhaiterais utiliser dans la fiche principale (Form1) d'une application une variable initialisée dans une fiche secondaire (Form2). Le problème, c'est que cette variable semble se perdre en route... :-( Et que je place la clause 'uses Form1' ou 'uses Form2' dans la partie interface ou dans la partie implémentation n'y change rien. Comment récupérer ma variable perdue ?

Merci de vos lumières.
A voir également:

3 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
11 sept. 2013 à 11:00
Salut Magicien13005,

Disons que ta variable se trouve dans unit1.

Dans ta unit1, tu as un objet TForm qui décrit ta "fiche". Pour pouvoir accéder à une variable déclarée dans un objet depuis l'extérieur, tu la mets dans la partie "public".

interface
(...)

type
TForm2 = class(TForm)
ScrollBar: TScrollBar;
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
TestSt: String;
{ public declarations }
end;

var
Form2: TForm2;

implementation
(...)

procedure TForm2.FormCreate(Sender: TObject);
begin
TestSt := 'test';
end;
(...)
Ensuite, dans la Unit où tu veux accéder à cette variable, tu mets "unit1" dans les "uses".

Puis :

ShowMessage('Form2.TestSt is: ' + Form2.TestSt);
Devrait afficher le contenu de la variable.

Cela fonctionne ainsi, du moins avec Lazarus et Free Pascal Compiler, et cela devrait marcher de la même manière avec Delphi.


Dal
0
Magicien13005
11 sept. 2013 à 15:24
Bonjour Dal,

Ta méthode ne semble pas fonctionner. En fait, je cherche à "porter" sous Windows un petit jeu que j'avais écrit il y a bien longtemps en Turbo-Pascal. Évidemment, le problème des variables globales ne se posait pas de la même façon ;-) . Je vais essayer de reprendre l'algorithme à zéro de façon à avoir une seule fiche.

Merci de ton aide.
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 11/09/2013 à 17:31
Comme présenté dans mon exemple, ce n'est pas une variable globale.

C'est une variable contenue dans la partie "public" d'un objet de type TForm, lui même instancié dans la partie var de l'interface de ton unité (et initialisé dans la partie implémentation).

On utilise la possibilité offerte par le Pascal Objet d'exposer une partie d'un objet afin d'en permettre l'utilisation par d'autres éléments du programme.

Une autre façon de faire est de créer une fonction dans la partie publique de ton objet, qui renvoie le contenu de la variable (qui peut rester protégée dans la partie privée de l'objet), et une autre fonction pour la modifier. Ainsi, ton objet maîtrise la lecture et, surtout, la modification de cette variable pour s'assurer qu'elle est utilisée de façon cohérente. Elle sera inaccessible directement, afin de la protéger, mais accessible indirectement par les fonctions prévues à cet effet.


Dal
0
Magicien13005
16 sept. 2013 à 14:19
Bonjour,

Mea culpa, il s'agissait d'une erreur de programmation de ma part. Comme je l'ai dit, je voulais porter sous Windows un jeu écrit en Turbo Pascal. J'ai dû "saucissonner" le source en trois unités et rajouter un peu de code pour lier le tout, et... j'ai déclaré deux fois la même variable, dans Unit1 et Unit2. De retour dans Unit1, le compilateur, apparemment, prenait en compte la variable déclarée dans Unit1 et qui n'était donc pas initialisée, d'où un plantage du programme. Je vieillis mal... ;-)

Merci de tes conseils, je promets de faire plus attention la prochaine fois...
0