IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Lenteur de colorisation - RichTextBox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Par défaut Lenteur de colorisation - RichTextBox
    Bonjour,

    J'ai développé un code de "colorisation de code PHP". Le code fonctionne à merveille, je suis partis sur un algo 'personnel' sans trop suivre ceux existant pour faire ce genre de script mais je suis content de moi. j'arrive a coloriser 35 000 caratères en 350Ms en moyenne.

    Seulement j'ai un gros soucis.
    Ma fonction permettant de colorier met 350Ms mais en ajoutant l'affichage et le raffraichissement de la richTextBox le temps passe à une ou deux secondes :s
    Très désagréable lorsque l'on change le texte a colorier ( imaginer si Word réfléchissait deux secondes avant d'afficher le caratère que vous venez de saisir... )

    En gros, ma fonction se présente sous cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    ' rtb est un RichTextBox qui n'est pas affichée a l'écran,
    ' il me sert à creer le 'code' RTF. 
    Dim rtb as new RichTextBox
     
    public function Colorier( ByRef code_source as string ) as String
    	rtb.text= code_source
    	' on applique l'algo...	
    	'et pour colorier un mot, je procéde de cette manière:
     
    	with rtb
    		.SelectionStart = x
    		.SelectionLength = y
    		.SelectionColor= color.blue
    	end with
     
    	' a la toute fin de cette fonction,
    	' je renvoi le  text en rtf:
    	return rtb.rtf
    End Function
    l'appel de la fonction depuis le programme principal se fait de cette manière:
    Soit 'RTBcode', la RichTextBox affichée a l'écran et qui accueil le code source php.
    RTBcode.rtf=colorier(RTBcode.text)

    Toute cette partie me prend en moyenne 350Ms.
    Seulement a l'affichage, comme je le vous disait, la Richtextbox met une à deux secondes avant de se raffraichir.


    Quelqu'un aurait une idée pour améliorer le raffraichissement ?
    J'ai tenté en mettant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    rtb.SuspendLayaout()
    '...
    rtb.ResumeLayaout()
    Mais sa n'a pas vraiment réduit ce laps de temps.


    Deuxième petite question:
    Plutôt que d'utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	with rtb
    		.SelectionStart = x
    		.SelectionLength = y
    		.SelectionColor= color.blue
    	end with
    Serais-ce plus rapide si, au lieu de procèder comme précédement, j'écrivait moi même le code RTF dans une chaine de caratère ?
    ( remplacer le RichTextBox rtb en une chaine de caratère et écrire moi même le code RTF brut )

    Désolé pour le post un peu long ^^
    et merci

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    pour concaténer du texte, la classe stringbuilder est plus rapide que des strings

    mais à part ca je peux pas trop t'aider
    c'est juste le rtb.rtftexte = code_rtf qui prend du temps ?
    si oui trouve un autre control qui fait du texte en couleur ...
    essaye ptete avec le webbrowser et du code html, voir meme d'ajouter un morceau de word ou encore de faire du vsto pour word

    et pourquoi ne pas utiliser un editeur php (ou meme textpad...) ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Serais-ce plus rapide si, au lieu de procèder comme précédement, j'écrivait moi même le code RTF dans une chaine de caratère ?
    ( remplacer le RichTextBox rtb en une chaine de caratère et écrire moi même le code RTF brut )
    Assurement. La Richtextbox n'aura pas a effectuer le rendu

    Essaie juste de cacher le Richtextbox avant la coloration et de le reafficher ensuite

    PS: Suspend et ResumeLayout c'est pour l'interaction des elements visuels (position/taille) et pas du texte, pour cela que ca marche pas

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Par défaut
    et pourquoi ne pas utiliser un editeur php (ou meme textpad...) ?
    Parceque je voulais developper mon propre algorithme,rien de mieu pour apprendre...

    Assurement. La Richtextbox n'aura pas a effectuer le rendu

    Essaie juste de cacher le Richtextbox avant la coloration et de le reafficher ensuite
    ok, merci de l'info. Je vais essayer d'écrire directement en RTF.

    PS: Suspend et ResumeLayout c'est pour l'interaction des elements visuels (position/taille) et pas du texte, pour cela que ca marche pas
    Quand je trouve pas ce qui me bloque dans un code, j'essai un peu tout et n'importe quoi
    c'est seulement après que je viens sur ce forum ^^

Discussions similaires

  1. [Débutant] Coloriser les commentaires (richTextBox)
    Par polux dans le forum C#
    Réponses: 5
    Dernier message: 04/12/2013, 21h52
  2. wpf colorisation mot clé richtextbox
    Par damii1 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 12/06/2009, 10h44
  3. Lenteur d'execution de Jbuilder 6
    Par Tsimplice dans le forum JBuilder
    Réponses: 6
    Dernier message: 18/12/2002, 14h41
  4. [VB6] Ecrire à un endroit précis d'un richtextbox
    Par STG dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 26/11/2002, 14h35
  5. [VB6] [RichTextBox] Aller en bas
    Par fea dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 22/10/2002, 11h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo