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 130 131 132
|
unit Unit4;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TParam = class ( TPersistent )
private
FID : Integer;
public
constructor Create(pID : Integer);
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
end;
TParams = class ( TObject )
public
FList : TStringList;
constructor Create(); overload;
destructor Destroy; override;
procedure Assign( Source: TParams );
procedure AddParam( pLib : String; pParam: TParam);
function Duplicate(): TParams;
end;
TForm4 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
{ TParams }
procedure TParams.AddParam(pLib: String; pParam: TParam);
begin
self.FList.AddObject(pLib, pParam);
end;
procedure TParams.Assign(Source: TParams);
var
iCptObj: Integer;
lParam : TParam;
begin
if ( Source is TParams ) then
begin
FList.Assign( Source.FList );
for iCptObj := 0 to FList.Count-1 do
begin
FList.Objects[iCptObj] := TParam.Create(-1);
lParam := TParam(FList.Objects[iCptObj]);
lParam.Assign( Tparam(Source.FList.Objects[iCptObj]));
end;
end;
end;
constructor TParams.Create;
begin
FList := TStringList.Create(true);
end;
destructor TParams.Destroy;
begin
FList.Clear;
FreeAndNil( FList );
inherited;
end;
function TParams.Duplicate: TParams;
begin
Result := TParams.Create();
Result.Assign( self );
end;
{ TParam }
procedure TParam.Assign(Source: TPersistent);
begin
//inherited;
FID := TParam(Source).FID;
end;
constructor TParam.Create(pID: Integer);
begin
FID := pID;
end;
procedure TForm4.Button1Click(Sender: TObject);
var
Params1 : TParams;
Params2 : TParams;
lParam : TParam;
icptParam: Integer;
lMsg : String;
begin
Params1 := TParams.Create;
lParam := TParam.Create(1);
Params1.AddParam('UN', lParam);
lParam := TParam.Create(2);
Params1.AddParam('DEUX', lParam);
Params2 := Params1.Duplicate;
for icptParam := 0 to Params2.FList.Count-1 do
begin
lMsg := Params2.FList[icptParam] + ' '+IntToStr(TParam(Params2.FList.Objects[icptParam]).FID);
ShowMessage('Params2['+ IntToStr(icptParam)+ '] : ' + lMsg);
end;
Params1.Free;
Params2.Free;
end;
destructor TParam.Destroy;
begin
ShowMessage('Destruction TPAram');
inherited;
end;
end. |
Partager