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

dentfree 82 Messages postés mardi 15 novembre 2011Date d'inscription 31 mai 2017 Dernière intervention - 7 mai 2012 à 15:49 - Dernière réponse : dentfree 82 Messages postés mardi 15 novembre 2011Date d'inscription 31 mai 2017 Dernière intervention
- 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 

Votre réponse

11 réponses

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 11 mai 2012 à 10:40
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
mjpmjp 115 Messages postés dimanche 6 avril 2003Date d'inscription 29 juin 2012 Dernière intervention - 7 mai 2012 à 18:15
0
Utile
bonjour
ton code s'affiche dans quoi?
un TextBox, une liste,...?

@+JP
Commenter la réponse de mjpmjp
dentfree 82 Messages postés mardi 15 novembre 2011Date d'inscription 31 mai 2017 Dernière intervention - 9 mai 2012 à 16:47
0
Utile
il s'exécute dans un textebox
Commenter la réponse de dentfree
mjpmjp 115 Messages postés dimanche 6 avril 2003Date d'inscription 29 juin 2012 Dernière intervention - 10 mai 2012 à 15:21
0
Utile
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
dentfree 82 Messages postés mardi 15 novembre 2011Date d'inscription 31 mai 2017 Dernière intervention - 10 mai 2012 à 17:34
0
Utile
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
mjpmjp 115 Messages postés dimanche 6 avril 2003Date d'inscription 29 juin 2012 Dernière intervention - 10 mai 2012 à 20:10
0
Utile
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
mjpmjp 115 Messages postés dimanche 6 avril 2003Date d'inscription 29 juin 2012 Dernière intervention - 10 mai 2012 à 20:12
0
Utile
bonjour
MaTableEspace = ("","..","....","......","........")regle le decalage
je mets des point parceque mon texte a ete transformé au post
@+JP
Commenter la réponse de mjpmjp
dentfree 82 Messages postés mardi 15 novembre 2011Date d'inscription 31 mai 2017 Dernière intervention - 11 mai 2012 à 08:47
0
Utile
je te remercie, je vais essayer sa! et je te tien au courant
Commenter la réponse de dentfree
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 11 mai 2012 à 10:46
0
Utile
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 11 mai 2012 à 10:51
0
Utile
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
dentfree 82 Messages postés mardi 15 novembre 2011Date d'inscription 31 mai 2017 Dernière intervention - 14 mai 2012 à 09:05
0
Utile
Merci bcp, tu ma plus que mâcher le travail j'en espérais pas temps!!
Commenter la réponse de dentfree

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.