IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Codes sources à télécharger Delphi Discussion :

TSyntaxMemo un mémo à coloration syntaxique très simple (VCL)


Sujet :

Codes sources à télécharger Delphi

  1. #1
    Membre confirmé
    Avatar de AbeBar27
    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2021
    Messages : 22
    Par défaut TSyntaxMemo un mémo à coloration syntaxique très simple (VCL)
    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 ?

  2. #2
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 519
    Billets dans le blog
    10
    Par défaut Sous XE11
    J'ai voulu tester sur Delphi XE11 mais j'ai un petit probleme avec la propriété Color

  3. #3
    Membre confirmé
    Avatar de AbeBar27
    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2021
    Messages : 22
    Par défaut
    Citation Envoyé par ALWEBER Voir le message
    J'ai voulu tester sur Delphi XE11 mais j'ai un petit probleme avec la propriété Color
    Quel est le problème ? S'agit-il de la propriété Color du SyntaxMemo ?
    Il est bien possible que la version XE11 ne gère pas les symboles de couleur tels que clAntiqueWhite...

  4. #4
    Membre expérimenté
    Homme Profil pro
    ‫‬
    Inscrit en
    Septembre 2024
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : ‫‬

    Informations forums :
    Inscription : Septembre 2024
    Messages : 146
    Par défaut
    Bonjour,
    J'ai fait un simple test pour créer le contrôle sans installation, le programme entre en boucle infinie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
     SyntaxMemo: TSyntaxMemo;
    begin
         SyntaxMemo:= TSyntaxMemo.Create(Self);
         SyntaxMemo.Parent := self;
         SyntaxMemo.Align := alClient;
         SyntaxMemo.Text := 'test'
    end;

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 569
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Testé avec D12.2

    Pour moi plusieurs points sont à soulever.
    il manque le bpl, donc impossible de tester directement le projet, AMHA il faudrait créer un groupe de projets pour proposer de créer et installer le composants
    quelque chose comme ça
    Nom : Capture.png
Affichages : 80
Taille : 57,9 Ko
    mais en prenant compte du problème de noms


    Une fois le composant "brut" installé, je ne me suis pas amusé à créer la procédure register, j'arrive à quelque chose
    Nom : Capture.png
Affichages : 79
Taille : 51,2 Ko
    Mais en cours de saisie le comportement est assez étrange la coloration n'est pas toujours gardée, il faut sortir du composant pour retrouver un affichage correct.
    je n'avais pas cocher l'option repeindre sur frappe

    Tout ce qui est initialisation me fait tiquer
    Nom : Capture.png
Affichages : 81
Taille : 44,1 Ko
    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


    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)?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre confirmé
    Avatar de AbeBar27
    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2021
    Messages : 22
    Par défaut Correction
    Citation Envoyé par rMist2024 Voir le message
    Bonjour,
    J'ai fait un simple test pour créer le contrôle sans installation, le programme entre en boucle infinie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
     SyntaxMemo: TSyntaxMemo;
    begin
         SyntaxMemo:= TSyntaxMemo.Create(Self);
         SyntaxMemo.Parent := self;
         SyntaxMemo.Align := alClient;
         SyntaxMemo.Text := 'test'
    end;
    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.

  7. #7
    Membre confirmé
    Avatar de AbeBar27
    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2021
    Messages : 22
    Par défaut Répones à SergioMaster
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Testé avec D12.2

    Pour moi plusieurs points sont à soulever.
    il manque le bpl, donc impossible de tester directement le projet,
    Le Bpl se trouve dans le fichier zip, répertoire Bpl.

    Tout ce qui est initialisation me fait tiquer
    A mon avis, il devrait être possible d'en faire des propriétés du composant.
    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.

    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
    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

    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)?
    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 ???

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 912
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 912
    Par défaut
    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.

  9. #9
    Membre confirmé
    Avatar de AbeBar27
    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2021
    Messages : 22
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    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).
    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 ?

    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.
    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é)


    Et il ne faut pas qu'un commentaire multilignes ait plus de FStartOffset lignes masquées sinon c'est cuit.
    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.

    Le but est-il de supporter des versions antérieures à XE7 ? Sinon un parser à base d'expressions régulières simplifierait grandement le code.
    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.

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 912
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 912
    Par défaut
    Citation Envoyé par AbeBar27 Voir le message
    OK, mais quel est l'avantage ? Dans les ancêtres, Loaded fait de l'initialisation.
    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.

    Citation Envoyé par AbeBar27 Voir le message
    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.
    Du tout ! Loaded est appelé une seule fois au chargement, CreateWnd est appelé à chaque changement de handle (qui peuvent par exemple survenir sur RecreateWnd).

    Citation Envoyé par AbeBar27 Voir le message
    Le code est-il plus efficace (compact, rapide...) si on surcharge CreateWnd pluôt que Loaded ?
    Non mais tu prends le risque de perdre les réglages si le handle change puisqu'ils sont associés à un handle devenu invalide.

  11. #11
    Membre confirmé
    Avatar de AbeBar27
    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2021
    Messages : 22
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    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.
    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é.

Discussions similaires

  1. Prism : le nouvel outil de coloration syntaxique simple et léger
    Par Hinault Romaric dans le forum Général Conception Web
    Réponses: 5
    Dernier message: 21/08/2012, 09h34
  2. [C#] Coloration syntaxique !
    Par UNi[FR] dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/04/2009, 09h37
  3. Recherche éditeur de texte simple avec coloration syntaxique
    Par Invité1 dans le forum EDI et Outils pour Java
    Réponses: 5
    Dernier message: 22/08/2008, 22h23
  4. Coloration syntaxique
    Par _-Sky-_ dans le forum Composants
    Réponses: 4
    Dernier message: 03/01/2004, 21h58
  5. Coloration syntaxique ASM dans un RichEdit
    Par Crick dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/12/2002, 01h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo