EDITEUR/IDE POUR VBSCRIPT (AVEC COLORATION DU TEXTE)
spy166
Messages postés207Date d'inscriptionjeudi 21 novembre 2002StatutMembreDernière intervention29 mars 2006
-
15 oct. 2004 à 16:33
Utilisateur anonyme -
26 mai 2005 à 14:49
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Bonjour dragon, ton ide me plait beaucoup car je code enorme en vbs ( faut dire que c'est vraiment un language simple a utiliser et tres complet) mon souci et que je n'est pas de compilateur pour compiler ton ide, tu pourais par hazard me metre a dispo un exe ou un zip de ton ide ? se serait sympas de ta part. merci
philheiz
Messages postés117Date d'inscriptionmercredi 3 décembre 2003StatutMembreDernière intervention11 octobre 20071 25 janv. 2005 à 19:17
cool ! je vais implémenter ca dés que possible et je mettrai à jour aussitôt.
merci. je me réjouis de voir le résultat.
chevalierdas
Messages postés1Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention25 janvier 2005 25 janv. 2005 à 18:49
Code très intéressant notamment sur la partie formatage. J'ai quelques suggestions:
1) Ne traiter que la partie visible grâces aux fonctions suivantes:
*****************
' Edit Control Messages
Public Const EM_GETLINECOUNT = &HBA
Public Const EM_LINEINDEX = &HBB
Public Const EM_LINELENGTH = &HC1
Public Const EM_GETFIRSTVISIBLELINE = &HCE
Public Const EM_POSFROMCHAR = &HD6
Public Const EM_CHARFROMPOS& = &HD7
Public Const EM_EXLINEFROMCHAR = (WM_USER + 54)
Public Function GetLineIndex(ByVal RTFControl As Control, ByVal line As Long) _
As Long
GetLineIndex = SendMessage(RTFControl.hwnd, EM_LINEINDEX, ByVal line, ByVal _
0&)
End Function
Public Function GetLineLength(ByVal RTFControl As Control, ByVal CharPos As _
Long) As Long
GetLineLength = SendMessage(RTFControl.hwnd, EM_LINELENGTH, ByVal CharPos, _
ByVal 0&)
End Function
Public Function GetLineCount(ByVal RTFControl As Control) As Long
GetLineCount = SendMessage(RTFControl.hwnd, EM_GETLINECOUNT, ByVal 0&, _
ByVal 0&)
End Function
Public Function GetFirstVisibleLine(ByVal RTFControl As Control) As Long
GetFirstVisibleLine = SendMessage(RTFControl.hwnd, EM_GETFIRSTVISIBLELINE, _
ByVal 0&, ByVal 0&)
End Function
Public Function Getposfromchar(ByVal RTFControl As Control, ByVal CharPos As _
Long) As POINTAPI
Dim WP As POINTAPI
Call SendMessage(RTFControl.hwnd, EM_POSFROMCHAR, WP, ByVal CharPos)
Getposfromchar = WP
End Function
Public Function GetLastVisibleLine(ORTB As RichTextBox, Optional FirstVisible _
As Long = -1) As Long
Dim R As RECT
Dim P As POINTAPI
Dim I As Long
Dim C As Long
Dim CH As Long
If Len(FirstVisible) = -1 Then
FirstVisible = GetFirstVisibleLine(ORTB)
End If
C = GetLineCount(ORTB)
If C > 1 Then
R = GetRect(ORTB)
R.Bottom = (ORTB.Height \ Screen.TwipsPerPixelY) - 6
CH = GetCharHeight(ORTB)
For I = FirstVisible To C - 1
P = GetPosFromLineIndex(ORTB, I)
If (P.Y) > (R.Bottom - CH) Then
GetLastVisibleLine = I - 1
If GetLastVisibleLine < 0 Then GetLastVisibleLine = 0
Exit Function
End If
Next I
End If
GetLastVisibleLine = I - 1
End Function
Public Function GetNumVisibleLines(ORTB As RichTextBox) As Long
Dim FL As Long
FL = GetFirstVisibleLine(ORTB)
GetNumVisibleLines = (GetLastVisibleLine(ORTB, FL) - FL) + 1
End Function
Public Function GetPosFromLineIndex(ORTB As RichTextBox, ByVal line As Long) As _
POINTAPI
Dim FirstChar As Long
FirstChar = GetLineIndex(ORTB, line)
GetPosFromLineIndex = Getposfromchar(ORTB, FirstChar)
End Function
*****************
2) Pour formater ligne à ligne, rechercher les \par du .TextRTF correspondant au vbcrlf du .text et ne construire (formater que cette partie là)
3) Utiliser des expressions régulières pour trouver les mots à colorier
4) Utiliser une recherche dichotomique pour trouver les keywords sur un tableau initialisé ailleurs
Bravo pour l'ensemble!
cs_Labuzz
Messages postés13Date d'inscriptionsamedi 25 décembre 2004StatutMembreDernière intervention11 avril 2005 2 janv. 2005 à 08:03
Evidemament !
Au passage, comment on lie un formulaire Html avec une database pour stocker les Infos saisient ?
bibi_81
Messages postés345Date d'inscriptionjeudi 2 septembre 2004StatutMembreDernière intervention25 octobre 2007 25 oct. 2004 à 17:23
baah du VBasic
philheiz
Messages postés117Date d'inscriptionmercredi 3 décembre 2003StatutMembreDernière intervention11 octobre 20071 25 oct. 2004 à 13:21
bibi: tu voudrais apprendre à faire quoi exactement?
bibi_81
Messages postés345Date d'inscriptionjeudi 2 septembre 2004StatutMembreDernière intervention25 octobre 2007 24 oct. 2004 à 17:04
comment sa marche ? et avec logi je suis sous Windows et je ne sais pas faire ce genre de truc je voudrais apprendre je ne sais pas trop où me renseigner...
philheiz
Messages postés117Date d'inscriptionmercredi 3 décembre 2003StatutMembreDernière intervention11 octobre 20071 19 oct. 2004 à 20:18
philheiz
Messages postés117Date d'inscriptionmercredi 3 décembre 2003StatutMembreDernière intervention11 octobre 20071 19 oct. 2004 à 20:02
je vois ce que tu veux dire. A mon avis c'est tout à fait faisable; je vais me pencher sur la question.
Concernant les classes: je ne vois pas très bien comment en faire en VBS. si tu avais un exemple, ca aiderait.
Dragonmaster
Messages postés126Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention 3 avril 2009 19 oct. 2004 à 17:57
cs_yoman64
Messages postés592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 4 décembre 2008 18 oct. 2004 à 22:00
Ton control m'interresse bcp ;-)
Tu pourrais pas le mettre sur vbfrance stp ?
cs_Kelpan
Messages postés70Date d'inscriptionmercredi 24 avril 2002StatutMembreDernière intervention17 septembre 2006 18 oct. 2004 à 21:43
Pas mal du tout.
J'avais commencé un outil semblable pour un projet professionnel, mais en recréant un control de gestion de texte.
J'étais arrivé aussi à ce fameux problème de lenteur. J'ai résolu ce problème en ne gérant les couleurs que sur le texte affiché. Avec mon control, c'était faisable, avec un rtb ...
Bon courage ;-)
philheiz
Messages postés117Date d'inscriptionmercredi 3 décembre 2003StatutMembreDernière intervention11 octobre 20071 16 oct. 2004 à 21:00
dragon: ce serait cool que tu précises. je suis ouvert à toute suggestion et prêt à modifier ce qui doit l'être.
mais je ne pige pas ce que signifie 'détécter les fonction, les classes et les sub'.
a+
Dragonmaster
Messages postés126Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention 3 avril 2009 16 oct. 2004 à 17:14
Bien sur que si qu'il ya des classes en vbs !
cs_clementpat
Messages postés406Date d'inscriptionlundi 2 décembre 2002StatutMembreDernière intervention25 janvier 2014 16 oct. 2004 à 15:22
Un gros travail bien realisé .
cs_yoman64
Messages postés592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 4 décembre 2008 15 oct. 2004 à 23:32
Ya un truc que j'aime pas , c'est ta methode de colorisations... C franchement lent que le code est long ... Perso j'ai jamais reussis a faire mieu :-P mais je pense qu'une colorisation seulement de la ligne qui change , serais bcp plus rapide que de refaire tt le text a chaque fois...
philheiz
Messages postés117Date d'inscriptionmercredi 3 décembre 2003StatutMembreDernière intervention11 octobre 20071 15 oct. 2004 à 22:33
je ne suis pas sûr de te comprendre dragon: détécter quoi exactement ? les mots-clé Sub et Function sont reconnus, et dans VBS il n'y a pas de classes.
Dragonmaster
Messages postés126Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention 3 avril 2009 15 oct. 2004 à 21:47
Une petite sgg: Détecter les fonction, les classes et *es sub .
Dragonmaster
Messages postés126Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention 3 avril 2009 15 oct. 2004 à 21:46
C'est bien pensé ;)
spy166
Messages postés207Date d'inscriptionjeudi 21 novembre 2002StatutMembreDernière intervention29 mars 2006 15 oct. 2004 à 16:33
26 mai 2005 à 14:49
25 janv. 2005 à 19:17
merci. je me réjouis de voir le résultat.
25 janv. 2005 à 18:49
1) Ne traiter que la partie visible grâces aux fonctions suivantes:
*****************
' Edit Control Messages
Public Const EM_GETLINECOUNT = &HBA
Public Const EM_LINEINDEX = &HBB
Public Const EM_LINELENGTH = &HC1
Public Const EM_GETFIRSTVISIBLELINE = &HCE
Public Const EM_POSFROMCHAR = &HD6
Public Const EM_CHARFROMPOS& = &HD7
Public Const EM_EXLINEFROMCHAR = (WM_USER + 54)
Public Function GetLineIndex(ByVal RTFControl As Control, ByVal line As Long) _
As Long
GetLineIndex = SendMessage(RTFControl.hwnd, EM_LINEINDEX, ByVal line, ByVal _
0&)
End Function
Public Function GetLineLength(ByVal RTFControl As Control, ByVal CharPos As _
Long) As Long
GetLineLength = SendMessage(RTFControl.hwnd, EM_LINELENGTH, ByVal CharPos, _
ByVal 0&)
End Function
Public Function GetLineCount(ByVal RTFControl As Control) As Long
GetLineCount = SendMessage(RTFControl.hwnd, EM_GETLINECOUNT, ByVal 0&, _
ByVal 0&)
End Function
Public Function GetFirstVisibleLine(ByVal RTFControl As Control) As Long
GetFirstVisibleLine = SendMessage(RTFControl.hwnd, EM_GETFIRSTVISIBLELINE, _
ByVal 0&, ByVal 0&)
End Function
Public Function Getposfromchar(ByVal RTFControl As Control, ByVal CharPos As _
Long) As POINTAPI
Dim WP As POINTAPI
Call SendMessage(RTFControl.hwnd, EM_POSFROMCHAR, WP, ByVal CharPos)
Getposfromchar = WP
End Function
Public Function GetLastVisibleLine(ORTB As RichTextBox, Optional FirstVisible _
As Long = -1) As Long
Dim R As RECT
Dim P As POINTAPI
Dim I As Long
Dim C As Long
Dim CH As Long
If Len(FirstVisible) = -1 Then
FirstVisible = GetFirstVisibleLine(ORTB)
End If
C = GetLineCount(ORTB)
If C > 1 Then
R = GetRect(ORTB)
R.Bottom = (ORTB.Height \ Screen.TwipsPerPixelY) - 6
CH = GetCharHeight(ORTB)
For I = FirstVisible To C - 1
P = GetPosFromLineIndex(ORTB, I)
If (P.Y) > (R.Bottom - CH) Then
GetLastVisibleLine = I - 1
If GetLastVisibleLine < 0 Then GetLastVisibleLine = 0
Exit Function
End If
Next I
End If
GetLastVisibleLine = I - 1
End Function
Public Function GetNumVisibleLines(ORTB As RichTextBox) As Long
Dim FL As Long
FL = GetFirstVisibleLine(ORTB)
GetNumVisibleLines = (GetLastVisibleLine(ORTB, FL) - FL) + 1
End Function
Public Function GetPosFromLineIndex(ORTB As RichTextBox, ByVal line As Long) As _
POINTAPI
Dim FirstChar As Long
FirstChar = GetLineIndex(ORTB, line)
GetPosFromLineIndex = Getposfromchar(ORTB, FirstChar)
End Function
*****************
2) Pour formater ligne à ligne, rechercher les \par du .TextRTF correspondant au vbcrlf du .text et ne construire (formater que cette partie là)
3) Utiliser des expressions régulières pour trouver les mots à colorier
4) Utiliser une recherche dichotomique pour trouver les keywords sur un tableau initialisé ailleurs
Bravo pour l'ensemble!
2 janv. 2005 à 08:03
Au passage, comment on lie un formulaire Html avec une database pour stocker les Infos saisient ?
25 oct. 2004 à 17:23
25 oct. 2004 à 13:21
24 oct. 2004 à 17:04
19 oct. 2004 à 20:18
pour ceux, qui comme moi, ne connaissaient pas:
http://msdn.microsoft.com/library/en-us/script56/html/vsobjclass.asp
19 oct. 2004 à 20:02
Concernant les classes: je ne vois pas très bien comment en faire en VBS. si tu avais un exemple, ca aiderait.
19 oct. 2004 à 17:57
Regarde ce screen...
18 oct. 2004 à 22:00
Tu pourrais pas le mettre sur vbfrance stp ?
18 oct. 2004 à 21:43
J'avais commencé un outil semblable pour un projet professionnel, mais en recréant un control de gestion de texte.
J'étais arrivé aussi à ce fameux problème de lenteur. J'ai résolu ce problème en ne gérant les couleurs que sur le texte affiché. Avec mon control, c'était faisable, avec un rtb ...
Bon courage ;-)
16 oct. 2004 à 21:00
mais je ne pige pas ce que signifie 'détécter les fonction, les classes et les sub'.
a+
16 oct. 2004 à 17:14
16 oct. 2004 à 15:22
15 oct. 2004 à 23:32
15 oct. 2004 à 22:33
15 oct. 2004 à 21:47
15 oct. 2004 à 21:46
15 oct. 2004 à 16:33