EDITEUR DE CODE CASIO GRAPH 25 (MAJ 2)

cs_Cracker Messages postés 82 Date d'inscription dimanche 9 septembre 2001 Statut Membre Dernière intervention 21 août 2006 - 7 sept. 2003 à 21:41
nephix2003 Messages postés 84 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 6 novembre 2004 - 10 sept. 2003 à 00:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/8480-editeur-de-code-casio-graph-25-maj-2

nephix2003 Messages postés 84 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 6 novembre 2004
10 sept. 2003 à 00:40
De retour ;-)
Il se trouve que mon code a induit une régression dans ton éditeur : si tu charges un fichier ou que tu lances manuellement la colorisation (menu 'Afficher Couleur'), ton programme plante en bouclant sur la première ligne (damned!)

Bref, j'ai corrigé ça. Je peux copier/coller le code corrigé ici, mais peut-être que tu préfères chercher tout seul l'origine du problème pour t'entrainer ?
A toi de voir, je te laisse décider, bien que les modifs à faires ne sont pas triviales.
En tout cas, sache que le code est déjà prêt, donc tu n'as qu'à me demander et aussitôt je le poste ici. Avec ce dernier code que j'ai fait, l'affichage des couleurs se fait ligne après ligne, ce qui fait plutôt sympa :)

Voilou
@++
nephix2003 Messages postés 84 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 6 novembre 2004
10 sept. 2003 à 00:00
je vois. C'est normal, maintenant que l'on gère la colorisation en "live", on a un souci quand on écrit le premier guillemet :
dans J2 on enregistre la position de ce guillemet, puis dans J3 on cherche la position du 2eme guillemet qui -évidemment- n'existe pas. Donc J3 est négatif et ...boom :)

Tu peux solutionner le problème en testant J3 :
if J3 < 0 then exit do ' quitte le traitement des guillemets

Et là tu verras que ça marche bien...
...enfin presque. Si tu mets un nombre entre tes 2 guillemets, tu risques d'avoir un problème, vu que tu fais un traitement de couleur des nombres après le traitement des guillemets. Nous, on veut que le texte entre guillemets reste rouge, qu'ils contienne des mots-clés ou pas => il faut faire la colorisation des guillements en toute fin de TexteCouleur.

Fin de l'histoire? hmm pas vraiment :)
si on continues à écrire après le 2eme guillemet, la fonte est rouge, italique et en gras, et ça c pas tip-top.
En fait on aimerait bien revenir à la fonte par défaut. Finalement, tu vois que le problème se pose ailleurs : dès que tu détectes un mot clé, disons par exemple une fonction, tu mets tous ses caractères en bleu et en gras. Mais si tu effaces l'une des lettres ? certes on repasse bien les caractères en noir mais...ils apparaissent encore en gras. Ca non plus c pas tip-top (eh meeerde!)
Donc faudrait sauvegarder/restaurer pas seulement la position du curseur, mais aussi les infos de fontes.

enfin bref, pour résumer le tout, ça donne ça :

Private m_selStart As Long
Private m_selColor As Long
Private m_selBold As Long
Private m_selItalic As Long
Private m_selUnderline As Long
Private m_charIndexeStart As Long
Private m_charIndexeEnd As Long

Public Sub TexteCouleur()

m_selStart = Text1.SelStart
m_selColor = Text1.SelColor
m_selBold = Text1.SelBold
m_selItalic = Text1.SelItalic
m_selUnderline = Text1.SelUnderline

Dim J2 As Integer

Call CalculIndexes
With Text1
.SelStart = m_charIndexeStart
.SelLength = m_charIndexeEnd - m_charIndexeStart + 1
.SelColor = vbBlack
.SelBold = False
.SelItalic = False
.SelUnderline = False
End With

For I = 0 To LongFonction
J = Text1.Find(Fonction(I), m_charIndexeStart, m_charIndexeEnd)
Do While J <> -1
Text1.SelStart = Text1.Find(Fonction(I), J)
Text1.SelLength = Len(Fonction(I))
Text1.SelColor = Fonct.Couleur
Text1.SelBold = Fonct.Gras
Text1.SelItalic = Fonct.Ital
Text1.SelUnderline = Fonct.Soul
J = Text1.Find(Fonction(I), m_charIndexeStart + J + 1, m_charIndexeEnd)
Loop
Next I

