begin process at 2008 09 05 20:25:38
1 237 501 membres
441 nouveaux aujourd'hui
14 313 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

USERCONTROL RICHTEXTBOX CORRECTEUR D'ORTHOGRAPHE


Information sur la source

Catégorie :Control Classé sous : richtextbox, correction, user, control, troulalaitoo Niveau : Initié Date de création : 12/05/2006 Date de mise à jour : 15/05/2006 18:58:33 Vu / téléchargé: 5 870 / 980

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note


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.
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

12 mai 2006 04:29:35 :
Copie d'écran
13 mai 2006 17:18:03 :
Correction -> mise à jour Zip
15 mai 2006 18:58:33 :
MàJ application pour corriger erreur signalée par Mickael
  • signaler à un administrateur
    Commentaire de jmberriot le 13/05/2006 10:45:14

       Trés interessant

             J'ai rajouté 2 menus contextuels  (Supprimer mot et Ajouter mot)  
               mais >>>>

    dans la   Function DB_AjouterMot

    >>>>>>>>>>>Signale Erreur : "Mots" non trouvé
    '---------------- Ok, on l'insère
        SQL = "Insert Into Mots (Mot, Soundex) " & "Values ('" & Texte & "', '" & xDB_SoundEX(Texte) & "')"


    >>>>>>>>>>>> Remplacé par
    '---------------- Ok, on l'insère
        SQL = "Insert Into Mots_" & sLettre & " Values ('" & Texte & "', '" & xDB_SoundEX(Texte) & "')"
    >>>>>>>>>> et ça marche.....
          

                    Pas assez doué sur les bases  alors d'ou vient l'erreur , si tu as une idée à l'occasion

      JMB  Bonne programmation

  • signaler à un administrateur
    Commentaire de jack le 13/05/2006 17:16:46 administrateur CS

    Exact, JM, je n'avais pas corrigé cette requète.
    En fait, au début, tous les mots se trouvaient dans une seule table et j'ai modifié la structure après, pensant que ça rendrait plus rapide les recherches. Ca n'a pas changé grand chose. Je mets à jour le Zip.
    Une fois cette correction faite, tout fonctionne. Tu as encore une erreur ?

  • signaler à un administrateur
    Commentaire de jmberriot le 13/05/2006 18:23:38

        Non c'est impec
       Maitrisant mal les bases de données je craignais des données perdues, déplacées ou écrasées  j'ai eu des déboires dans un prog perso où des blocs de dizaines de données se trouvaient déplacées à l'ouverture sans raison apparente ; problème jamais résolu alors je manipule les données dans fichier txt mais il devient trop gros ........ en attendant merci pour la reponse
                JMB

  • signaler à un administrateur
    Commentaire de Mikaels35 le 15/05/2006 08:45:16

    Salut Jack

    J'essaie de tester ton programme, mais jobtiens cette erreur quand je fais la conversion TXT->MDB !

    "-2157217865- Le moteur de base de données Microsoft Jet ne peut pas trouver la table ou la requête source 'Mots'.
    Asssurez-vous qu'elle existe et qu'elle est correctement orthographiée."

    Que dois-je faire pour pouvoir mener à bien cette conversion ?

    Merci d'avance

    @+

  • signaler à un administrateur
    Commentaire de Renfield le 15/05/2006 13:27:07 administrateur CS

    remplace simplement :

    'SQL = "Delete * From Mots"

    par :
        Dim nDeleteCount As Long
        For ff = 65 To 90
            SQL = "Delete From [Mots_" & Chr$(ff) & "]"
            maDB.Execute SQL, Nb
            nDeleteCount = nDeleteCount + Nb
        Next ff

  • signaler à un administrateur
    Commentaire de Mikaels35 le 15/05/2006 16:54:26

    Merci beaucoup Renfield, ça marche impec !

    @++

  • signaler à un administrateur
    Commentaire de jack le 15/05/2006 18:51:58 administrateur CS

    lol, merci Renfield
    Encore une correction que je n'ai pas faite après ma modif organisationnelle.
    Je corrige le zip dans la foulée.

  • signaler à un administrateur
    Commentaire de HAJYAHIA le 08/05/2007 15:32:07

    ou est le code source ?

  • signaler à un administrateur
    Commentaire de jack le 08/05/2007 15:45:53 administrateur CS

    Salut à toi aussi Hajyahia
    Il te faut cliquer sur "Télécharger le Zip", les sources sont dedans.

  • signaler à un administrateur
    Commentaire de amita le 19/05/2008 20:17:35

    comment ajouter un mot ? liste par la fonction DB_AjouterMot
    avec un menu contextuelle

  • signaler à un administrateur
    Commentaire de Renfield le 20/05/2008 08:36:15 administrateur CS

    pardon ?

  • signaler à un administrateur
    Commentaire de jack le 20/05/2008 15:15:02 administrateur CS

    Salut Amita
    En effet, cette fonction n'est appelée par personne.
    Encore un 'truc' que j'avais prévu et que je n'ai pas utilisé.
    A priori, la fonction devrait fonctionner.
    Suffirait d'ajouter un menu contextuel (*) qui sélectionnerait le mot sous le curseur et qui enverrait ce mot dans la function :
    (*) Menu contextuel : Voir la commande PopupMenu + l'aide + les sources de vbfrance

    If ucRTBCorrecteur1.DB_AjouterMot(leMot) Then
       Status.Panels(1).Text = "Mot """ & leMot & """ ajouté au dictionnaire."
    Else
       ' Pas la peine d'écrire un message, le composant s'occupe d'envoyer un
       ' RaiseEvent pour donner la cause du refus
    End If

  • signaler à un administrateur
    Commentaire de amita le 20/05/2008 18:09:00

    le problème se pose quand je met

    If ucRTBCorrecteur1.DB_AjouterMot(ucRTBCorrecteur1.text) Then
       Status.Panels(1).Text = "Mot """ & ucRTBCorrecteur1.text & """ ajouté au dictionnaire."
    Else
       ' Pas la peine d'écrire un message, le composant s'occupe d'envoyer un
       ' RaiseEvent pour donner la cause du refus
    End If

    cad que ucRTBCorrecteur1.text est une variable de text

  • signaler à un administrateur
    Commentaire de jack le 20/05/2008 19:34:32 administrateur CS

    "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'

  • signaler à un administrateur
    Commentaire de amita le 21/05/2008 17:01:07

    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

  • signaler à un administrateur
    Commentaire de jack le 21/05/2008 19:00:44 administrateur CS

    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

  • signaler à un administrateur
    Commentaire de jack le 21/05/2008 19:04:39 administrateur CS

    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.

  • signaler à un administrateur
    Commentaire de amita le 21/05/2008 20:49:35

    merci jack c'est r?solu

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS