(VB6) TUTORIAL N1 (DÉBUTANT) KEYCODE + 2 OU TROIS ASTUCES

romit Messages postés 160 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 30 juin 2011 - 3 juin 2006 à 14:57
romit Messages postés 160 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 30 juin 2011 - 5 juin 2006 à 11:51
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/37924-vb6-tutorial-n1-debutant-keycode-2-ou-trois-astuces

romit Messages postés 160 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 30 juin 2011
5 juin 2006 à 11:51
Non, non, je viens de me rendre compte que en postant cette source, grace à toi, j'ai appris pas mal de choses. Et puis vu la longueur du texte tu à pris pas mal de temps à expliquer.



Encore merci Jack :p
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
5 juin 2006 à 03:00
Oui Romit.
Tu as deux solutions :
- Soit dimensionner ta variable en Static : Elle ne sera connue que de ta procédure et ne perdra pas sa valeur entre deux scrutations.
- Soit déclarer ta variable en Private dans la partie déclaration de ton code : La variable sera visible de toutes les procédures de ce module ou forme : Intérêt limité dans ton cas, mais c'est la solution standard et moins complexe pour le compilateur. Là, on se fiche un peu de l'espace mémoire occupé par l'EXE.

"Option Explicit" est juste une déclaration en tête de chaque page de code (insérable automatiquement à la création : Outils, Option, onglet Edition, case à cocher "Déclaration des variables obligatoires") qui t'oblige à déclarer chaque variable utilisée.
C'est chiant au début et on se dit que ce n'est pas utile, mais ça a l'avantage de t'obliger à réflechir à l'étendue d'application de ta variable :
- Vivante unqiuement dans la procédure : un Dim dans la procédure
- Doit conserver des données entre les procédures d'une même page de code : un Private dans la partie déclaration de la page de code
- Doit conserver des données entre les procédures de tout le projet : un Public dans la partie déclaration d'un Module (uniquement)
Pour compléter, on peut aussi déclarer une variable en Public dans une forme. Elle sera visible de tout le projet en l'appellant sous cette forme "laForme.laVariable", mais à condition que la forme soit chargée (pas forcément affichée), ce qui n'est pas toujours le cas dans un projet à plusieurs forme = Utilisation dans des cas très particuliers.

Dans de gros projets, il est hyper important de bien gérer ça.
La solution de facilité consiste à tout mettre en Public, mais ça finit par devenir une vraie jungle de variables. De plus, ça aidera le compilateur à gérer l'attribution de mémoire à l'EXE, il faut penser qu'il n'y a pas que cet EXE qui run dans le système !

Je suis content que tu es considéré mes remarques comme constructives, j'avais peur que tu les prennent comme une critique ;-)
romit Messages postés 160 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 30 juin 2011
3 juin 2006 à 20:14
OUPS !!!!

J'ai fait ça vite et j'ai fait une petite erreur. J'ai déclaré lastkey dans la procédure, j'aurais du la déclarer dans Option Explicit. Car à chaque fois elle sera remise à zero.

Donc pou corriger:
Effacer "Dim lastkey as string"
Et rajouter "Dim lastkey as string" dans les Option Explicit.

Ou bien (je ne connait pas bien la fonction mais bon) rajouter apres "dim lastkey as string"
Ceci:
"static lastkey"

^^ static c'est une fonction de Qbasic, je ne sais pas si elle marche encore mais elle permet à une variable déclarée dans une procédure de garder sa valeur ^^ :p
romit Messages postés 160 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 30 juin 2011
3 juin 2006 à 20:10
Je n'ai pas bien compris ton:
"Dans Form3 toujours : Tu ne gères pas les vbBackSpace
Tu peux donc entasser le chiffre 8 parmi les valeurs --> Test ne sera jamais bon"

Peut-etre veux-tu dire ceci:

Si par exemple je tape "eto" j'appuie sur backspace pour corriger mais le programme ne le prned pas en compte... oui mais je ne trouve pas ça tellement utile.

je pourrais faire cela pour la gestion du dernier caractère:
dim lastkey as string
if KeyCode=8 then
touche = Left(touche,Len(touche)-Len(lastkey))
'Je vide LastKey pour eviter un bug si je fait deux fois de suite BackSpace
lastkey = ""
else
touche = touche & CStr(KeyCode)
lastkey = CStr(KeyCode)
end if
If Instr(touche,"LECODE") then
'Je vide touche
touche = ""
'Action
End if

Enfin je viens detaper ça vite fait sans le tester mais ça ne prendrais en compte que le dernier caractère tapé.

Mais je ne pense pas vraiment que ça soit très utile, enfin ce mini script aura pour but d'aider un peu plus les lecteurs ^^ :p
romit Messages postés 160 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 30 juin 2011
3 juin 2006 à 19:02
lol :( Ok ben je prend tous ça en compte pour une révision ^^ :p
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 juin 2006 à 18:36
Je retire mon appréciation sévère, lol
J'avais pas vu que ton age.

Alors, c'est pas mal.
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 juin 2006 à 18:24
Beaucoup d'à peu près dans ce tutoriel sensé aider les débutants :
- Pas de "Option Explicit" dans chaque page de code :
Pourtant bien pratique pour comprendre l'étendue des variables et leur type
- Dans Form3 : Tu fais "touches = touches & KeyCode"
'touches' étant dimensionné en String
Additionner un chiffre à une String peut poser des soucis
Ca marche jusqu'au jour où ça ne marche pas ...
Utiliser CStr()
- Dans Form3 toujours : Tu ne gères pas les vbBackSpace
Tu peux donc entasser le chiffre 8 parmi les valeurs --> Test ne sera jamais bon
- Rien n'explique la différence pourtant importante entre KeyCode et KeyAscii :
KeyCode est fourni par KeyUp et KeyDown : Il représente le code de touche du clavier
KeyAscii fournit par KeyPress est le vrai caractère frappé
- Dans Form4 : Shell "explorer.exe http://www.vbfrance.com"
C'est sympa de revenir sur le site, mais si l'utilisateur utilise un autre navigateur ?
--> Il aurait été plus judicieux d'utiliser ShellExecute + l'url sans préciser l'exe.

Beaucoup de commentaires.
Dommage que le code ne soit pas correctement indenté, c'est à dire avec des décalages du début des instructions pour facilité la lecture et la recherche.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 juin 2006 à 17:21
pourquoi ne pas utiliser les constantes VbKeyEscape et VbKeyReturn plutot que de mettre leurs valeurs (27 et 13)...
ca n'aide pas a la compréhension...
romit Messages postés 160 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 30 juin 2011
3 juin 2006 à 14:57
Il y a l'air que les exe ne soit plus ouvrables.

Source du deuxième prog:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
label2.caption = KeyCode 'Label2.caption est l'endroit ou afficher le code de la touche tapée
End Sub
Rejoignez-nous