A l'aide de la souris ou du clavier, sélectionnez plusieurs ligne, ensuite appuyez sur CTRL+/
Ce raccourcis clavier permet de mettre la sélection en commentaire (ajout de // à chaque début de ligne).
Rappelez le raccourcis pour supprimer les commentaires.
Très utile.
Avec Delphi 2009 et l'apparition des type générique (classe ou enregistrement) il faut bien sur pouvoir avoir des informations sur les types.
Delphi nous fournis donc quelques fonctions utiles par le biais de quelques unités :
Generics.Defaults, TypInfo, IntfInfo
Les fonctions :
SizeOf -> vous la connaissez surement, elle permet de récupérer la taille en octet d'un type, cette dernière est compatible avec les types générique.
TypeInfo -> permet de récupérer des informations sur le type (type entier, flottant, ordinal, enregistrement, classe, interface ...).
GetTypeData -> permet de récupérer des informations sur la donnée du type
(type byte, word, single, char, string, widechar ...)
GetTypeName -> permet de récupérer le nom du type (integer, byte, string ...)
Default -> mets la donnée à sa valeur nulle (zero, nil)
mise en place :
au moment de la déclaration de votre classe ou record générique vous pouvez imaginer cette déclaration :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| type
TGenericPoint<T> = record
public
X, Y : T;
public
function _Size: integer; // renvois la taille du type T
function _Info: pTypeInfo; // renvois les infos du type T
function _Data: pTypeData; // renvois les infos de la données du type T
function _Name: string; // renvois le nom du type T
procedure _Zero; // mets à zéro X et Y peu importe le type de T
end;
TSmallPoint = TGenericPoint<SmallInt>;
TPoint = TGenericPoint<Integer>;
TPointF = TGenericPoint<Single>;
TBigPoint = TGenericPoint<Int64>;
TBigPointF = TGenericPoint<Double>; |
voila pour l'interface, voyons l'implémentation :
Code:
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
|
function TGenericPoint<T>._Name: string;
begin
result := GetTypeName(TypeInfo(T));
end;
function TGenericPoint<T>._Size: integer;
begin
result := SizeOf(T) shl 1;
end;
function TGenericPoint<T>._Info: pTypeInfo;
begin
result := pTypeInfo(TypeInfo(T));
end;
function TGenericPoint<T>._Data: pTypeData;
begin
result := pTypeData(GetTypeData(_Info));
end;
procedure TGenericPoint<T>._Zero;
begin
X := Default(T);
Y := Default(T);
end; |