Programmer un Event general [Résolu]

Signaler
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007
-
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007
-
SIMON LEBON:

Prenez un project VB avec 100 forms.
Je voudrais que chaque Form execute une sub nommée 'Show_NameForm' lorsqu'on clique sur Ctrl+Q.

Deux solutions:
- La premiere: Introduire dans chaque form la sub Suivante

Private Sub Form_KeyPress(KeyAscii As Integer)
' Ctrl + Q
If KeyAscii = 17 Then Call Show_NameForm
End Sub

Cette solution est donc fastidieuse

- La deuxieme solution consiste à utiliser des API.

--> Est-ce que quelqu'un peut m'indiquer comment?

10 réponses

Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007

SIMON LEBON:

Un collegue a trouvé!!!
Je vais le placer dans une source.
Si tu veux, va voir la source 'Programmer un Event general dans tout le project'

Merci
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 113 internautes nous ont dit merci ce mois-ci

Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
14
Salut,

Tu peux peut-être voir avec : "Edition" "Remplacer" et noter :

Remplacer :
Private Sub Form_Load()<table border=0 cellspacing=0 cellpadding=4 bgcolor=#E0E0E0><tr><td class=code>
Remplacer par : 
<table border=0 cellspacing=0 cellpadding=4 bgcolor=#E0E0E0><tr><td class=code>
Private Sub Form_KeyPress(KeyAscii As Integer)
' Ctrl + Q
If KeyAscii = 17 Then Call Show_NameForm
End Sub
Private Sub Form_Load()


Remplace dans "Tout le projet"

C'est une idée simple pour une chose simple

Chris...
Firstruner
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
14
Hmm tout bien refléxis le principe n'est pas mauvais mais ne prend pas en charge plusieurs lignes.

désoler
Chris...
Firstruner
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
14
Sinon tu as le copier / coller dans chaque form

Chris...
Firstruner
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007

SIMON LEBON:

Merci Chris pour la peine de me repondre,
mais tu as juste reussi en 3 messages à paraphraser
la premiere solution de mon premier message.

Or, je ne suis intéressé qu'en la deuxieme solution.
Une solution API inserer dans un module qui capture un Event dans toutes les forms.
Je travaille dans un programme de gestion d'hopital.
Quand j'ai parlé de 100 forms, ce n'etait qu'un exemple,
en réalité nous en avons des centaines!

La premiere solution est donc inviable.
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
14
Peut-être en créant un contrôle insérer lui même dans le projet.

Chris...
Firstruner
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
14
Ton projet est-il un projet MDI ?

Chris...
Firstruner
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007

SIMON LEBON:

Oui, mais 80% des forms sont des Childs les 20 autres ne le sont pas.

Toutefois je ne vois pas comment un control me
permettrait de definir un event general
pour tout le project...
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
14
J'avais pensé à ça :
Dans ton projet lorsque tu créer le modèle SDI tu y inject le code du genre :
'--Général--
public ActionPress as Boolean
'--End Général--

sub form_keypress
  'Pression d'une touche
   me.ActionPress=True
end sub


Puis dans ta MDI tu y met un timer qui va contrôlé l'état de ActionPress de la page en cours d'utilisation, Comme ceci :

sub Timer1_timer
   if form.activeform.ActionPress=True then call Form_KeyPress
end sub


Normalement tu ne doit pas pouvoir lire le contenu de ActiveForm lors de la conception mais cela fonctionne car j'ai déjà fait un truc dans ce genre pour sauvegarder un fichier ouvert et que je visionne et non celui qui est planqué derrière une feuille.

Chris...
Web :Firstruner - eMail : [mailto:support@firstruner.com Support]
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007

SIMON LEBON

Merci pour ta suggestion.

Mais je te rapelle que nous travaillons avec des CENTAINES de forms. La solution d'ecrire ne serait-ce qu'une ligne de code dans chaque form est ABSOLUMENT impossible.
Et je ne parle meme pas des 20% de forms qui ne sont pas
Childs.

Toutefois, s'il le fallait, ce serait du plutot du genre:

'*******************************************
'Dans chaque Form
Private Sub Form_KeyPress(KeyAscii As Integer)
Set_Name_Form KeyAscii
End Sub

'Dans un module
Public Sub Set_Name_Form(ByRef KeyAscii As Integer)
If KeyAscii = 17 Then ' Ctrl + Q
MsgBox "Form active: '" & Screen.ActiveForm.Name & "'", vbInformation
KeyAscii = 0
End If
End Sub

'*******************************************

Avantage:
- pas de timer
- pas de variable a declarer dans toute les forms
- tres peu de code a placer dans chaque form

Inconvenient (un seul mais fatal):
- placer le (peu de) code dans toutes les forms
De plus, dans une equipe de programmation, il faudrait veiller
a ce que chaque programmeur introduise cette fonction
a chaque fois qu'il crée une nouvelle form dans le project.