Bonjour,
Dans un TTreeNode, j'utilise Data pour pointer sur différente données. J'utilise donc un case of dans un record :
puis un exemple de 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 type t1 = record entier : Integer ; end ; pt1 = ^t1 ; t2 = record chaine : string ; end ; pt2 = ^t2 ; tGlobal = record case genre : char of 'I' : eInt : pt1 ; 'S' : eString : pt2 ; end ; pGloabl = ^tGlobal ;
ne comprenant pas trop comment ça fonctionne, j'ai lu la FAQ
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 procedure xxx ; var vt1 : pt1 ; vt2 : pt2 ; vGlobal : pGlobal ; begin { Création d'un entier } New(vt1) ; vt1^.entier := 1 ; New(vGlobal) ; vGlobal^.Genre := 'I' ; if vGlobal^.Genre = 'I' then begin Dispose(vt1) ; New(vt1) ; vt1^.entier := 45 ; vGlobal^.eInt := vt1^ ; // Ici vGlobal^.eInt.entier = 45 end ; end ;
Ma question est toute bête comment Delphi fonctionne en mémoire faire cette gymnastique ?
Car ça ne revient pas au même que :
Le case revient en fait à une union en C ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 tGlobal = record eInt : pt1 ; eString : pt2 ; end ;
Et dans ce cas, en fait genre ne sert qu'à savoir le type de donnée ou sert-il à sélectionner le type de donnée ?.
Donc, on doit avoir dans tGlobal des données de même type. On ne peut pas avoir :
Mais peut-on avoir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 tGlobal = record case genre : char of 'I' : eInt : integer ; 'S' : eString : string ; end ;
Est-ce que je me trompe ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 tGlobal = record case genre : char of 'I' : eInt : ^integer ; 'S' : eString : ^string ; end ;
Partager