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
|
//------------------------------------------------------------------------------
(* SoLuTions is an Versatile Library for Delphi -
* -
* Copyright ou © ou Copr. "SLT Solutions", (2006) -
* contributeur : ShaiLeTroll (2012) - Renommage Fichier et Correction XE2 -
* contributeur : ShaiLeTroll (2012) - Documentation Insight -
* -
* -
* Ce logiciel est un programme informatique servant à aider les développeurs -
* Delphi avec une bibliothèque polyvalente, adaptable et fragmentable. -
* -
* Ce logiciel est régi par la licence CeCILL-C soumise au droit français et -
* respectant les principes de diffusion des logiciels libres. Vous pouvez -
* utiliser, modifier et/ou redistribuer ce programme sous les conditions -
* de la licence CeCILL-C telle que diffusée par le CEA, le CNRS et l'INRIA -
* sur le site "http://www.cecill.info". -
* -
* En contrepartie de l'accessibilité au code source et des droits de copie, -
* de modification et de redistribution accordés par cette licence, il n'est -
* offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, -
* seule une responsabilité restreinte pèse sur l'auteur du programme, le -
* titulaire des droits patrimoniaux et les concédants successifs. -
* -
* A cet égard l'attention de l'utilisateur est attirée sur les risques -
* associés au chargement, à l'utilisation, à la modification et/ou au -
* développement et à la reproduction du logiciel par l'utilisateur étant -
* donné sa spécificité de logiciel libre, qui peut le rendre complexe à -
* manipuler et qui le réserve donc à des développeurs et des professionnels -
* avertis possédant des connaissances informatiques approfondies. Les -
* utilisateurs sont donc invités à charger et tester l'adéquation du -
* logiciel à leurs besoins dans des conditions permettant d'assurer la -
* sécurité de leurs systèmes et ou de leurs données et, plus généralement, -
* à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. -
* -
* Le fait que vous puissiez accéder à cet en-tête signifie que vous avez -
* pris connaissance de la licence CeCILL-C, et que vous en avez accepté les -
* termes. -
* -
*----------------------------------------------------------------------------*)
unit SLT.Common.ClassesEx;
interface
uses
System.Classes;
type
/// <summary>Boite à outil pour la classe TStrings</summary>
/// <remarks>Le TStringsSLTToolHelp n'est pas un class helper car lors de sa création en 2002 sous Delphi 5, le code était procédural,
/// lors de la refonte en classe en 2007, la version utilisée était Delphi 7, en s'inspirant du concept des Assistances de classes (Class Helper) du Delphi.NET
/// <para>En XE2, la TStringList offre une propriété OwnsObjects (n'existe pas dans la TStrings) qui se comportent comme celle d'une TObjectList, cela remplace ClearStringsAndObjects</para></remarks>
TStringsSLTToolHelp = class(TObject)
public
class procedure FreeAndNilObjects(AList: TStrings); static;
class procedure ClearStringsAndObjects(AList: TStrings); static;
class procedure CloneStringsAndPersistentObjects(ASourceList: TStrings; ADestinationList: TStrings);
end;
implementation
{ TStringsSLTToolHelp }
//------------------------------------------------------------------------------
class procedure TStringsSLTToolHelp.ClearStringsAndObjects(AList: TStrings);
begin
if Assigned(AList) then
begin
FreeAndNilObjects(AList);
AList.Clear();
end;
end;
//------------------------------------------------------------------------------
class procedure TStringsSLTToolHelp.CloneStringsAndPersistentObjects(ASourceList: TStrings; ADestinationList: TStrings);
var
I: Integer;
S: string;
Obj, ObjD: TObject;
begin
if Assigned(ASourceList) and Assigned(ADestinationList) then
begin
ADestinationList.BeginUpdate();
try
ClearStringsAndObjects(ADestinationList);
for I := 0 to ASourceList.Count - 1 do
begin
S := ASourceList.Strings[I];
Obj := ASourceList.Objects[I];
if Assigned(Obj) then
begin
ObjD := Obj.ClassType().Create(); // Attention pas de polymorphisme à ce niveau car le TObject n'a pas de constructeur virtuel
(ObjD as TPersistent).Assign(TPersistent(Obj)); // Suppose une implementation de Assign qui assure le copie de l'objet, Exception sur l'opérateur "as" souhaité
ADestinationList.AddObject(S, ObjD);
end
else
ADestinationList.Add(S);
end;
finally
ADestinationList.EndUpdate();
end;
end;
end;
//------------------------------------------------------------------------------
class procedure TStringsSLTToolHelp.FreeAndNilObjects(AList: TStrings);
var
I: Integer;
Obj: TObject;
begin
if Assigned(AList) then
begin
for I := 0 to AList.Count - 1 do
begin
Obj := AList.Objects[I];
if Assigned(Obj) then
begin
AList.Objects[I] := nil;
Obj.Free();
end;
end;
end;
end;
end. |
Partager