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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
unit FormTest;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
ThciFormTest = class(TForm)
hciButtonVersion1: TButton;
hciButtonVersion2: TButton;
hciButtonVersion3: TButton;
procedure hciButtonVersion1Click(Sender: TObject);
procedure hciButtonVersion2Click(Sender: TObject);
procedure hciButtonVersion3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
// --- Version 1 ---
PRMyRecord1 = ^TRMyRecord1;
TRMyRecord1 = record
ReadOnly : Boolean;
Enabled : Boolean;
{ CE QUI SUIT EST IMPORTANT : "class procedure" }
class procedure New(var pv_PRMyRecord1 : PRMyRecord1); static;
end;
// ------
// --- Version 2 ---
PRMyRecord2 = ^TRMyRecord2;
TRMyRecord2 = record
ReadOnly : Boolean;
Enabled : Boolean;
{ CE QUI SUIT EST IMPORTANT : "constructor" }
constructor New(var pv_PRMyRecord2 : PRMyRecord2);
end;
// ------
// --- Version 3 ---
PRMyRecord3 = ^TRMyRecord3;
TRMyRecord3 = record
ReadOnly : Boolean;
Enabled : Boolean;
end;
{ CE QUI SUIT EST IMPORTANT : "InitializedTRMyRecord3" }
const
InitializedTRMyRecord3 : TRMyRecord3 = (ReadOnly : True; Enabled : False);
// ------
var
hciFormTest: ThciFormTest;
implementation
{$R *.dfm}
// --- Version 1 ---
class procedure TRMyRecord1.New(var pv_PRMyRecord1 : PRMyRecord1);
begin
// il faut préfixer le "New" par "System" afin que le compilateur n'appelle pas
// la fonction "New" ici présente ... et dise qu'il y a trop de paramètres ...
System.New(pv_PRMyRecord1);
// Initialisation des champs du record
pv_PRMyRecord1.ReadOnly := true;
pv_PRMyRecord1.Enabled := false;
end;
// --- Version 1 ---
procedure ThciFormTest.hciButtonVersion1Click(Sender: TObject);
var
ptrPRMyRecord1 : PRMyRecord1;
begin
TRMyRecord1.New(ptrPRMyRecord1); // IL FAUDRAIT AJOUTER "TRMyRecord1." devant tous les appels à "New" dans le code existant
ShowMessage('ptrPRMyRecord.ReadOnly = ' + BoolToStr(ptrPRMyRecord1.ReadOnly, true) + #13#10 +
'ptrPRMyRecord.Enabled = ' + BoolToStr(ptrPRMyRecord1.Enabled, true));
end;
// --- Version 2 ---
constructor TRMyRecord2.New(var pv_PRMyRecord2 : PRMyRecord2);
begin
// il faut préfixer le "New" par "System" afin que le compilateur n'appelle pas
// la fonction "New" ici présente ... et dise qu'il y a trop de paramètres ...
System.New(pv_PRMyRecord2);
// Initialisation des champs du record
pv_PRMyRecord2.ReadOnly := true;
pv_PRMyRecord2.Enabled := false;
end;
// --- Version 2 ---
procedure ThciFormTest.hciButtonVersion2Click(Sender: TObject);
var
ptrPRMyRecord2 : PRMyRecord2;
begin
TRMyRecord2.New(ptrPRMyRecord2); // IL FAUDRAIT AJOUTER "TRMyRecord2." devant tous les appels à "New" dans le code existant
ShowMessage('ptrPRMyRecord.ReadOnly = ' + BoolToStr(ptrPRMyRecord2.ReadOnly, true) + #13#10 +
'ptrPRMyRecord.Enabled = ' + BoolToStr(ptrPRMyRecord2.Enabled, true));
end;
// --- Version 3 ---
procedure ThciFormTest.hciButtonVersion3Click(Sender: TObject);
var
RMyRecord3 : TRMyRecord3;
begin
RMyRecord3 := InitializedTRMyRecord3; // Là on a un record directement initialisé, mais pas de pointeur !
ShowMessage('RMyRecord3.ReadOnly = ' + BoolToStr(RMyRecord3.ReadOnly, true) + #13#10 +
'RMyRecord3.Enabled = ' + BoolToStr(RMyRecord3.Enabled, true));
end;
end. |
Partager