cs_cassecroute
Messages postés44Date d'inscriptionmercredi 8 novembre 2000StatutMembreDernière intervention17 février 2006
-
23 sept. 2005 à 10:57
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 2006
-
29 sept. 2005 à 21:51
Bonjour,
en ce moment je me suis penché, sur la création du jeu boogle, j'ai
tout fait sauf, le contrôle des mots validés. Je pensais, comparer le
mot validait qui est contenu dans une variable, à un fichier comprenant
tous les mots du dictionnaire. Mais je n'arrive pas à trouver le code
qui pourrait me permettre de faire cela.
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 24 sept. 2005 à 17:46
Mea culpa, (sacré copié-collé), les close ne sont pas au bon endroit puisque si ton mot est inférieur à 3 la base et le recordset ne sont pas ouverts.
"Est ce que c'est grave de les avoir enlevé ?" Par principe, il faut refermer toute connexion ouverte dès qu'on n'en a plus besoin. D'ailleurs, après un rst.open .... essaie de coder un autre rst.open ... sans avoir fermé le 1er, ça va planter.
Les set ... = nothing, c'est pour libérer la mémoire occupée par ces objets. C'est plus propre et ça évite bien d'autres plantages car, pour ce qui est de la gestion mémoire, vb c'est pas le top.
Avec toutes mes excuses :
Private Sub cmdvalider_Click()
If Len(mot) < 3 Then
MsgBox ("Votre mot doit être composé d'au moins 3 lettres.")
mot = ""
Else
'création de la connexion vers la base de données
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=I:\PTI\dictionnaire.mdb;"
'Recherche du mot dans la table
rst.Open "select * from NomDeTaTable where champ = '" & mot & "'", cnn
If rst.EOF Then
MsgBox "pas trouvé !"
Else
MsgBox "trouvé !"
End If
<STRIKE>End If
</STRIKE> rst.Close
cnn.Close
set rst = nothing
set cnn = nothing
End If
end sub
-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 23 sept. 2005 à 11:35
OK, alors 2 solutions :
1 - celle de linasteph, simple mais un peu lente pour un fichier contenant un dictionnaire entier.
2 - celle-ci, en se servant de ADO :
Cocher "Microsoft ActiveX Data Objects x.x Library" dans les références de ton projet.
TonChemin = le dossier dans lequel se trouve le fichier texte "par ex : c:\temp"
toto.txt = le nom de ton fichier texte
champ = la 1ère ligne de ton fichier doit contenir un nom de champ
MotCherche = le mot que tu recherches
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
cs_cassecroute
Messages postés44Date d'inscriptionmercredi 8 novembre 2000StatutMembreDernière intervention17 février 2006 24 sept. 2005 à 17:19
ok merci beaucoup, ça marche très bien, sauf à la fin il me disait quant il devait afficher la phrase comme quoi le mot n'était pas assez long, que ce n'était pas possible car je fermais "rst.Close" et "cnn.Close", je les ai enlevé et ça marche, c n'est pas grave de les avoir enlevé ?
cs_cassecroute
Messages postés44Date d'inscriptionmercredi 8 novembre 2000StatutMembreDernière intervention17 février 2006 29 sept. 2005 à 19:08
Bon voilà maintenant j'aimerais faire en sorte que lorsque j'appuye qur entrer , ça fasse les instruction ci dessous , mais ça ne fonctionne pas, je reste sur un autre bouton ( pour former mes mots, les lettres sont sur des boutons, et le "curseur" reste sur la derniere lettre choisie)
Private Sub cmdvalider_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
If Len(mot) < 3 Then
MsgBox ("Votre mot doit être composé d'au moins 3 lettres.")
mot = ""
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 29 sept. 2005 à 19:55
Dis moi si j'ai compris parce que là, ça me parait un peu flou.
Donc :
- tu as 26 boutons avec une lettre de A à Z comme caption ? (si c'est ça, au passage, il faut mettre 25 à la place de 24 pour ta boucle)
- le jeu consiste à cliquer sur les boutons comme sur un clavier et leur couleur change pour indiquer qu'il ont été cliqués ?
- mot représente la concaténation des lettres cliquées ?
- ton cmdvalider effectue la recherche et remet les cmdlettre à la couleur par défaut ?
Si c'est ça, je vois une variable déclarée au niveau général de ta form (dim mot as string) ou en public dans un module (public mot as string).
dans le clic des cmdlettre :
mot = mot & cmdlettre(index).caption
ensuite, pourquoi mettre ton code dans le keypress du cmdvalider ? met-le dans l'évènement click (en enlevant ce qui concerne keyascii), ça devrait suffire.
Private Sub cmdvalider_Click()
If Len(mot) < 3 Then
MsgBox ("Votre mot doit être composé d'au moins 3 lettres.")
cs_cassecroute
Messages postés44Date d'inscriptionmercredi 8 novembre 2000StatutMembreDernière intervention17 février 2006 29 sept. 2005 à 20:03
bonsoir, alors tout d'abord, pour le nombre de bouton, il y a en a bien
25, et dans ma boucle, je vais de 0 et non de 1 à 24, donc il y en a
bien 25.
Sinon je crois qu'on ne sait pas bien compris, à la place de mettre mon
bouton cmdvalider en click, j'aimerais qu'il soit en keypress. Car je
vais vous expliquez, je dois créer pour l'école des projets, et un
certains nombre d'événements sont demandés, et il m'en manqué un, donc
je voulais rajouter un petit truc en plus, donc le fait de pouvoir
valider un mot avec le clavier.
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 29 sept. 2005 à 21:51
Sauf que, dans l'alphabet français, il y a 26 lettres, pas 25, et encore, je ne compte pas les caractères accentués.
Pour le keypress, sur un bouton, je ne vois pas l'intérêt bien qu'il existe.
Cet évènement est plutôt utilisé lors d'une saisie (textbox par ex).
A la limite, ton code :
Private Sub cmdvalider_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
'....
veut dire que, si ton bouton a le focus (il faut lui donner avant avec un setfocus) et que, si on tape enter, l'évènement click est dévalidé et le reste du code dans le keypress est exécuté. Sinon, il ne se passe rien, voire, si on tape tab, le bouton perd le focus et là, même si on tape enter, rien ne se passe ou alors le code qu'il y aurait dans le contrôle suivant ayant récupéré le focus.
Ca peut te paraître compliqué mais, rassure toi, c'est compliqué, et ce genre de chose conduit à une prise de tête magistrale.
Si tu veux absolument utiliser l'évènement keypress d'un bouton, utilise celui de ton groupe de contrôles cmdlettre dans lequel tu mettras :
Private Sub cmdlettre_KeyPress(Index As Integer, KeyAscii As Integer)
if keyascii = 13 then
cmdvalider_click
end if
End Sub
Cela aura pour effet de valider par enter (comme si tu avais cliqué sur cmdvalider) quelque soit le dernier bouton cmdlettre cliqué.
Pour parfaire la chose, tu mets la propriété tabstop de tous tes boutons à false pour dévalider la touche tab.
Je ne sais toujours pas si j'ai bien compris où tu veux en venir. En tous cas, c'est ma réponse et j'espère qu'elle t'apportera des éléments.
-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?