Programmer un Event general

Résolu
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007 - 1 oct. 2004 à 16:33
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007 - 6 oct. 2004 à 19:08
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

Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
6 oct. 2004 à 19:08
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
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
1 oct. 2004 à 19:35
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
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
1 oct. 2004 à 19:37
Hmm tout bien refléxis le principe n'est pas mauvais mais ne prend pas en charge plusieurs lignes.

désoler
Chris...
Firstruner
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
1 oct. 2004 à 19:43
Sinon tu as le copier / coller dans chaque form

Chris...
Firstruner
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
1 oct. 2004 à 20:41
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.
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
1 oct. 2004 à 20:45
Peut-être en créant un contrôle insérer lui même dans le projet.

Chris...
Firstruner
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
1 oct. 2004 à 20:48
Ton projet est-il un projet MDI ?

Chris...
Firstruner
0
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
4 oct. 2004 à 16:12
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...
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
4 oct. 2004 à 16:38
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]
0
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
6 oct. 2004 à 19:05
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.
0
Rejoignez-nous