Comment coder un menu déroulant et une ToolBar ? [VB] - VB/VBA/VBS - Programmation
Marsh Posté le 11-01-2003 à 17:59:41
beuh?
pourtant avec un menu c plus facile, tu crées ton menu, puis au design time, tu sélectionnes le menu dont tu veux coder la réaction, il te fera apparaître un code du style
Code :
|
en admettant que ton menu s'appelle Menu. Suis pas sûr d'avoir bien capté la question cela dit
Marsh Posté le 11-01-2003 à 18:10:24
drasche a écrit : beuh?
|
je me suis mal expliqué ce que je veux c'est déclenché l'évènement click de la même façon que sur un button je clic dessu il m'ouvre la fenêtre de code avec le Private Sub évènement_Click()
seulement là cette icone est inclus dans une toolbar
et quand je clic sur la toolbar j'ai pas ça
Marsh Posté le 11-01-2003 à 18:36:08
Pas clair clair le problème précis (mais bien réel).
Si c'est un niveau fonctionnel, je ne sais pas comment font les autres, mais j'ai créé une fonction générale "OuvrirFichier". Quand on clique sur le bouton adhoc, il lance la fonction "OuvrirFichier", et le menu adhoc fait de même : une seule fonction qu'on peut lancer de différents endroits.
Y autant de fonctions que d'actions, mais mises à part.
Click sur bouton ou sur menu sont des évènements distincts même si le résultat (voulu par le développeur) final est le même.
Marsh Posté le 11-01-2003 à 19:31:27
CARBON_14 a écrit : Pas clair clair le problème précis (mais bien réel). |
les menus et les boutons ne me poe pas de problême, le problême je l'ai avec des bouton qui sont dans le toolbar
Marsh Posté le 11-01-2003 à 19:48:37
CARBON_14 a écrit : Pas clair clair le problème précis (mais bien réel). |
idem pour moi, sauf que j'appelle directement le truc dans MenuMachin_Click
Marsh Posté le 11-01-2003 à 19:49:55
albator7k a écrit : |
moi ce que je pige pas c'est que le code de ton premier post me paraît correct, pour autant que le champ Key de chaque bouton soit garni avec une constante. Est-ce le cas?
Marsh Posté le 11-01-2003 à 19:54:04
C'est sûr que si Button.Key est un integer, faut comparer à une valeur integer (ou constante globale definie qq part).
Select Case Button.Key
case "Ouvrir" peut pas aller si Button.Key n'est pas une chaine.
NB : je sais même plus si select case marche avec les chaînes, le C me fait perdre mémoire VB.
EDIT : VB, je suis resté à la version 3 16 bits. Passé à C et je me fait mes barres d'outils à la main, ex nihilo, => galèrique.
Marsh Posté le 11-01-2003 à 20:04:35
ben button.key est défini via les Custom Properties de la toolbar (champ Key) donc ce n'est pas compliqué à résoudre
Marsh Posté le 11-01-2003 à 21:56:19
j'ai réussi à coder le menu déroulant sans problême, la fonction enregistrer via fichier->enregistrer fonctionne nickel, par contre je sais pas comme ent la choper via la toolbar
vous me parlez de key c'est bien ça
je suis largué là en plus y a rien dans mes bouquins à par les menus déroulant, et les boutons on peut pas dire qu'ils se cassent le cul les éditeurs
Marsh Posté le 11-01-2003 à 22:15:21
voir la fonction que tu donnes dans ton premier post, c exactement ça que tu dois faire. Si la key "Save" est associée à ton bouton, tu dois lire la propriété Key du bouton que tu reçois en paramètre à ta fonction Toolbar1_ButtonClick. Cette Key doit être égale à la Key que tu as tapé dans les propriétés.
Marsh Posté le 11-01-2003 à 22:42:16
Moi j'utilise l'index (1, 2, 3, ...) et ça marche très bien
Marsh Posté le 11-01-2003 à 22:54:55
J'ai un doute (illumination) :
En VB, on fait pas
select case Chaine$
case IS "toto"
case IS "tata"
end case
Faut pas le mot clé IS pour chaînes ??
Sinon, on peut créer des variables symboliques
const BTNNEW 1 (pour le const suis plus sûr syntaxe)
const BTNSAVE 2
etc..
et mettre ces variables dans zones de propriétés (c'est comme ça que je fais en C). C'est plus lisible que 1, 2, 3 et ça les remplace avantageusement.
EDIT : je suis jaloux pour la fabrication des boutons, ça semble très "facile" : créer nouveau bouton. Quand on le code en dur, ça est un peu plus beaucoup compliqué. C'est bien les langages évolué, finalement.
Marsh Posté le 11-01-2003 à 23:01:20
Non non.
Select Case Tartampion
Case "truc":
' Do something
Case "machin":
' Do another thing
Case Else:
' Do something else
End Select
Non, par contre, chaque section Case est totalement indépendante, contrairement au C ou tous les cases suivants sont éxécutés.
Marsh Posté le 11-01-2003 à 23:04:04
Pour le coup des constantes dans les propriétés graphiques, chuis pas sûr... Jamais essayé, moi ça me fait peur
Mauis à priori, si tu mets des lettres alors qu'il attends un chiffre, il te jette.
Et c'est pas plus mal, parceque quand c'est du texte qui est attendu, le seule moyen pour différencier "toto" et la variable "toto", serait de mettre des guillemets autour des chaînes... Super pratique pour écrire les champs caption
Marsh Posté le 11-01-2003 à 23:16:21
MagicBuzz a écrit : Non non. |
Pour les blocs, je sais car j'ai pratiqué qq années. Le case suivant fait un "break" invisible.
Je me demandais juste pour les "chaînes de caractères". Je croyais que c'était case IS "toto". En C, case szChne marche pas du tout du tout.. Mais case BTNSAUVE: très bien.
Il doit y avoir une discordance entre ses variables "New" dans création de bouton, et le test pour savoir quel bouton est cliqué.
Une chose à faire (si j'étais à sa place) : mettre un point d'arrêt (F9 non ?) avant ou au début du test sur
Select Case Button.Key
et quand on y arrive, voir quel est le Button.Key qui arrive à ce moment là (en l'explicitant avec la touche VB adhoc), voir si c'est une chaîne ou un nombre et adapter ensuite son code. Doit y avoir une astuce toute bête.
Je viens de vérifier sous QBasic, le CASE IS ne sert que pour les comparaisons "larges" genre case IS > 5. Ouf.
QUand on met "Toto", c'est une chaîne. Ca ne peut pas être la variable Toto "masquée".
Marsh Posté le 11-01-2003 à 23:31:35
perso je fais des Case "save", et j'avoue d'ailleurs que le Case Is ne m'est jamais venu à l'esprit
Je mets aussi des lettres plutôt que des chiffres dès qu'on parle d'une Key (y compris pour les collections) sinon ya très gros risque de confusion et de péter un câble
Marsh Posté le 11-01-2003 à 23:45:02
drasche a écrit : perso je fais des Case "save", et j'avoue d'ailleurs que le Case Is ne m'est jamais venu à l'esprit |
A prpos du case le MSDN il me dit
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Key
Case Is = "New"
Nouveau_Click
tain je coince sur cette toolbar
j'ai tout codé sauf la toolbar qui fais chier il me faudrait un exemple j'en cherche sur le web mais sans succès
Marsh Posté le 12-01-2003 à 00:01:19
Si le résultat du codage ne correspond pas à ce qui est attendu, faut mettre un point d'arrêt sur le select case pour voir
1) si on y passe en cliquant sur bouton (sinon, pb codage)
2) si oui, la variable retournée est-elle la bonne (celle qui est prévue).
D'après les connaisseurs, le codage semble correct. Le debuggae par suivi d'instruction rend des fois de grands services. On pense qq chose, le compilo comprends autre chose.. Nous sommes humains donc faillibles (c'est ce que je dis quand on trouve des défauts dans mes progs ).
Marsh Posté le 12-01-2003 à 00:24:24
CARBON_14 a écrit : Si le résultat du codage ne correspond pas à ce qui est attendu, faut mettre un point d'arrêt sur le select case pour voir |
bon vais aller la nuit porte conseil quelle idée j'ai eu de vouloir foutre une toolbar
Marsh Posté le 11-01-2003 à 17:56:09
Je veux coder la fonction enregistrer de ce menu
avec un bouton de commande j'y arrive sans problème je clic et je tape mon code celui là en l'occurence
Data.Recordset.CancelUpdate
Data.Recordset.Bookmark = Data.Recordset.LastModified
mais dans un menu j'y arrive pas
la toolbar j'ai mis des case avec appel de fonction
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Key
Case "New"
Nouveau_Click
Case "Save"
Enregistrer_Click
mais comment je fais poour coder ces focntions
---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]