Bonjour
Etant débutant en delphi, J'aimerais savoir s'il est possible de créer une variable depuis une procedure (en cliquant sur un bouton par exemple), comment tester si elle existe et comment la détruire.
Merci
Pat-lion
Bonjour
Etant débutant en delphi, J'aimerais savoir s'il est possible de créer une variable depuis une procedure (en cliquant sur un bouton par exemple), comment tester si elle existe et comment la détruire.
Merci
Pat-lion
une variable existe après sa déclaration (var machin: DeTypeTrucet pour sa portée et sa visibilité : globale au programme, à une unité, une procédure... selon l'endroit où elle est déclarée.
elle peut ne pas être initialisée : variable pointant sur un objet : tant qu'il n'est pas créé, elle ne pointe sur "rien" (nil, car delphi initialise d'office la plupart des variables!)
après libération de l'objet, la variable pointe toujours sur cet objet, qui n'existe plus... => assigner nil à la variable
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 procedure TForm1.Button1Click; var test; TObject; begin if test=nil then ShowMessage('nil') else ShowMessage('impossible'); test:=TObject.Create; ShowMessage(BoolToStr(Assigned(test))); test.Free; ShowMessage(BoolToStr(Assigned(test))); test:=nil; ShowMessage(BoolToStr(Assigned(test))); test:=TObject.Create; FreeAndNil(test); // mieux !!! ShowMessage(BoolToStr(Assigned(test))); end;
Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
. Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !
Créer !
Disons que
tu peux créer un objet même visuel et l'ajouter à ta fiche.
Tu peux agrandir un tableau de variable et donc en "créer" une.
Tu peux instancier une variable via un créateur d'objet
Tu peux faire appel à une fonction, procédure ou méthode dans laquelle une ou des variables seront déclarées et les utiliser dans cette même méthode.
Prenons un cas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 TForm1.Butonclick(sender : tobject) begin insertcontrol(TButton.create(self)); // ajout d'un bouton on ne sait //pas où sur la fiche probablement en 0 0 end;
Précise ta question et l'utilité de ta crétion de variable
en fait, j'aimerais quelque-chose du genre :
procedure buttonclick:
begin
creervariable(nom:string,valeur:string);
end;
puis quelque chose du genre
if variableexists(nom:string) then ...
et
detruirevariable(nom:string);
pour que la variable soit disponible pour toutes les procedures de la form
pas vraiment prévu ! et pas simple...
regarde les array of variant ?
sinon, un TList avec des noms et valeurs associées
[EDIT] mais pour être global, il faut déclarer le tableau ou la liste dans la section var de l'unité
Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
. Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !
salut pat-lion
intéressant ton problème... si tu trouves une solution je suis preneur...
Ceci dit je suis un peut perplexe car je ne voit pas comment tu peux creer une variable dans une fonction ou procédure (donc locale a cette variable ou procédure) et "jouer" avec cette meme variable dans une autre fonction ou procedure (il y a un probleme de visibilité qui se pose la)
Enfin je vais suivre car si y a une solution, je répéte, je suis preneur.
![]()
Utilise un TList et un record
si l'idée te séduit je te laisse le soin de tester et de terminer le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 Type My_Variable = record Nom : string; Valeur : String; end; PMy_Variable = ^My_Variable; TForm1 = class(TForm) private ListV : TStringList; procedure creervariable(nom:string,valeur:string); end procedure tform1.creervariable(nom:string,valeur:string); Var idx : integer; V : PMy_Variable ; begin if Not Assigned(ListV) then begin ListV := TStringList.create; ListV.Sorted := true; end; idx := ListV.IndexOf(nom); if idx=-1 then begin New(V); V.Nom := nom; V.Valeur := valeur; ListV.AddOject(nom,V); end else begin PMy_Variable(ListV.Ojects[idx])^.Valeur := valeur; end; end;
a+
Partager