IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Blog de Gilles Vasseur - Pascal et compagnie

Les propriétés hors des classes avec Free Pascal et Lazarus

Noter ce billet
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 :

Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
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.

Envoyer le billet « Les propriétés hors des classes avec Free Pascal et Lazarus » dans le blog Viadeo Envoyer le billet « Les propriétés hors des classes avec Free Pascal et Lazarus » dans le blog Twitter Envoyer le billet « Les propriétés hors des classes avec Free Pascal et Lazarus » dans le blog Google Envoyer le billet « Les propriétés hors des classes avec Free Pascal et Lazarus » dans le blog Facebook Envoyer le billet « Les propriétés hors des classes avec Free Pascal et Lazarus » dans le blog Digg Envoyer le billet « Les propriétés hors des classes avec Free Pascal et Lazarus » dans le blog Delicious Envoyer le billet « Les propriétés hors des classes avec Free Pascal et Lazarus » dans le blog MySpace Envoyer le billet « Les propriétés hors des classes avec Free Pascal et Lazarus » dans le blog Yahoo

Mis à jour 24/08/2016 à 18h11 par gvasseur58

Catégories
Free Pascal , Lazarus

Commentaires