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

delphinait Messages postés 78 Date d'inscription lundi 23 août 2004 Statut Membre Dernière intervention 19 novembre 2008 - 14 janv. 2006 à 13:27
assemple Messages postés 65 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 16 décembre 2011 - 23 janv. 2006 à 19:05
assemple Messages postés 65 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 16 décembre 2011
23 janv. 2006 à 19:05
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 3
22 janv. 2006 à 23:42
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 3
20 janv. 2006 à 18:39
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 65 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 16 décembre 2011
20 janv. 2006 à 16:02
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 ... ?
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
19 janv. 2006 à 19:56
La curiosité étant plus forte, j'ai quand même regardé le source et là je suis entièrement d'accord, cette publication n'est "Pas destinée à être utilisée telle quelle", pire je dirais même qu'elle n'est pas exploitable du tout, même pour une application similaire... Vu tout le code manquant, il sera plus facile et certainement plus rapide de repartir sur une base vide plutôt que d'essayer de recoller les bouts manquants.
Enfin, cela n'engage bien sur que mon modeste jugement.

Mais arrétons de tirer sur l'ambulance, quelques remarques constructives concernant le codage pur :

Faché avec les "if then else" ?
Ex 1 :
If Valeur = StrOUI then Valeur := 'True' ;
If Valeur = StrNON then Valeur := 'False' ;
If Valeur = StrNeutre then Valeur := 'False' ;

Ex 2 :
If C is TLabel then TLabel(C).OnClick := ControlClick ;
If C is TLabel then TLabel(C).OnDblClick := ControlDblClick ;
If C is TCurvedSpeedButton then TCurvedSpeedButton(C).OnClick := ControlClick ;
If C is TCurvedSpeedButton then TCurvedSpeedButton(C).OnDblClick := ControlDblClick ;

Ne serait-il pas plus judicieux d'écrire :
Ex 1 :
If ( Valeur = StrOUI ) then Valeur := 'True'
else if ( Valeur StrNON ) or ( Valeur StrNeutre ) then Valeur := 'False' ;

Ex 2 :
If ( C is TLabel ) then
begin
TLabel(C).OnClick := ControlClick ;
TLabel(C).OnDblClick := ControlDblClick ;
end ;
If ( C is TCurvedSpeedButton ) then
begin
TCurvedSpeedButton(C).OnClick := ControlClick ;
TCurvedSpeedButton(C).OnDblClick := ControlDblClick ;
end ;

Je sais c'est PRESQUE la même chose, mais d'une part on économise des tests et d'autre part on gagne en clarté, facilitant au passage les modifications futures.

Moi la maintenance de code identique dans plusieurs modules, j'aime pas ça. Cela n'est pas nécessaire, et les risques d'erreurs lors de modifications sont multipliés.

Il serait donc, par exemple, beaucoup plus logique de créer une fiche "TFichePropChamp" dérivant de TEzFiche contenant le code identique des fiches TPropChampCompte, TPropChampCouleur, TPropChampEntier, TPropChampNumero,... qui deviendraient alors des fiches enfants de "TFichePropChamp". Idem pour la fiche TPropChampString avec un override en prime.

Cordialement.

P.S. Une mention spéciale pour ce superbe anglicisme "bouged"
assemple Messages postés 65 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 16 décembre 2011
19 janv. 2006 à 18:37
Cette publication n'est pas déstinée à être utilisée telle quelle.
Elle contient, je le répète, des astuces pour modifier un TForm à l'execution, qui pourront inspirer des développements similaires.
Depuis la publication d'EasyBase sur ce site, j'y ai beaucoup travaillé, et la partie "Edition" est bien avancée.
www.assemple.fr/EasyBase.exe
Mot de passe Super-Utilisateur : seguret
Je vais mettre le ZIP à jour, car comme je l'ai dit le source est très modifié.
A noter l'utilisation de WriteComponentResFile
et ReadComponentResFile qui permettent respectivement d'écrire et de lire un fichier DFM !!!
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
18 janv. 2006 à 20:18
"ATTENTION : le code présenté ne pourra pas être utilisé tel quel, car je l'ai développé pour l'utiliser avec des composants que je ne souhaite pas publier pour l'instant."

"La liste des Beug est trop longue !!!"

Tout ça ne donne pas vraiment envie de se pencher sur la source, et si on ajoute les commentaires, alors on n'a plus du tout envie !!!

