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

Signaler
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020
-
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020
-
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.

11 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
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
Messages postés
115
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
29 juin 2012

bonjour
ton code s'affiche dans quoi?
un TextBox, une liste,...?

@+JP
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020

il s'exécute dans un textebox
Messages postés
115
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
29 juin 2012

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
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020

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.
Messages postés
115
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
29 juin 2012

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
Messages postés
115
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
29 juin 2012

bonjour
MaTableEspace = ("","..","....","......","........")regle le decalage
je mets des point parceque mon texte a ete transformé au post
@+JP
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020

je te remercie, je vais essayer sa! et je te tien au courant
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
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
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020

Merci bcp, tu ma plus que mâcher le travail j'en espérais pas temps!!