EXEMPLE D'EDITEUR DE FENÊTRE (CONTENANT DES COMPOSANTS) : INSERTION DE COMPOSAN

Signaler
Messages postés
78
Date d'inscription
lundi 23 août 2004
Statut
Membre
Dernière intervention
19 novembre 2008
-
assemple
Messages postés
72
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
16 décembre 2011
-
assemple
Messages postés
72
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
16 décembre 2011

Grace à cet exemple, j'ai découvert la fonction IsPublishedProp, qui va me permettre d'appeler Set/GetPropertyValue (et aussi, je suppose, Set/GetObjectProperty) sans que ça plante si la propriété est inexistante.
WhiteHippo
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012

C'est des procédures que l'on employe très souvent et largement lorsque l'on réalise des experts sous Delphi.

Mais cela permet également d'autres subtilités.

Voici, un programme fait en 2 coups de cuillères à pot pour manipuler un type énuméré à partir de chaines de caractères :

unit Unit2;

interface

uses
Classes ;

type
TypeAConvertir =
( mtInconnu
, mtType1
, mtType2
) ;

TTypeAConvertir = class( TPersistent )
private
FType : TypeAConvertir ;
public
function EnChaine : string;
procedure DeChaine ( s : string );
published
property ProprieteType : TypeAConvertir read FType Write FType ;
end ;

implementation

uses
Dialogs, TypInfo;


function TTypeAConvertir.EnChaine : string;
begin
// Récupération de la valeur du type sous forme de chaine.
if IsPublishedProp(self,'ProprieteType') then
begin
Result := GetPropValue( self,'ProprieteType',true);
end ;
end ;

procedure TTypeAConvertir.DeChaine ( s : string );
begin
// Forçage de la valeur du type à partir d'une chaine.
if IsPublishedProp(self,'ProprieteType') then
begin
SetPropValue( self,'ProprieteType',s );
end ;
end ;


var
T : TTypeAConvertir ;

initialization
T := TTypeAConvertir . Create ;
T.ProprieteType := mtType1 ; // Emploi classique
ShowMessage( T.EnChaine );
T.DeChaine( 'mtType2' );
ShowMessage( T.EnChaine );
T.DeChaine( 'mtInconnu' );
ShowMessage( T.EnChaine );

T.Free ;
end.


Cordialement.
WhiteHippo
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012

Faut pas le prendre mal, mais même si c'est un premier jet, cela ne devrait pas empecher une certaine rigueur. Privilégier la rapidité de développement et non la qualité se paye à un moment ou un autre (choix erronés de solutions, maintenance ardue, évolution impossible sans modification à coups de serpe, etc...) Même le processus le plus rapide de développement, l'XP(eXtreme Programming) impose des principes à respecter, et surtout de la rigueur.

Je suis tétu, ( soit! :-) en conséquence, j'insiste. Quel est l'intérêt de proposer un programme prospectif ? Déjà une seconde version et ce en moins de 4 jours ! Désolé mais pour ma part, je m'intéresse aux programmes finis qui pourront m'apporter quelquechose, et non aux essais de programmation, qui un jour iront vers une voie et plus tard vers la voie opposée, car la prospection ne sera pas partie du bon côté par manque d'analyse préalable. Qui voudrait d'ailleurs faire se reposer un programme sur une [Easy]Base aussi chancelante ?

En conclusion, un petit programme fini, bien structuré proposant peu de fonctionnalités sera toujours plus intéréssant et instructif qu'un gros programme non complet (dont une partie des sources est manquante) proposant une multitude de fonctionnalités non exploitables une fois celle-ci sorties de leur contexte.

Cordialement.
assemple
Messages postés
72
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
16 décembre 2011

Easybase est un peu brouillon car c'est un premier jet, prospectif. Si la disposition des "IF" semble illogique, inélégante, c'est qu'ils se sont ajoutés par couche, lorqu'il m'a fallut rajouter des attributions de gestionnaire d'évènement.
Mais quoi ?!
Personne ne trouve de choses intéressantes ?
Comme l'utilisation Set/GetObjectProperty, Set/GetPropertyValue,
Read/WriteComponentResFile ... ?