Bref, tout cela ne semble décidément pas avoir grand intérêt, mis à part peut être de faire un peu de publicité pour votre SARL, quoique ... fournir un programme fortement buggé, c'est pas très pro pour une boite info... ;)

Cordialement.
assemple Messages postés 65 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 16 décembre 2011
16 janv. 2006 à 10:23
A Cirec.
Il ne décomprime pas des fichiers HTML, mais les génère :
AssignFile(T,'Les Projets - Saisie.html') ;
Rewrite(T) ;
Writeln(T,'<HTML> ....') ;
...
Writeln(T,'.... </HTML>') :
CloseFile(T) ;
Ce sont des fichiers d'aide, agrémenté de copie d'écran générées elles aussi au démarrrage de EasyBase. C'est ici que j'ai quelques plantages, mais pas chez moi.
Dans ce cas, <CTRL><Suppr>
et on relance.
Utilisateur anonyme
15 janv. 2006 à 21:02
Même avec le mot de passe ça plante

il décomprime des fichiers html mais rien de plus ensuite il plante :-(
@+
Cirec
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
15 janv. 2006 à 09:16
Je rejoins l'avis de fOxi en ajoutant quelques réflexions.

1- Pour les débutants, c'est totalement inutilisable.

2- Pour les hobbyistes, s'ils n'ont vraiment rien d'autre à faire, qu'ils se penchent sur la question, s'ils ont vraiment du temps à tuer, et qu'ils nous fassent part de leurs découvertes. Ce serait sympa de leur part. D'avance on les en remercie.

3- Pour les experts, aucun intérêt non plus. Le temps passé à essayer de comprendre et de reconstituer des composants équivalents (je cite : "et remplacer les types TCHAMPS et autres par vos Composants", en clair : débrouillez-vous) est trop important et n'élèvera pas nécessairement le niveau des connaissances.

Publier une application complète, c'est bien et c'est louable.
Mais il est préférable d'exposer un problème complexe et d'expliquer la manière dont il a pu être résolu en l'isolant du contexte de ton application.
En l'occurence, le glisser-lâcher de composants est, dans ton cas, ce qui présentait le plus de difficultés et donc le plus d'intérêt pour la communauté.
Une petite application, illustrant ce principe, aurait suffi pour la démonstration et susciter notre curiosité au lieu de notre courroux.

Pour finir, de la part d'un professionnel :
1- divulguer un mot de passe sur le web
2- publier un code inutilisable
3- oser ajouter "La liste des Beug est trop longue !!!" ("Beug", néologisme ?)

On se demande si on a vraiment un pro en face de soi.

Assemple, ce n'est pas le premier code que tu publies et tu nous avais habitué à mieux que cela. Au lieu de cela, tu t'es précipité pour publier à tout prix, comme un débutant.
Il ne suffit pas de se déclarer professionnel, il faut aussi l'être. Sinon, c'est le discrédit assuré...
Allez, tu isoles la partie la plus intéressante de ton code,tu nous en fais profiter si tu veux et on oublie ce regrettable incident.

Ne prend surtout pas mal mes propos. Je suis sûr que tu comprendras que je les ai rédigés dans le seul but de te rendre service.

Que Delphi soit avec toi.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
15 janv. 2006 à 03:10
et aussi : telecharger un EXE de 2.4Mo avec un serveur qui up a 10Ko/sec c'est pas top ... free abuse un peu ...

bon en tout cas avec UPX ton EXE passe de 2.4Mo a 788Ko.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
15 janv. 2006 à 02:52
ps : avant que l'on me fasse la remarque sur mon commentaire, je tiens a precisé qu'il n'y a rien d'agressif ou de mechant dedans ... disons que cela me deçois beaucoup de voir un si gros travail non seulement inutilisable (le rendant donc ininterressant) et ainsi baclé sur la diffusion par son auteur ... c'est cette deception qui parle donc.

je trouve cela bien dommage, de voir, comme on le vois que trop souvent sur DelphiFr malheureusement, une somme de travail consequante ainsi reduite a néant par un manque de "marketing", si je puis dire, de la part de son createur.

ne salopons pas notre boulot en voulant le poster trop vite!
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
15 janv. 2006 à 01:02
hem hem ...

bon alors ... heu ... je vais rejoindre la premiere remarque de Cirec mais d'une façon un peu plus virulente (mais sans vouloir etre agressif) je pense...

il faudrait, mon ami, revoir ta definition de l'esprit de partage des connaissances et de l'opensource et egalement de la compatibilitée et interroperabilitée des sources et programmes que tu diffuse...

si le but est uniquement de montrer quelque lignes de codes pour demontrer le principe de fonctionnement d'une methode particuliere, alors pas besoin de diffuser l'entieretée d'un code source ...

si le but est de montrer comment faire ci ou ça, le mieux est d'en faire une version pure RTL et/ou VCL, sans composants exotique, en prenant en compte un large eventail de compatibilitée des versions de delphi (au moins de la 5 a la 9 minimum syndical).

si le but est de poster un code source inutillisable, inexploitable et pas commenté du tout cela ne sert a rien car personne ne s'y interresserat.

Desolé de reagir de la sorte mais la ça fait un peu trop "demmerdez vous avec ça" ... ce qui n'est pas vraiment dans l'esprit codes-sources.

donc il serait preferable pour tous :
- de désactiver les "protections" du sources.
- de remplacer tout les composants non-standard par leur equivalent Borland ou Freeware (Jedi par exemple et bien d'autre, trés connus de tous), si certains ne sont pas remplaçable, diffuser au moins les DCU de ces composants/unités.
- de commenter un minimum les divers elements important du programme afin de guider les autres developeurs plutot que de les laisser faire une introspection fastidieuse (qu'ils ne feront d'ailleurs pas) de ton code.
- eviter de balancer un mots de passe de session sur le net meme si cela ne parait pas important.


De ton guidon la tete tu doit sortir, au coté obscur l'impatience te menerat.
De minutie et de patience faire preuve tu dois, beaucoup a apprendre il te reste avant qu'un maitre Jedi tu sois.
assemple Messages postés 65 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 16 décembre 2011
14 janv. 2006 à 21:14
Désolé !
L'application EasyBase n'est pas le but en soit de sa publication, mais la fenêtre "Conception" issue de UConception.PAS/DFM.
Un détail non intéressant pour la publication, est à l'origine de ce mot de passe.
EasyBase est une application Multi-Utilisateurs.
Chez vous aucun utilisateur ayant été saisi, mais comme chez moi, l'utilisateur est le super utilisateur ou administrateur, dont le mot de passe est "seguret" (le village [en minuscules et sans accents] du siège social de ma SARL)
Pour m'éviter de me faire c... à taper le mot de passe à chaque lancement, sous Delphi, l'étape du mot de passse est sautée.
Du coup, je l'ai oublié, qu'il y avait un mot de passe.
Désolé à tous !

Décidemment, la publication a été baclée !

Toutes mes plates excuses !

J'ai la tête dans le guidon !!!
Utilisateur anonyme
14 janv. 2006 à 15:20
L'executable demande un mot passe :-(

@+
Cirec
assemple Messages postés 65 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 16 décembre 2011
14 janv. 2006 à 15:02
A TOUS
L'executable contenant des majuscules, le lien est FAUX !
Le bon lien c'est www.assemple.fr/EasyBase.exe
assemple Messages postés 65 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 16 décembre 2011
14 janv. 2006 à 14:57
Merci pour 35105 que je vais examiner tout de suite
Utilisateur anonyme
14 janv. 2006 à 14:15
Salut,
je ne comprend pas bien l'intérêt de cette source.
On ne peut ni la compiler ("je l'ai développé pour l'utiliser avec des composants que je ne souhaite pas publier pour l'instant")
ni l'essayer (if faut télécharger l'exe);

à mon avis tu as réinventé la roue pour rien (et on peut même pas rouler avec)tu devrais regarder l'unité TypInfo de plus près. Elle comprend les routines nécessaires pour avoir acces aux propriétées des composants (même ceux qui n'existe pas encore :-) )

Cherche un peut sur DelphiFR et tu trouveras au moins une source qui traite le même sujet (où presque)

@+
Cirec
delphinait Messages postés 78 Date d'inscription lundi 23 août 2004 Statut Membre Dernière intervention 19 novembre 2008
14 janv. 2006 à 13:27
Bonjour, assemple sa me parait très intéressant ton code, mais impossible de télécharger l'EXE à partir de ton adresse, donc si il y a un autre moyen pour avoir l'exécutable merci
Rejoignez-nous