par , 22/08/2016 à 12h41 (729 Affichages)
Free Pascal propose des propriétés qui n'ont besoin ni d'une classe ni d'une instance de classe comme support, mais dont la déclaration s'appuie sur des fonctions et procédures ordinaires. Elles se déclarent dans des blocs globaux comme l'interface d'une unité et se comportent comme des propriétés de classe.
Ce type de propriété se différencie des variables ordinaires par sa souplesse : il permet de vérifier ou de calculer une valeur avant de l'affecter à la propriété et éventuellement de cacher le calcul de cette valeur dans une autre unité.
Un code comme le suivant est par conséquent tout à fait envisageable :
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
| unit main;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls;
type
{ TMainForm }
TMainForm = class(TForm)
btnGo: TButton;
lblResult: TLabel;
lblEdit: TLabeledEdit;
procedure btnGoClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
function GetMyProperty: string;
procedure SetMyProperty(const St: string);
property MyProperty: string read GetMyProperty write SetMyProperty;
var
MainForm: TMainForm;
implementation
{$R *.lfm}
var
fMyProperty: string;
function GetMyProperty: string;
begin
Result := fMyProperty;
end;
procedure SetMyProperty(const St: string);
begin
if St <> '' then
fMyProperty := UpperCase(St)
else
raise Exception.Create('Chaîne vide interdite !');
end;
{ TMainForm }
procedure TMainForm.btnGoClick(Sender: TObject);
begin
MyProperty := lblEdit.Text;
lblResult.Caption := MyProperty;
end;
end. |
On aurait aussi pu isoler le code relatif à GetMyProperty et SetMyProperty dans une unité spécifique à inclure dans une clause uses de celle de la propriété. L'examen du code source montre que la seule difficulté est de bien procéder aux déclarations voulues dans l'ordre traditionnel de Pascal : avant de pouvoir être utilisé, un identificateur doit être parfaitement défini.
Attention :
L'emploi des propriétés hors des instances de classes est une particularité de Free Pascal qui produit du code non portable vers Delphi, par exemple. En particulier, seul le mode objfpc accepte ce type d'écriture.