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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de AbeBar27
    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2021
    Messages
    32
    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 : 32
    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 539
    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 539
    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
    32
    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 : 32
    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
    Invité
    Invité(e)
    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 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 596
    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 : 113
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 : 111
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 : 113
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)?

  6. #6
    Membre confirmé
    Avatar de AbeBar27
    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2021
    Messages
    32
    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 : 32
    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 ???

  7. #7
    Membre confirmé
    Avatar de AbeBar27
    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2021
    Messages
    32
    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 : 32
    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.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    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.

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