[VB.NET] CLASS DE COLORATION SYNTAXIQUE "ON THE FLY"
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 2013
-
19 mars 2011 à 11:47
huzima
Messages postés6Date d'inscriptionsamedi 17 juin 2006StatutMembreDernière intervention23 mars 2011
-
22 mars 2011 à 17:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
huzima
Messages postés6Date d'inscriptionsamedi 17 juin 2006StatutMembreDernière intervention23 mars 2011 22 mars 2011 à 17:50
Merci beaucoup,
J'ai pas encore regardé, là je par du taff (1h45 de sup aujourd'hui pour un cumul qui dépasse les 30h... faut pas trop pousser non plus :P), mais dès que j'ai le temps je zieute.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 22 mars 2011 à 10:36
Pour l'exemple, j'ai configuré la chose pour colorier du SQL ^^
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 22 mars 2011 à 10:06
C:\Windows\System32\RichEd20.dll
huzima
Messages postés6Date d'inscriptionsamedi 17 juin 2006StatutMembreDernière intervention23 mars 2011 21 mars 2011 à 23:17
Ok, merci pour ce code.
Je suis pas doué pour convertir du C# en VB mais j'ai pu trouver la classe TOM sur le site de Microsoft (Msftedit.dll).
J'ai commencé à regarder, je comprend pas pour le moment mais j'ai déjà des idées qui me viennent avec ça pour avoir un code optimisé.
Je posterais surement ici le résultat final et dans un autre poste mon projet final qui en résultera (Un mini SQL manager pour IBM Universe), mais pour celui-ci ce ne sera pas avant quelque temps.
huzima
Messages postés6Date d'inscriptionsamedi 17 juin 2006StatutMembreDernière intervention23 mars 2011 21 mars 2011 à 15:27
Merci Renfield, j'avoue que je n'ai rien trouvé sur google avec seulement le terme "TOM".
Ceci dit je n'ai trouvé à peine plus d'info avec le terme "Text Object Model" et je sais pas trop ou regarder.
Actuellement je teste une autre méthode qui est assez bricolage mais beaucoup plus performante, pas de sélection visible et pas de ralentissement, mais à coté de ça, il faut accepter de perdre totalement les fonctions de "Undo"/"Redo" ce qui me gène.
(En même temps, a mon avis temps que je passerais pas par TOM, le Undo/Redo sera toujours faussé).
La dernière méthode à l'essai et en fait, d'avoir dans ma classe héritée, un Rtb invisible dans lequel je copie tout le texte pour effectuer les fonctions de coloration, une fois fini je renvoi le tout dans le Rtb visible (celui ou on saisi) en remettant le curseur à la position qu'il avait.
De plus j'ai abandonnée l'idée de rechercher le dernier mot écrit pour l'analyser, il y a beaucoup trop de code rien que pour ça, cette fois je fait tout simplement un find en boucle de chaque mot recherché, je sélectionne et applique la coloration. Enfin j'applique le texte au format Rtf de mon Rtb2 vers mon Rtb1.
Cette méthode à pour inconvénient de faire perdre tout notion d'Undo/redo car à chaque envoi du texte du Rtb2 vers le Rtb1 on supprime tout pour tout remettre.
J'aime assé cette dernière méthode de recherche (rapide et efficace), couplé à un système de recherche par expressions régulières pour ce qui est entre guillemet le tout fonctionnant en TOM et j'aurais trouvé ce que je cherche a faire exactement.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 21 mars 2011 à 09:45
TOM
Text Object Model
permet de manipuler le texte par Range et non plus par selections...
ainsi, pas de décalage de Scrollbar, pas de scintillement...
on peut aussi lui changer le EventMask et désactiver l'appel a _TextChanged...
enfin, ce genre de sympatiques réjouissances, quoi
huzima
Messages postés6Date d'inscriptionsamedi 17 juin 2006StatutMembreDernière intervention23 mars 2011 20 mars 2011 à 22:49
Merci pour vos coms, je vais regarder vos proposition, du moins les deux premières @ADCR, ça reste une solution "bricolage" sur la même ligné que ce que j'ai fais au dessus ^^.
Je sais pas que c'est c'est le TOM, mais Google devrais m'en dire un peut plus :).
Je n'ai pas testé la source, mais j'ai peut-être une piste pour ta question.
Pour éviter le clignotement, en VB6, l'astuce consistant à mettre la zone de texte en visible false, puis la remettre en visible true après le traitement. Ceci permettait d’empêcher Windows de rafraichir la zone à chaque modification.
Le fait de cacher puis de ré-afficher la zone de texte était alors quasi imperceptible.
Je n'ai jamais testé sous VB.net mais il y a des chances que cette "bidouille" soit toujours soit toujours d'actualité.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 19 mars 2011 à 18:36
utilises le TOM, pour un rendu plus rapide...
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 19 mars 2011 à 11:47
Très bon travail :-)
Pour répondre à ta question, tu peux étudier les codes sources de AvalonEdit (en WPF), c'est l'éditeur de code de SharpDevelop. Il est complexe mais très bien fait (bien que je n'ai pas réponse à ta question), tu trouveras sûrement ce que tu veux dedans.
Bravo ^^
22 mars 2011 à 17:50
J'ai pas encore regardé, là je par du taff (1h45 de sup aujourd'hui pour un cumul qui dépasse les 30h... faut pas trop pousser non plus :P), mais dès que j'ai le temps je zieute.
22 mars 2011 à 10:36
Facilement convertible en VB.Net, je pense...
(merci http://tools.codes-sources.com/DotNetCodeConverter.aspx )
Pour l'exemple, j'ai configuré la chose pour colorier du SQL ^^
22 mars 2011 à 10:06
21 mars 2011 à 23:17
Je suis pas doué pour convertir du C# en VB mais j'ai pu trouver la classe TOM sur le site de Microsoft (Msftedit.dll).
J'ai commencé à regarder, je comprend pas pour le moment mais j'ai déjà des idées qui me viennent avec ça pour avoir un code optimisé.
Je posterais surement ici le résultat final et dans un autre poste mon projet final qui en résultera (Un mini SQL manager pour IBM Universe), mais pour celui-ci ce ne sera pas avant quelque temps.
21 mars 2011 à 15:27
Ceci dit je n'ai trouvé à peine plus d'info avec le terme "Text Object Model" et je sais pas trop ou regarder.
Actuellement je teste une autre méthode qui est assez bricolage mais beaucoup plus performante, pas de sélection visible et pas de ralentissement, mais à coté de ça, il faut accepter de perdre totalement les fonctions de "Undo"/"Redo" ce qui me gène.
(En même temps, a mon avis temps que je passerais pas par TOM, le Undo/Redo sera toujours faussé).
La dernière méthode à l'essai et en fait, d'avoir dans ma classe héritée, un Rtb invisible dans lequel je copie tout le texte pour effectuer les fonctions de coloration, une fois fini je renvoi le tout dans le Rtb visible (celui ou on saisi) en remettant le curseur à la position qu'il avait.
De plus j'ai abandonnée l'idée de rechercher le dernier mot écrit pour l'analyser, il y a beaucoup trop de code rien que pour ça, cette fois je fait tout simplement un find en boucle de chaque mot recherché, je sélectionne et applique la coloration. Enfin j'applique le texte au format Rtf de mon Rtb2 vers mon Rtb1.
Cette méthode à pour inconvénient de faire perdre tout notion d'Undo/redo car à chaque envoi du texte du Rtb2 vers le Rtb1 on supprime tout pour tout remettre.
J'aime assé cette dernière méthode de recherche (rapide et efficace), couplé à un système de recherche par expressions régulières pour ce qui est entre guillemet le tout fonctionnant en TOM et j'aurais trouvé ce que je cherche a faire exactement.
21 mars 2011 à 09:45
Text Object Model
permet de manipuler le texte par Range et non plus par selections...
ainsi, pas de décalage de Scrollbar, pas de scintillement...
on peut aussi lui changer le EventMask et désactiver l'appel a _TextChanged...
enfin, ce genre de sympatiques réjouissances, quoi
20 mars 2011 à 22:49
Je sais pas que c'est c'est le TOM, mais Google devrais m'en dire un peut plus :).
19 mars 2011 à 19:46
Pour éviter le clignotement, en VB6, l'astuce consistant à mettre la zone de texte en visible false, puis la remettre en visible true après le traitement. Ceci permettait d’empêcher Windows de rafraichir la zone à chaque modification.
Le fait de cacher puis de ré-afficher la zone de texte était alors quasi imperceptible.
Je n'ai jamais testé sous VB.net mais il y a des chances que cette "bidouille" soit toujours soit toujours d'actualité.
19 mars 2011 à 18:36
19 mars 2011 à 11:47
Pour répondre à ta question, tu peux étudier les codes sources de AvalonEdit (en WPF), c'est l'éditeur de code de SharpDevelop. Il est complexe mais très bien fait (bien que je n'ai pas réponse à ta question), tu trouveras sûrement ce que tu veux dedans.
Bravo ^^