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

Scheme Discussion :

[Coloration syntaxique


Sujet :

Scheme

  1. #1
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Points : 132
    Points
    132
    Par défaut [Coloration syntaxique
    salut a tous


    voici mon petit probleme :
    j'ai beau chercher dans la doc mais je ne trouve pas,
    je cherche une procedure ou un moyen de changer la couleur d'une chaine de caractere ou d'un symbol.

    je m'explique par exemple je parcours un fichier et je trouve la chaine de caractere (ou le symbol) TOTO écrit en noir et je souhaiterait modifier sa couleur pour qu'il soit ecrit en rouge.

    j'espere que j'ai été clair, si vous a vez une piste ....


    merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Dans ton canvas d'affichage pour les mots qui t'intéressent tu peux avant de les écrire faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (send dc set-text-foreground (make-object color% 255 0 0))
    où les nombres compris entre 0 et 255 sont les valeurs RVB de la couleur.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par Trap D
    Dans ton canvas d'affichage pour les mots qui t'intéressent tu peux avant de les écrire faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (send dc set-text-foreground (make-object color% 255 0 0))
    où les nombres compris entre 0 et 255 sont les valeurs RVB de la couleur.

    justement mon probleme c que le texte existe deja et je vux modifier sa couleur

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Il est affiché dans quoi ton texte ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par Trap D
    Il est affiché dans quoi ton texte ?

    le texte est affiché dans un editor-canvas

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Ce bout de code montre comment mettre en rouge et en gras le texte sélectionné dans un editor-canvas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    ;; fonction appelée par le bouton, elle met en rouge et en gras la  sélection
    (define (button_fonc x y)
      (let* ((txt (send monCanvas1 get-editor))
             (start (send txt get-start-position))
             (end (send txt get-end-position))
             (delta (make-object style-delta% ))) 
        (send delta set-weight-on 'bold)
        (send delta set-delta-foreground (make-object color% 255 0 0) )
        (send txt change-style  delta start end)))
    
    
    ;; définition de la boîte de dialogue
    ;; définition de la fenêtre principale
    (define maFenetre (make-object frame% "Test")) ; création de l'objet maFenetre
    
    (send maFenetre min-width 200) ; définition de sa largeur mini
    (send maFenetre min-height 200) ; définition de sa hauteur mini
    (send maFenetre resize 300 300) ; redimensionnement de la fenetre
                         
    ;; je lui adjoins une aire de dessin ou d'écriture avec un texte associé
    (define monCanvas1 (make-object editor-canvas% maFenetre (make-object text%))) 
          ;; j'adjoins maintenant à ma fenêtre un bouton (qui sera centré) sous le canvas
    (define monBouton (make-object button% "Bouton" maFenetre button_fonc)) ; création de l'objet bouton
    (send monBouton min-width 150) ; définition de sa largeur mini
    (send monBouton min-height 20) ; définition de sa hauteur mini
    
    (send maFenetre show #t) ; affichage de la fenetre
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Si tu veux modifier un mot saisi à part, tu peux t'inspirer de ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ;; fonction appelée par le bouton, elle me en rouge et en gras la sélection 
    (define (button_fonc x y)
      (let* ((txt (send monCanvas1 get-editor))
             (mot (get-text-from-user "Test Couleur" "Mot recherché"))        
             (start (send txt find-string mot 'forward 0 'eof #t #f))
             (end (send txt find-string mot 'forward 0 'eof #f #f)) 
             ;(start (send txt get-start-position))
             ;(end (send txt get-end-position))
             (delta (make-object style-delta% )))
        (send delta set-weight-on 'bold)
        (send delta set-delta-foreground (make-object color% 255 0 0) )
        (send txt change-style  delta start end)))
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #8
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Points : 2 844
    Points
    2 844
    Par défaut
    Salut
    Vous parlez bien des canvas de plt là? Parce que comme ça on ne comprend rien au thread. Vous pourriez donner des liens pour ceux qui vont du Scheme sans utiliser ces outils svp?
    Merci

  9. #9
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Oui, DrScheme, je ne connais que celui-la
    Renseignement ici
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  10. #10
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Points : 2 844
    Points
    2 844
    Par défaut
    Citation Envoyé par Trap D
    Oui, DrScheme, je ne connais que celui-la
    Renseignement ici
    Perso je n'utilise que celui là. Je le trouve très bien et si jamais j'ai envie d'en avoir un plus bleeding-edge (genre qui suit le draft r6rs) ben je l'écrirais moi-même mais pas pour le moment.
    En plus pour les fanas il existe quake.el qui permet d'interagir directement avec emacs pour profiter des bindings et autre (pour les flemmards de la souris)

  11. #11
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Points : 132
    Points
    132
    Par défaut
    merci pour le code ca repond bien a ma question

    merci et bonne continuation

    par contre, je n'arrive pas à utiliser after insert pour détecter que l'utilisateur a entré un mot dans le canvas. Une idée?

  12. #12
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Voilà comment utiliser after-insert, il faut redéfinir text%
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    (namespace-require (quote (lib "..\\srfi\\13\\string.ss" ))) 
    (require
     (lib "class.ss")
     (lib "mred.ss" "mred"))
    
    ;; définition de la boîte de dialogue
    ;; définition de la fenêtre principale
    (define maFenetre (make-object frame% "Test")) ; création de l'objet maFenetre
    
    (send maFenetre min-width 200) ; définition de sa largeur mini
    (send maFenetre min-height 200) ; définition de sa hauteur mini
    (send maFenetre resize 300 300) ; redimensionnement de la fenetre
                         
    ;; je définis mon propre canvas 
    (define my-text%
      (class text%
        (init-field (deb 0))
        (init-field (end 0))
        (init-field (str ""))
        (init-field (delta (make-object style-delta%)))
                    
        (define/augment (after-insert s l)
          (let* ((delta (make-object style-delta%))
                 (ch (send this get-character s))
                 (char (make-string 1 ch)))
            ;(super-after-insert s e)
            (if (member ch '(#\newline #\( #\) #\ ))
                (begin
                  (if (member str '("define" "let" "cond" "if" "when" "lambda"))
                    (begin
                      (send delta set-weight-on 'bold)
                      (send delta set-delta-foreground (make-object color% 255 0 0))
                      (send this change-style delta deb (+ 1 end)))) 
                  (set! deb (+ 1 s))
                  (set! end (+ 1 s))
                  (set! str ""))
                (begin
                  (set! end s)
                  (set! str (string-concatenate (list str char)))))
            (inner (void) after-insert s l)
          ))
        (super-instantiate ()))) 
      
    
    ;; je lui adjoins une aire de dessin ou d'écriture avec un texte associé
    (define monCanvas1 (make-object editor-canvas% maFenetre (make-object my-text%))) 
    
    (send maFenetre show #t) ; affichage de la fenetre
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  13. #13
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Points : 132
    Points
    132
    Par défaut
    merci bcp de vous etres penchés sur mon probléme.

    bonne continuation

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Salut a tous
    J ai jeté un coup d oeil a ce code et a vrai dire il m interesse grandement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ; fonction appelée par le bouton, elle me en rouge et en gras la sélection 
    (define (button_fonc x y)
      (let* ((txt (send monCanvas1 get-editor))
             (mot (get-text-from-user "Test Couleur" "Mot recherché"))        
             (start (send txt find-string mot 'forward 0 'eof #t #f))
             (end (send txt find-string mot 'forward 0 'eof #f #f)) 
             ;(start (send txt get-start-position))
             ;(end (send txt get-end-position))
             (delta (make-object style-delta% )))
        (send delta set-weight-on 'bold)
        (send delta set-delta-foreground (make-object color% 255 0 0) )
        (send txt change-style  delta start end)))
    Cependant, comment pourrais je adapter ce code de facon a ce qu il recherche les mots a colorier dans une liste qui est declarer comme une variable globale?

  15. #15
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Peut-être ce genre de code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    (define liste-mots '("define" "let" "cond" "if" "when" "lambda"))
    
    (define (button_fonc x y)
      (let  ((txt (send monCanvas1 get-editor))
             (delta (make-object style-delta% )))
        (map (lambda (mot)
               (let ((start (send txt find-string mot 'forward 0 'eof #t #f))
                     (end (send txt find-string mot 'forward 0 'eof #f #f)))
                 (when (not (equal? start #f))
                   (send delta set-weight-on 'bold)
                   (send delta set-delta-foreground (make-object color% 255 0 0) )
                  (send txt change-style  delta start end))))
             liste-mots)))
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Oui merci c est ce genre de code qu il me faudrait mais est il possible de lui faire changer la couleur a l ensemble des mots qu il trouve ?
    Car la j ai remarqué que dès qu il en trouvait un, il n effectuait pas le changement de couleur sur la suite du texte

  17. #17
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    C'est tout à fait possible effectivement en utilisant find-string-all qui renvoie une liste de positions
    Extrait de la doc de mred :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    find-string-all in text%
    
    Finds all occurrences of a string using find-string. If no occurrences are found, the empty list is returned.
    
    * (send a-text find-string-all str direction start end get-start? case-sensitive) -> list of exact non-negative integers 
       str : string 
       direction = 'forward : symbol in '(forward backward) 
       start = 'start : exact non-negative integer or 'start 
       end = 'eof : exact non-negative integer or 'eof 
       get-start? = #t : boolean 
       case-sensitive = #t : boolean
    
    The arguments are the same as for find-string.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Coloration syntaxique !
    Par UNi[FR] dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/04/2009, 09h37
  2. Coloration syntaxique
    Par iubito dans le forum Evolutions du club
    Réponses: 73
    Dernier message: 02/11/2005, 10h01
  3. [debutant] coloration syntaxique
    Par demostene dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 30/06/2004, 15h16
  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