Téléchargé 16 fois
Vote des utilisateurs


Détails
Licence : Non renseignée
Mise en ligne le 11 avril 2025
Plate-forme :
Windows
Langue : Français
Référencé dans
Navigation
TSyntaxMemo un mémo à coloration syntaxique très simple (VCL)
TSyntaxMemo un mémo à coloration syntaxique très simple (VCL)
Un composant qui permet la coloration syntaxique dans un descendant de TCustomMemo.
TSyntaxMemo permet de distinguer de manière paramétrable les mise en forme de :
•Des mots-clés comme par exemple "Begin", "End" etc.
•Des caractères spéciaux comme ";" , "=" etc.
•Des commentaires mono ou multi-lignes symbole de délimitation paramétrable.
•Des nombres entiers en représentation décimale, hexadécimal, octal, binaire. Préfixe non paramétrable.
D’autre part TSyntaxMemo permet de gérer :
•La taille des tabulations.
•Des marges gauche et droite (imperfection pour la marge droite)
•Le numéro de la première ligne affichée.
•Le numéro de ligne courante. (possibilité de gérer des signets)
•Les évènements OnVScroll (scrolling vertical) et OnMouseWheel.
•Des caractères entre quotes (chaînes par exemple) mono ou multi-lignes, le symbole de délimitation étant paramétrable
•Des nombres réels en virgule fixe ou flottante (avec une petite imperfection peu gênante)
Il reste quelques petites imperfections que je n’ai pas (encore) réussi à éliminer mais le fonctionnement est globalement satisfaisant compte tenu du fait que ce n’est pas un traitement de texte et que je n’ai pas la prétention d’offrir un éditeur aussi sophistiqué que Notepad++ ou l’EDI de Delphi.
D’autant plus que tout ça tiens dans une seule unité de 550 lignes / 17 Ko.
TSyntaxMemo permet de distinguer de manière paramétrable les mise en forme de :
•Des mots-clés comme par exemple "Begin", "End" etc.
•Des caractères spéciaux comme ";" , "=" etc.
•Des commentaires mono ou multi-lignes symbole de délimitation paramétrable.
•Des nombres entiers en représentation décimale, hexadécimal, octal, binaire. Préfixe non paramétrable.
D’autre part TSyntaxMemo permet de gérer :
•La taille des tabulations.
•Des marges gauche et droite (imperfection pour la marge droite)
•Le numéro de la première ligne affichée.
•Le numéro de ligne courante. (possibilité de gérer des signets)
•Les évènements OnVScroll (scrolling vertical) et OnMouseWheel.
•Des caractères entre quotes (chaînes par exemple) mono ou multi-lignes, le symbole de délimitation étant paramétrable
•Des nombres réels en virgule fixe ou flottante (avec une petite imperfection peu gênante)
Il reste quelques petites imperfections que je n’ai pas (encore) réussi à éliminer mais le fonctionnement est globalement satisfaisant compte tenu du fait que ce n’est pas un traitement de texte et que je n’ai pas la prétention d’offrir un éditeur aussi sophistiqué que Notepad++ ou l’EDI de Delphi.
D’autant plus que tout ça tiens dans une seule unité de 550 lignes / 17 Ko.
Et bien par exemple créer le contrôle dynamiquement, ce qu'a voulu faire rMist2024. Loaded n'est pas appelé dans ce cas.
Loaded permet de prendre des mesures en fonction de ce qui est lu dans le dfm et n'a pas d'autre vocation.
Du tout ! Loaded est appelé une seule fois au chargement, CreateWnd est appelé à chaque changement de handle (qui peuvent par exemple survenir sur RecreateWnd).
Non mais tu prends le risque de perdre les réglages si le handle change puisqu'ils sont associés à un handle devenu invalide.
Loaded permet de prendre des mesures en fonction de ce qui est lu dans le dfm et n'a pas d'autre vocation.
Du tout ! Loaded est appelé une seule fois au chargement, CreateWnd est appelé à chaque changement de handle (qui peuvent par exemple survenir sur RecreateWnd).
Non mais tu prends le risque de perdre les réglages si le handle change puisqu'ils sont associés à un handle devenu invalide.
Bonjour,
Je vous propose un nouvel élément à utiliser : TSyntaxMemo un mémo à coloration syntaxique très simple (VCL)
Un composant qui permet la coloration syntaxique dans un descendant de TCustomMemo.
TSyntaxMemo permet de distinguer de manière paramétrable les mise en forme de :
•
Des mots-clés comme par exemple "Begin", "End" etc.
•
Des caractères spéciaux comme ";" , "=" etc.
•
Des commentaires mono ou multi-lignes symbole de délimitation paramétrable.
•
Des nombres entiers en représentation décimale, hexadécimal, octal, binaire. Préfixe non paramétrable.
•
D’autre part TSyntaxMemo permet de gérer :
•
La taille des tabulations.
•
Des marges gauche et droite (imperfection pour la marge droite)
•
Le numéro de la première ligne affichée.
•
Le numéro de ligne courante.
•
Les évènements OnVScroll (scrolling vertical) et OnMouseWheel.
Il reste quelques petites imperfections que je n’ai pas (encore) réussi à éliminer mais le fonctionnement est globalement satisfaisant compte tenu du fait que ce n’est pas un traitement de texte et que je n’ai pas la prétention d’offrir un éditeur aussi sophistiqué que Notepad++ ou l’EDI de Delphi.
D’autant plus que tout ça tiens dans une seule unité de 550 lignes / 17 Ko.
Des nombres réels en virgule fixe ou flottante (avec une petite imperfection peu gênante)
•
Des caractères entre quotes (chaînes par exemple) mono ou multi-lignes, le symbole de délimitation étant paramétrable
Qu'en pensez-vous ?
Je vous propose un nouvel élément à utiliser : TSyntaxMemo un mémo à coloration syntaxique très simple (VCL)
Un composant qui permet la coloration syntaxique dans un descendant de TCustomMemo.
TSyntaxMemo permet de distinguer de manière paramétrable les mise en forme de :
•
Des mots-clés comme par exemple "Begin", "End" etc.
•
Des caractères spéciaux comme ";" , "=" etc.
•
Des commentaires mono ou multi-lignes symbole de délimitation paramétrable.
•
Des nombres entiers en représentation décimale, hexadécimal, octal, binaire. Préfixe non paramétrable.
•
D’autre part TSyntaxMemo permet de gérer :
•
La taille des tabulations.
•
Des marges gauche et droite (imperfection pour la marge droite)
•
Le numéro de la première ligne affichée.
•
Le numéro de ligne courante.
•
Les évènements OnVScroll (scrolling vertical) et OnMouseWheel.
Il reste quelques petites imperfections que je n’ai pas (encore) réussi à éliminer mais le fonctionnement est globalement satisfaisant compte tenu du fait que ce n’est pas un traitement de texte et que je n’ai pas la prétention d’offrir un éditeur aussi sophistiqué que Notepad++ ou l’EDI de Delphi.
D’autant plus que tout ça tiens dans une seule unité de 550 lignes / 17 Ko.
Des nombres réels en virgule fixe ou flottante (avec une petite imperfection peu gênante)
•
Des caractères entre quotes (chaînes par exemple) mono ou multi-lignes, le symbole de délimitation étant paramétrable
Qu'en pensez-vous ?
J'ai voulu tester sur Delphi XE11 mais j'ai un petit probleme avec la propriété Color
Désolé une erreur de ma part, j'ai mis dans les sources une mauvaise version des fichiers dans lesquels il manquait la ligne :
kEndText := kSeparateurs+[#10]+kKeyChars;
dans le constructeur TSyntaxMemo.Create.
Du coup, kEndText est vide quand on créé un nouveau composant, ce qui fait entrer dans une boucle sans infine à la fin de la méthode TexteSuivant.
Ca devrait mieux marcher maintenant.
kEndText := kSeparateurs+[#10]+kKeyChars;
dans le constructeur TSyntaxMemo.Create.
Du coup, kEndText est vide quand on créé un nouveau composant, ce qui fait entrer dans une boucle sans infine à la fin de la méthode TexteSuivant.
Ca devrait mieux marcher maintenant.
Le Bpl se trouve dans le fichier zip, répertoire Bpl.
C'est mon choix de ne pas en faire des propriétés. Une grammaire n'a pas besoin d'être changée fréquemment.
Non non... On peut très bien avoir des commentaires // un commentaire
On peu même choisir le caractère et s'il faut ou non le doubler comme ; uncommentaire de fichier .ini
Je connais Synedit, mais comme je le dis en introduction dans ma doc :
J’ai essayé plusieurs composants (SynEdit, PlusMemo, TextEditor…) qui sont assez complets et performants mais que je trouve un peu lourd de mise en oeuvre.
Il me semble que c'est plus simple non ???
Tout ce qui est initialisation me fait tiquer
A mon avis, il devrait être possible d'en faire des propriétés du composant.
A mon avis, il devrait être possible d'en faire des propriétés du composant.
enfin, seules les {} sont considérées comme commentaires (cf image plus haut)
adieu les formes comme // un commentaire ou (* un autre commentaire *), quid des /// un commentaire de documentation
adieu les formes comme // un commentaire ou (* un autre commentaire *), quid des /// un commentaire de documentation
On peu même choisir le caractère et s'il faut ou non le doubler comme ; uncommentaire de fichier .ini
Du coup, comme il n'est que VCL l'utilisation de bibliothèque déjà existante comme SynEdit, ne serait-ce pas, quelque part, réinventer une roue en bois pleine alors que l'on a la possibilité d'un truc plus complet (selon mes souvenirs)?
J’ai essayé plusieurs composants (SynEdit, PlusMemo, TextEditor…) qui sont assez complets et performants mais que je trouve un peu lourd de mise en oeuvre.
Il me semble que c'est plus simple non ???
Loaded n'est appelé que si lecture depuis le dfm pour traiter les données stockées, ce n'est pas fait pour de l'initialisation. Ce qui figure dans cette méthode doit être réparti entre le constructeur d'une part et une surcharge de CreateWnd pour ce qui nécessite un handle (tabulations, couleurs).
Sinon ça fonctionne mais ces constantes modifiables...
Procéder ainsi limite aussi la mise en évidence à un seul langage par application. Pas possible par exemple de comparer Delphi et du C.
A la place des classes dérivées de TPersistent pour des réglages par l'inspecteur d'objets.
Et il ne faut pas qu'un commentaire multilignes ait plus de FStartOffset lignes masquées sinon c'est cuit.
Le but est-il de supporter des versions antérieures à XE7 ? Sinon un parser à base d'expressions régulières simplifierait grandement le code.
Sinon ça fonctionne mais ces constantes modifiables...

Procéder ainsi limite aussi la mise en évidence à un seul langage par application. Pas possible par exemple de comparer Delphi et du C.
A la place des classes dérivées de TPersistent pour des réglages par l'inspecteur d'objets.
Et il ne faut pas qu'un commentaire multilignes ait plus de FStartOffset lignes masquées sinon c'est cuit.
Le but est-il de supporter des versions antérieures à XE7 ? Sinon un parser à base d'expressions régulières simplifierait grandement le code.
OK, mais quel est l'avantage ? Dans les ancêtres, Loaded fait de l'initialisation. Les méthodes Loaded et CreateWnd sont toutes deux protected et virtual du coup ça me semblait équivalent de surcharger l'une ou l'autre.
Le code est-il plus efficace (compact, rapide...) si on surcharge CreateWnd pluôt que Loaded ?
J'ai bien insisté sur le fait que c'est un composant simple. Il existe d'excellents éditeurs gratuits qui sont multi-langages comme Notepad++
(Quand j'étais en âge de conduire j'aurais aimé que mes parents m'offre une moto. Mais j'aurais voulu pouvoir faire de la route, du trial, du cross...
Finalement ils m'ont offert un vélomoteur... Je m'en suis contenté)
FStartOffset est fait pour ça et paramétrable. Il suffit de l'augmenter en fonction de la hauteur du mémo de manière à ce que les lignes affichées soient correctement analysées.
Non, ce n'était pas le but. En fait je voulais au départ un truc très simple pour afficher des fichiers de configuration qui ne comportent que 4 mots-clés, 2 caractères spéciaux etc. (ce qui est définis par défaut)
Par contre, merci de m'indiquer une méthode potentiellement plus efficace, je vais regarder ça.
Le code est-il plus efficace (compact, rapide...) si on surcharge CreateWnd pluôt que Loaded ?
Sinon ça fonctionne mais ces constantes modifiables... 
Procéder ainsi limite aussi la mise en évidence à un seul langage par application. Pas possible par exemple de comparer Delphi et du C.
A la place des classes dérivées de TPersistent pour des réglages par l'inspecteur d'objets.

Procéder ainsi limite aussi la mise en évidence à un seul langage par application. Pas possible par exemple de comparer Delphi et du C.
A la place des classes dérivées de TPersistent pour des réglages par l'inspecteur d'objets.
(Quand j'étais en âge de conduire j'aurais aimé que mes parents m'offre une moto. Mais j'aurais voulu pouvoir faire de la route, du trial, du cross...
Finalement ils m'ont offert un vélomoteur... Je m'en suis contenté)
Et il ne faut pas qu'un commentaire multilignes ait plus de FStartOffset lignes masquées sinon c'est cuit.
Le but est-il de supporter des versions antérieures à XE7 ? Sinon un parser à base d'expressions régulières simplifierait grandement le code.
Par contre, merci de m'indiquer une méthode potentiellement plus efficace, je vais regarder ça.
Compris, je vais tester cette modification. Merci, j'ai appris quelque chose d'important.
En l'état actuel, les initialisations dans Loaded ne devraient pas être affectées par un changement de handle.
Le problème rencontré par rMist2024 était lié à une erreur de ma part : j'avais copier une mauvaise version des sources dans laquelle une ligne manquait dans le constructeur.
J'ai corrigé.
En l'état actuel, les initialisations dans Loaded ne devraient pas être affectées par un changement de handle.
Le problème rencontré par rMist2024 était lié à une erreur de ma part : j'avais copier une mauvaise version des sources dans laquelle une ligne manquait dans le constructeur.
J'ai corrigé.
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.