J'ai cree un composant non-visuel gérant un arbre logique selon le modèle de TTreeView, mais sans dépendances VCL, sous forme d'une classe sans être dérivé d'un autre composant.
Je l'ai nommé TTree. Un tel arbre est composé de noeuds sous forme d'un composant sous forme d'une classe non dérivée, nommé TNode.
un TTree peut contenir 1 ou plusieurs noeuds de premiers niveau (racines ou root). Chaque noeud, racine ou pas, peut avoir des noeuds enfant (child nodes) et ainsi de suite. Il y a des méthodes pour naviguer dans cette structure.
On peut aisément imaginer d'autres méthodes, mais il y a déjà un jeu suffisamment complet pour une première application, un peu comme un "proof-of-concept":
c'est la génération d'une page HTML à partir d'un fichier DFM (en mode texte, mais la conversion d'un fichier en mode binaire est facile). Le résultat s'affiche dans un browser et reproduit l'image de la fenêtre Delphi.
Ce convertisseur est implémenté sous forme d'un composant, également non visuel, non dérivé d'un autre objet. Je l'ai nommé TDFMtoHTML.
L'ensemble de ces 3 objets (TNode, TTree et TDFMtoHTML), est contenu dans une seule unité Delphi. Le tout a été développé avec Dephi 6 Personal Edition, et le code HTML généré est testé et opérationnel avec Firefox, Edge et Opera, indifféremment. Le code HTML utilise du code CSS inline pour adapter les éléments HTML. Pas de JavaScript.
Certes, pour le moment, seuls quelques objets visuels Delphi sont traités:
TForm <html>
TLabel <label...
TPanel <fieldset...
TGroupBox <fieldset... with <legend>
TButton <button...
TMemo <textarea...
TTreeView <textaera... just a place holder
Seules quelques propriétés des objets sont traités:
Name
Caption
Top
Left
Width
Height
Actuellement, seule la police Arial est générée, mais la propriété Font.Name est reconnue, à titre d'exemple.
Petite précision:
Ce projet n'a en aucun cas l'ambition de devenir un générateur de page HTML plein et entier. ll m'a servi a tester ma structure arborescente créée à partir d'un DFM, et de l'utilisant ensuite de façon récursive de produire du HTML. Comme dit au début, c'est un "proof-of-concept".
Le projet contient deux unités:
- DFMtoHTML.pas avec les 3 objets
- Unit1.pas contenant le programme principal utilisant ces 3 objets.
Je joins une archive ZIP avec le projet complet y compris son exécutable. Il comporte dans une seule fenêtre, 4 panels:
- affichage du fichier DFM dans un TMemo
- affichage de l'abre logique TTree chargé dans un TTreeView
- affichage du code HTML généré dans un TMemo
- les boutons de commande correspondant à chaque phase (chargement DFM, construction de l'arbre, génération du HTML)
Le code DFM par défaut est celui du propre programme de démo, mais un bouton permet de créer dynamiquement une TForm avec quelques objets, et un autre bouton permet de charger générer le DFM de cette TForm dynamique et de le charger.
Voici à quoi ressemble le programme, ayant chargé le code DFM de sa propre fenêtre, ayant généré l'arbre puis le code HTML:
Je serais heureux de connaître votre avis sur cette petite réalisation. Merci d'avance d'y jeter un coup d'oeil.
Partager