Auto-indentation dans un éditeur [Résolu]

Messages postés
90
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
17 septembre 2019
- - Dernière réponse : dentfree
Messages postés
90
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
17 septembre 2019
- 14 mai 2012 à 09:05
Bonjour,

J'ai actuellement une application qui est un éditeur de JavaScript développer en VB6. Je voudrais insérer une auto-indentation du code à l'intérieur de l'éditeur pour facilité sont utilisation.

Quelqu'un saurait me donner des pistes? car je ne voit vraiment pas comment faire cela.
Afficher la suite 

11 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Bonjour,
Vous avez l'art de compliquer les choses, alors qu'elles deviennent simples lorsque l'on accepte de donner plus temps à la réflexion qu'à l'écriture du code.
Je ne vais pas l'écrire, ce code !
Je vais juste mettre sur la voie.
Ici, je ne vais traiter que les indentations du If (en te laissant le soin de créer 2 dictionnaires ou collections, à ta guise, pour tous les cas - en incrémentation ou décrémentation).
Lorsque l'on veut, on fait ! on réfléchit - on s'y investit soi-même !
voilà le mécanisme.
Et nous ne traitons qu'une seule textbox (nul besoin de deux)
Private Sub CommandButton1_Click()
 Dim pas As Integer
 pas = 3
 Static devant As Integer
 toto = Split(TextBox1.Text, vbNewLine)
 For i = 0 To UBound(toto)
   toto(i) = Trim(toto(i))
   If i > 0 Then avant = Trim(toto(i - 1))
   If LCase(avant) Like "if*then" Then
     devant = devant + pas
   End If
   If LCase(toto(i)) Like "end*" Then
     devant = devant - pas
   End If
   toto(i) = String(devant, " ") & toto(i)
 Next
 TextBox1.Text = Join(toto, vbCrLf)
End Sub


la collection1 ou dictionnaire1 à utiliser doit contenir tous les cas d'incrémentation :
ex : "if*then", "For*to*", "with *", "select case*) etc ...)
la collection2 ou dictionnaire2 à utiliser doit contenir tous les cas de décrémentation :
ex : "end *" (valable tant pour les if que pour les with, que pour les select), "next*"
Voilà ===>> au boulot pour ce petit exercice (de réflexion plus que de n'importe quoi d'autre)
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
115
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
29 juin 2012
0
Merci
bonjour
ton code s'affiche dans quoi?
un TextBox, une liste,...?

@+JP
Commenter la réponse de mjpmjp
Messages postés
90
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
17 septembre 2019
0
Merci
il s'exécute dans un textebox
Commenter la réponse de dentfree
Messages postés
115
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
29 juin 2012
0
Merci
bonjour
j'imagine un frame avec ta TextBox a droite dans ce frame
et a gauche de ta TextBox une autre TextBox qui contient les Numero de ligne
quand tu utilise la barre de defilement de la frame
les 2 TextBox vont defiler en meme temps
quand tu remplis ta TextBox Code ligne & VbCrlf
tu remplis egalement ta TextBox Numero & VbCrlf
@+JP
Commenter la réponse de mjpmjp
Messages postés
90
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
17 septembre 2019
0
Merci
Mais cela ne va pas auto indenté mon code??

Je n'ai qu'un seul texte box, et je ne pense pas a rajouter. Je cherche juste a pourvoir faire la mise en forme de mon code automatiquement.
par exemple si je met "if", quand je vais à la ligne il faut qu'il y est une tabulation automatique et quand je sort de mon " end if", qu'il ai un backspace. Comme un IDE classique.
Commenter la réponse de dentfree
Messages postés
115
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
29 juin 2012
0
Merci
bonjour
j'ai du manger trop de chocolat!!!
en fait jai cru que tu voulais numeroter tes lignes...

bon reprenons..identer c'est mettre du blanc devant if,for...

MaTableEspace = (""," "," "," "," ")
MaVariableDecalage = 0

si debut ligne ="IF" then
MaVariableDecalage = MaVariableDecalage +1
replace(ligne,"IF",MaTableEspace(MaVariableDecalage) & "IF")

si debut ligne ="END IF" then
replace(ligne,"END IF",MaTableEspace(MaVariableDecalage) & "END IF")
MaVariableDecalage = MaVariableDecalage -1

verifier le code
c'est juste pour l'idée
a chaque balise d'ouverture IF,For,Do... MaVariableDecalage = MaVariableDecalage +1
a chaque balise de fermeture END IF,NEXT,LOOP... MaVariableDecalage = MaVariableDecalage -1

MaTableEspace = (""," "," "," "," ")regle le decalage

desolé pour la confusion et ce code aproximatif
@+JP
Commenter la réponse de mjpmjp
Messages postés
115
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
29 juin 2012
0
Merci
bonjour
MaTableEspace = ("","..","....","......","........")regle le decalage
je mets des point parceque mon texte a ete transformé au post
@+JP
Commenter la réponse de mjpmjp
Messages postés
90
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
17 septembre 2019
0
Merci
je te remercie, je vais essayer sa! et je te tien au courant
Commenter la réponse de dentfree
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
J'espère que tu as deviné que l'on doit remplacer ces deux expressions

If LCase(avant) Like "if*then" Then

If LCase(toto(i)) Like "end*" Then

par un parcours des dictionnaires ou collections, en boucle For each à quitter dès occurrence trouvée, avec expression conditionnelle pour chaque article du dico ou de la collection.
"Ya plus qu'à", hein ...
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
et ne pas oublier de remettre devant à zéro à la fin de la boucle
 
 Next
 TextBox1.Text = Join(toto, vbCrLf)
 devant = 0
End Sub

sans incidence si code bien écrit (reviendrait seul à zéro), mais incidence si code mal écrit et donc If sans end, etc ...
Tu t'ai plus que mâché le travail (de réflexion, une autre fois).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
90
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
17 septembre 2019
0
Merci
Merci bcp, tu ma plus que mâcher le travail j'en espérais pas temps!!
Commenter la réponse de dentfree