Auto-indentation dans un éditeur

Résolu
dentfree Messages postés 110 Date d'inscription mardi 15 novembre 2011 Statut Membre Dernière intervention 17 septembre 2023 - 7 mai 2012 à 15:49
dentfree Messages postés 110 Date d'inscription mardi 15 novembre 2011 Statut Membre Dernière intervention 17 septembre 2023 - 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.
A voir également:

11 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 mai 2012 à 10:40
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
3
mjpmjp Messages postés 115 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 29 juin 2012
7 mai 2012 à 18:15
bonjour
ton code s'affiche dans quoi?
un TextBox, une liste,...?

@+JP
0
dentfree Messages postés 110 Date d'inscription mardi 15 novembre 2011 Statut Membre Dernière intervention 17 septembre 2023
9 mai 2012 à 16:47
il s'exécute dans un textebox
0
mjpmjp Messages postés 115 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 29 juin 2012
10 mai 2012 à 15:21
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dentfree Messages postés 110 Date d'inscription mardi 15 novembre 2011 Statut Membre Dernière intervention 17 septembre 2023
10 mai 2012 à 17:34
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.
0
mjpmjp Messages postés 115 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 29 juin 2012
10 mai 2012 à 20:10
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
0
mjpmjp Messages postés 115 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 29 juin 2012
10 mai 2012 à 20:12
bonjour
MaTableEspace = ("","..","....","......","........")regle le decalage
je mets des point parceque mon texte a ete transformé au post
@+JP
0
dentfree Messages postés 110 Date d'inscription mardi 15 novembre 2011 Statut Membre Dernière intervention 17 septembre 2023
11 mai 2012 à 08:47
je te remercie, je vais essayer sa! et je te tien au courant
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 mai 2012 à 10:46
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 mai 2012 à 10:51
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
0
dentfree Messages postés 110 Date d'inscription mardi 15 novembre 2011 Statut Membre Dernière intervention 17 septembre 2023
14 mai 2012 à 09:05
Merci bcp, tu ma plus que mâcher le travail j'en espérais pas temps!!
0
Rejoignez-nous