Usercontrol richtextbox correcteur d'orthographe

Soyez le premier à donner votre avis sur cette source.

Vue 11 572 fois - Téléchargée 1 392 fois

Description

Ce UserControl permet de faire des propositions de mots à l'utilisateur au fur et à mesure de la saisie.
C'est surtout à titre de tuto que cela pourra être utile, parce qu'il y a quand même quelques inconvénients :
- La base de données (DB) qui stocke les mots fait ... 21 Mo - Pas facile à transporter !
- Pour tenter de le poster ici, je joins un fichier texte avec plus de 330.000 mots. Le fichier fait 3.9Mo.
Une première application vous permettra de créer la DB chez vous (15 minutes)
- Il suffira de copier la DB générée sur le répertoire où se trouve l'application principale de démo
- Le composant est lent, ça se comprend un peu.

Les paramètres propres au UserControl commencent tous par "DB_" :
DB_AvecCorrecteur : Permet d'inhiber la fonction
DB_IgnorerMotAvecChiffres : Ne fera pas de recherche si le mot en cours comporte des chiffres
DB_IgnorerMotEnMajuscule : Ne fera pas de recherche si le mot n'est composé que de majuscules
DB_NbrLettresMini : Nombre de lettres saisies à partir duquel on commence à interroger la DB
DB_NbrMotsMaxi : Nombre de mots maxi pour afficher la liste
DB_TimeOut_mSec : Durée maximum du questionnement de la DB
Avec la méthode DB_AjouterMot, vous pourrez rajouter des mots dans la DB si besoin.
Toutes les autres propriétés, méthodes et évènements du UserControl sont ceux d'un RichTextBox standard.

Les recherches de mots compatibles avec les lettres saisies sont de plusieurs types :
- Mots commençant par les lettres connues
- Mots dont 2 lettres sont inversées (dyslexie) (regSItre -> regIStre)
- Mots qui ont un caractère en trop (sOOurce -> sOurce)
- Mots dont on a oublié d'entrer une des lettres (apeler -> apPeler)
- Mots dont une des lettres est fausse (apOeler -> apPeler)
- Mots qui ressemblent (méthode SoundEx)

De plus, la liste proposée est placée dans une forme à part, pas dans une ListBox implantée sur le RichTextBox. De cette manière, la liste peut déborder de la forme de l'application. Pas facile à mettre au point, mais c'est beaucoup plus mieux qu'une liste dont on ne verrait pas les lignes parce qu'on écrit en bas du RTB.

Conclusion :


J'ai pris la peine de bien commenter la source.
Elle n'a pas de réelle utilité, mais les méthodes utilisées sont intéressantes.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
151
Date d'inscription
samedi 17 juillet 2004
Statut
Membre
Dernière intervention
11 mai 2012

merci jack c'est r?solu
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Dans ton cas, si tu avais voulu entrer tout ton texte dans le dictionnaire (impossible), il aurait fallu entrer la commande :
Call DB_AjouterMot(rtbTexte.Text)
car l'objet qui contient le texte DANS le UC est la RichTextBox, pas le UC lui même qui est un ensemble de composants.
Par contre, depuis ta forme hôte qui héberge un exemplaire du UC, il n'existera que le ucRTBCorrecteur1 et ses fonctions.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Mais pourquoi veux-tu à tout prix lui transmettre le texte entier ?
Il s'agit d'ajouter un mot, pas plus.

Si tu travailles DANS le UC, il ne faut pas y faire référence.
Exemple d'utilisation du menu en question :
Private Sub mnuAjouterMot_Click()
Dim Texte As String
Texte = InputBox("Quel mot voulez-vous ajouter au dictionnaire ?", _
"Ajout de mot au dico", "")
If Texte = "" Then Exit Sub
DB_AjouterMot (Texte)
End Sub
Messages postés
151
Date d'inscription
samedi 17 juillet 2004
Statut
Membre
Dernière intervention
11 mai 2012

j'ai cr?e le menu
Private Sub mnuAjouterMot_Click
ucRTBCorrecteur.DB_AjouterMot rtbTexte.Text
End Sub
dans le control lui m?me le probl?me

c'est que ucRTBCorrecteur ne reconnais pas DB_AjouterMot
il me signale l'erreur ucRTBCorrecteur variable non d?finie

merci
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
"ucRTBCorrecteur1" est bien le nom du composant sur ta forme hôte ?
Appelles-tu cette fonction depuis le code de ta forme hôte ou bien depuis le code du UserControl (UC) ? Dans ce cas, bien sûr, il faut utiliser le nom de la RTB dans le UC !

Dans l'exemple, là, tu passes le texte entier de la RTB !
Il faut récupérer le seul et unique mot à insérer (à faire en t'inspirant du découpage de texte déjà présent dans le code).
Quelle erreur as-tu ?
Quel est le comportement du programme ?
La fonction accepte une chaine 'String'
Afficher les 18 commentaires

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.