For I = 0 To 9
J = -1
Do While Text1.Find(I, m_charIndexeStart + J + 1, m_charIndexeEnd) <> -1
J = Text1.Find(I, J + 1)
Text1.SelStart = Text1.Find(I, J)
Text1.SelLength = 1
Text1.SelColor = Nbr.Couleur
Text1.SelBold = Nbr.Gras
Text1.SelItalic = Nbr.Ital
Text1.SelUnderline = Nbr.Soul
Loop
Next I

J = Text1.Find("""", m_charIndexeStart, m_charIndexeEnd)
Do While J <> -1
J2 = Text1.Find("""", J + 1)
If J2 < 0 Then Exit Do

With Text1
.SelStart = J
.SelLength = J2 - J + 1
.SelColor = Texte.Couleur
.SelBold = Texte.Gras
.SelItalic = Texte.Ital
.SelUnderline = Texte.Soul
End With

J = Text1.Find("""", J2 + 1, m_charIndexeEnd)
Loop

With Text1
.SelStart = m_selStart
.SelColor = m_selColor
.SelBold = m_selBold
.SelItalic = m_selItalic
.SelUnderline = m_selUnderline
End With
End Sub


Bon faut que j'arrete de t'aider, c'est en cherchant qu'on apprend, pas vrai ?
De toute façon t'as encore du taff :
- la colorisation des nombres déconne
- fais un copy/paste d'un mot dans ton textbox : surprise! ;-)
- quand t'écris juste après le 2eme guillemet, tu vois que ton caractère se confond avec le guillemet, du au fait que ton guillement est penché par l'italique, il recouvre en partie ton nouveau caractère qui n'est pas en italique, c'est pas très agréable
- ...et puis les fonctions pour rendre encore plus intelligent ton éditeur (indentation, casse, etc etc)

Voilà voilà

Enfin, si t'as des questions, t'hésites pas quand même... ;-)

Bon courage
@++
cs_Cracker Messages postés 82 Date d'inscription dimanche 9 septembre 2001 Statut Membre Dernière intervention 21 août 2006
9 sept. 2003 à 22:16
oué pk po mé bon déjà là g mi ton systeme (ki marche tres bien) saufke g un pb now !!!! il arrive plus a détecter les textes entre les guillemets !!!!
Donc pour pousser un peu plus les options va déjà faloir ke je corrige ca !!!
nephix2003 Messages postés 84 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 6 novembre 2004
9 sept. 2003 à 22:13
content que ça te plaise Cracker, merci pour tes remerciements :)
J'espère que tu vas réussir à finaliser ton éditeur comme tu le souhaites.
Ensuite, si t'as envie de te déchainer, tu pourrais ajouter une intelligence à ton prog, style faire de la vérification syntaxique en live (à la mode de chez Word), ou encore de l'autoformatting (correction d'indentation, correction de la casse, etc., à la VB quoi).
Mais bon, là faut être motivé ;-)

sinon MrAssol, sympa ton site, je connaissais pas.

@++
MrAssoL Messages postés 30 Date d'inscription vendredi 17 mai 2002 Statut Membre Dernière intervention 14 octobre 2009
9 sept. 2003 à 18:29
moi je faisiat de l'assembleur sur ma graph 100 !!! les jeux etaient (et sont toujours) rapides, y meme les nuances de gris/noir !!!! pour plus d'infos ur les jeux allez voir sur www.graph100.com (c pas mon site !!!!)
cs_Cracker Messages postés 82 Date d'inscription dimanche 9 septembre 2001 Statut Membre Dernière intervention 21 août 2006
9 sept. 2003 à 18:13
Ha o fait, ma calto elle me sert osi surtt pour les jeus :D
cs_Cracker Messages postés 82 Date d'inscription dimanche 9 septembre 2001 Statut Membre Dernière intervention 21 août 2006
9 sept. 2003 à 18:12
nephix2003.....franchement chapeau !!!! déjà pour la longueur de ton post ;) et pour ton code !!!!
Je vé voir ce ke ca donne......merci !!!!!

PS : c ce ke je cherchai a faire mé g jamais réussi !!
nephix2003 Messages postés 84 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 6 novembre 2004
9 sept. 2003 à 01:09
PS: j'ai oublié de préciser qu'il te faudra fixer un bug restant sur la colorisation des entiers. Là, g pas le temps de m'y pencher plus en avant.

voilou

@++
nephix2003 Messages postés 84 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 6 novembre 2004
9 sept. 2003 à 01:05
hehe, moi aussi MrAssol, je ne faisais que des jeux dessus :D

Sinon, pour en revenir au code :
comme tu dis, Cracker, ton curseur bouge pendant la coloration, c'est exact. Donc...il faut sauvegarder la position du curseur, faire le traitement de couleur, puis restaurer la position

...ce qui donne :

Private m_selStart as Long
Public Sub TexteCouleur()
m_selStart = Text1.SelStart ' sauve la position
.................................... ' mets ton code ici
Text1.SelSTart = m_selStart ' restaure la position
End Sub

Pense à enlever les DoEvents dans ta fonction TexteCouleur(), c pas bon pour la santé ... ;-)

Ensuite, t'as bien raison, le timer c pas une bonne idée.
il vaut mieux ajouter un bon vieux Text1_Change :

Public Sub Text1_Change()
Call TexteCouleur
End Sub

Mais là, l'ennui, c que notre fonction TexteCouleur se retape toutes les lignes, et on voit le texte vibrer.
MrAssol, le vbkeyreturn, ça pourrait être bien sauf que...t'as un léger souci quand tu décides de revenir sur du texte présent 2-3 lignes avant ta dernière ligne et de le modifier :) eh oui, pas de vbkeyreturn dans ce cas.
La solution serait plutôt de détecter quelle ligne vient de changer, quelle que soit la touche que l'on vient de presser.

Bon alors, Cracker, comme tu m'as rendu nostalgique avec la casio, je me suis creusé les méninges pour te pondre quelque chose de potable : on va écrire une sub CalculIndexes() qui calcule la position du premier caractère de la ligne courante et la position du dernier caractère de cette ligne. Ces valeurs, on les stocke dans 2 Long m_charIndexeStart et m_charIndexeEnd. Dans la fonction TexteCouleur(), on utilise ces 2 bornes pour :
1) restaurer tous les caractères de la ligne à la couleur noire
2) réappliquer ton traitement de colorisation seulement sur ces caractères, et non plus sur le texte entier.

...ce qui donne ce code :

Option Explicit

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal _
Msg As Long, wParam As Any, lParam As Any) As Long

Const EM_LINEINDEX = &HBB
Const EM_LINELENGTH = &HC1

Private m_selStart As Long
Private m_charIndexeStart As Long
Private m_charIndexeEnd As Long

Public Sub TexteCouleur()

m_selStart = Text1.SelStart

Dim J2 As Integer
Dim J3 As Integer

Call CalculIndexes
With Text1
.SelStart = m_charIndexeStart
.SelLength = m_charIndexeEnd - m_charIndexeStart + 1
.SelColor = vbBlack
End With

For I = 0 To LongFonction
J = Text1.Find(Fonction(I), m_charIndexeStart, m_charIndexeEnd)
Do While J <> -1 ' évite de chercher 2 fois la même chose à chaque tour de boucle
Text1.SelStart = Text1.Find(Fonction(I), J)
Text1.SelLength = Len(Fonction(I))
Text1.SelColor = Fonct.Couleur
Text1.SelBold = Fonct.Gras
Text1.SelItalic = Fonct.Ital
Text1.SelUnderline = Fonct.Soul
J = Text1.Find(Fonction(I), m_charIndexeStart + J + 1, m_charIndexeEnd)
Loop
Next I

J = -1
Do While Text1.Find("""", m_charIndexeStart + J + 1, m_charIndexeEnd) <> -1
J2 = Text1.Find("""", J + 1)
J3 = Text1.Find("""", J2 + 1) - J2 + 1
Text1.SelStart = J2
Text1.SelLength = J3
Text1.SelColor = Texte.Couleur
Text1.SelBold = Texte.Gras
Text1.SelItalic = Texte.Ital
Text1.SelUnderline = Texte.Soul

J = Text1.SelStart + Text1.SelLength + 1
Loop

For I = 0 To 9
J = -1
Do While Text1.Find(I, m_charIndexeStart + J + 1, m_charIndexeEnd) <> -1
J = Text1.Find(I, J + 1)
Text1.SelStart = Text1.Find(I, J)
Text1.SelLength = 1
Text1.SelColor = Nbr.Couleur
Text1.SelBold = Nbr.Gras
Text1.SelItalic = Nbr.Ital
Text1.SelUnderline = Nbr.Soul
Loop
Next I

Text1.SelStart = m_selStart

End Sub

Private Sub Text1_Change()
Call TexteCouleur
End Sub

Private Sub CalculIndexes()
Dim IndexeLigne As Long
Dim LongueurLigne As Integer

IndexeLigne = Text1.GetLineFromChar(Text1.SelStart)

m_charIndexeStart = SendMessage(Text1.hWnd, EM_LINEINDEX, ByVal IndexeLigne, ByVal CLng(0))

LongueurLigne = SendMessage(Text1.hWnd, EM_LINELENGTH, ByVal m_charIndexeStart, ByVal CLng(0))

m_charIndexeEnd = m_charIndexeStart + LongueurLigne
End Sub

Et bien sûr, tu remets toutes les autres fonctions/subs que t'as définies.
Avec ce code, si par exemple t'écris ViewWindow, il va apparaitre en bleu, et si au bout d'un moment tu décides de revenir dessus et d'affcer la lettre 'n' par exemple, ViewWidow va apparaître aussitôt en noir.

Voilà voilà, y a moyen d'optimiser encore, c clair, mais déjà je pense que ça t'aidera à avancer.

Bonne continuation :)

@++
MrAssoL Messages postés 30 Date d'inscription vendredi 17 mai 2002 Statut Membre Dernière intervention 14 octobre 2009
8 sept. 2003 à 23:57
wahhhh yeahhh ca fait 3 ans ke j'ai pas touché une game boy ( nom donné par moi pour designer ma casio Graph 100, car je l'ai acheté juste pour jouer !!!! ) sinon le must serai de permettre le transfert sur la casio, j'ai vu le protocol sur le net, je l'ai trouvé facilement donc si ca t'interesse va voir sur google !!! aussi pour le coloriage en directe ca va ralentir ton appli !!! ce qui serai pas mal serait quand on change de ligne là tu met la couleur, avec dans le textbox_keypress, tu peu mettre if keycode = vbkeyreturn then fonction_couleur ... sur ce je vous laisse !!! oO_MisteR_AssoL_Oo
cs_Cracker Messages postés 82 Date d'inscription dimanche 9 septembre 2001 Statut Membre Dernière intervention 21 août 2006
8 sept. 2003 à 21:35
j'avai déjà pensé au timer mais le pb c k'il change la position du curseur pendant la coloration !!! Je n'ai po encore trouver de solution a ce pb mais je croi po ke ce soit faisable avec un timer. peut-etre dans l'evennement Text1_Change !!! je te remerci kan meme du conseil !
Sinon pour la sauvegarde en RTF, j'y avai po pensé :) merci pour l'idée !!

@++
nephix2003 Messages postés 84 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 6 novembre 2004
8 sept. 2003 à 19:48
ahhhh la bonne vieille casio ... :D j'ai encore les sources de mes codes, ça me rend presque nostalgique. Dommage que je n'ai pas eu ton éditeur avant ;-)

Sinon, juste une idée, tu pourrais peut-être mettre un timer qui met à jour régulièrement la coloration ? ça permettrait d'écrire du code et d'avoir la coloration syntaxique en "live".
Tu pourrais aussi proposer la sauvegarde (et le chargement) en RTF, comme ça tu peux sauver la coloration.

allez, 9/10

@++
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 sept. 2003 à 23:00
ca a l'air sympa.
j'own une source que j'ai faite pour colorier du C++. si tu veux t'en inspirer...
cs_Cracker Messages postés 82 Date d'inscription dimanche 9 septembre 2001 Statut Membre Dernière intervention 21 août 2006
7 sept. 2003 à 21:41
Commentaires !!!!!
Rejoignez-nous