PROGRAMMER UN EVENT GENERAL DANS TOUT LE PROJECT

Signaler
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012
-
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007
-
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/26643-programmer-un-event-general-dans-tout-le-project

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

MadLucas
Merci beaucoup pour le projet posté. Je vais l'etudier ce soir.

Pour repondre a tes questions, ce sont des projets MDI
Toutefois une centaine de forms ne sont pas des childs mais modales.

L'histoire de la "form qui bug", c'est tres simple:
Imagine un testeur essayant le projet. Il ouvre une form qq.
Au bout d'un moment, un msg d'erreur apparait.
ll fait la combination de touche sur la form et son nom s'affiche (genre un truc 'FrmFactPendCli'). Il le note, communique aux programmeurs. Ces derniers pour corriger l'erreur, n'ont ainsi pas besoin de perdre de temps a localiser dans les 400 forms celle qui a donnée un pb.

L'objectif est donc gagner du temps, pas en perdre.

Aller, à la revoyure.

Silmon
Messages postés
60
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
25 avril 2005

Salut Silmon,


Tiens, j'ai posté un projet pour toi...

http://www.vbfrance.com/code.aspx?ID=26874

En espérant que ça fera l'affaire...



MadLucas
Messages postés
60
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
25 avril 2005

Ok je vois,

Est-ce un projet .Net ?
Est-ce un projet SDI ? MDI ? Tabbed ?
Est-ce plusieurs applications indépendantes qui doivent dialoguer entre elles ?
Par "une forme qui bug", bug-t-elle avec un "raise event" ? Ne serais-ce pas une meilleure solution que de faire du trappage d'erreurs ?

Je vais poster une petite App sur le WinProc, mais peut-être existe-t-il une meilleure solution encore ?


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

Salut Madlucas.
c'est exactement ça!

Plus précisemment, on cherche le moyen de lancer une sub qui affiche le nom de la forme active lorsque qu'on clique sur une combine genre Ctrl+Q.

Dans un big project, cela nous permettrait d'indentifier rapidement une form qui bug.

C'est pas urgent. Aussi quand tu pourras, ton aide sera la bienvenue.

++
Messages postés
60
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
25 avril 2005

Salut Silmon,


J'ignorais que j'avais provoqué le Graal à ton égard.. ;-)

À bien comprendre ce que tu cherches à faire, c'est d'être capable de reconnaître lorsque l'utilisateur déclenche Ctrl+Q peu importe où dans ton application ?

Je travail beaucoup ces temps-ci, ce qui explique que je garde précieusement le Graal pour l'instant.. Laisse-moi quelques temps afin que je me replace dans mes devis et ensuite je te donne ma solution.


++



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

Je ne voulais pas etre aggressif, Jmocaro.
Je m'excuse aussi.

J'attends une solution Api qui permet de retirer le timer.
Mais elle ne vient pas. Je ne l'ai pas encore trouver dans le site, juste des solutions qui s'y approchent.
J'aimerai avoir plus de temps pour chercher.

Dans le forum, je me suis effectivement enervé a perdre plus de temps, a repondre et expliquer le pourquoi de ne pas vouloir faire de copier coller, qu'avoir de réponse.

Je n'ai perso aucun projet de plus de 100 forms.
Au boulot en revanche, j'integre une equipe qui bosse sur plusieurs projets
qui tournent autour de 300-400 forms. Regulierement des nouvelles forms sont crées. Peu sont retirées. En outre on travaille avec SourceSafe.
Le capharnaum donc!

Dans mes projets, si besoin j'utilise ta tecnique bien sur. Mais au boulot, c'est absolument hor-question.

Te demander si tu avais des projets de +100 forms est te demander si tu travailles sur des projects volumineux.
Si oui, la solution du copier-coller est à mon avis à rejeter pour des soucis d'actualisation de code et de cohérence. L'ideal serait l'API mystere.

Si non, ta suggestion est la bienvenu.

Au bout du compte, il est fondamental de programer des le depart avec une excellente structure, partagée, et facilement actualizable.

"Un bon programmeur est l'ami de soi même"


Encore une fois, excuse-moi

et à plus...
Messages postés
14
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
19 octobre 2007

Bonjour Silmon,

je réponds à tes questions car tu m'en poses, et vu comme tu prends les choses, c'est la dernière fois.
Excuse-moi de ne pas être à la hauteur et de ne pas être pertinent.

-j'ai lu l'intro oui, la pertinence de mon intervention est peut-être à chercher du côté de Textpad, qui te permettras d'ajouter du code à tes sources par remplacements de chaines "FORM_LOAD()" par "FORM_LOAD()" +code retour charriot + "première instruction"..

-as-tu besoin de rajouter autre chose ? non mais retirer un peu d'aggressivité et de prétention au ton de cette phrase, peut-être, en tout cas je le ressens comme ça.

-ai-je un projet de +de 100 forms ?
non, 94 forms, 30 modules et 36 classes, 1 ctrl utilisateur pour le plus gros en cours.
franchement, ça a un rapport ? tu crois que Bill Gates ou ses collaborateurs actuels ont jamais écrit un gros patapouf de projet VB avec plus de 100 forms et ça ne les empêche pas d'avoir réussi et de donner des conseils judicieux.
ce qui montre par là que je t'ai vraiment énervé.
j'insiste: excuse-moi


allez, à plus tard.
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007

Salut Jmocaro.

As-tu lu l'intro de la source? A un moment j'ai ecris:

"Une premiere solution consiste a ecrire le code dans chaque form. Dans les projects volumineux, solution vite rasoir!"

J'ai besoin de rajouter autre chose?

Maintenant quand tu dis "moi je ferais ça", je repete ce que j'ai dit dans mon permier commentaire:
"Evidemment, cette source n'est susceptible d'interesser que ceux qui travaillent sur des gros projects (+de 100 forms)"

Tu as un projet de plus de 100 forms?
Messages postés
14
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
19 octobre 2007

encore une chose:
pour le côté ajouter partout "PrSuperForm.init Me":
j'utilise un traitement de texte:TextPad qui offre toutes les possibilités de recherche et remplacement de chaînes de caractères sur plusieurs documents à la fois.
En ouvrant les *.frm on peut déjà glisser l'instruction PrSuperForm.init Me derrière le form_load, et pour la déclaration, on peut s'appuyer sur la chaîne "option explicit" si elle est placée partout ou sur "Attribute VB_Exposed = False" qui apparaît dans le .frm et opérer un remplacer.

moi je ferais ça

salut

jmo
Messages postés
14
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
19 octobre 2007

bonjour,
Je fais la remarque qui suit mais je pense que Silmon y a sans doutes déjà pensé:
Pour se passer du timer, je propose d'ajouter une méthode publique à ta classe:

Public Sub Init(ByRef PaForm As Form)
Set mForm = PaForm
End Sub

et de faire une ptite moulinette qui ajoute partout dans tes sources: (oui c'est là le hic !)

au tout début:
Private PrSuperForm As New clEventGeneral

et derrière le Form_Load:
Private Sub Form_Load()
PrSuperForm.Init Me
...

c'est pas un énorme boulot, mais tu es sûr de ne pas rater un événement, et c'est évolutif: tu peux centraliser d'autres événements, m'enfin ça, ta classe le permet déjà ! et elle peux se mettre à envoyer des événements à toutes tes formes, du style: "Pouvez-vous vous fermer?" et si tout le monde répond ok, alors elle envoie l'évènement "ben fermez-vous".
Je développe une application sur ce principe et c'est très satisfaisant.

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

Moustachu,
l'interval du timer dans le zip est de 1000
(=1 seconde). C'est surement trop peu. Il ne tient qu'a chacun de le definir a sa guise.
De toute façon, dans le code du timer, avant de referencier la form active, un test permet de savoir si la form est la meme. Ça evite de referencier inutilement.

Sinon, merci pour les compliments

MadLucas,
Justement la question que j'avais posée dans le forum était dans la categorie API. Mais je n'ai pas trouver cette solution.
Si tu sais ou il y en a une... je te remercie d'avance.
Messages postés
60
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
25 avril 2005

Salut Silmon,


Effectivement, il est possible (et même préférable) de ne pas utiliser de timer ici.

Une alternative serait de référencier le "WinProc" dans ton projet et de gérer la liste d'attente des messages de Windows.

De cette façon, il sera facile pour toi d'intercepter le ctrl+q à partir de n'importe où dans Windows. Il est aussi possible d'identifier via le nouveau "WinProc" les fenêtres réceptrices de tes actions en les référenciants avec leurs "handle".

Il y a quelques projets dans les archives qui présentes bien ce concept. Cherche du côté des APIs !


MadLucas
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

Ah oui ok... Mais comme je suis également "pas trop pour" les timers je me suis permis de proposer deux ou trois trucs comme ça... ton code a : 1) le mérite d'exister 2) le mérite de fonctionner (gros mérite :o) )... tu l'as initialisé à combien ton intervalle de Timer si ce n'est pas indiscret ?

++

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

Salut Moustache

Merci pour l'idée mais je croie qu'elle ne prend pas en compte les forms Modales (donc non Childs) du project.

Evidemment, cette source n'est susceptible d'interesser que ceux qui travaillent sur des gros projects (+de 100 forms)
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

Autre idée : et si tu crées un menu non visible sur la MDI mère qui a comme raccourci CTRL+Q, le code dans lévènement du menu sera activé depuis n'importe quel endroit de ton appli.

Il y a certainement mieu

++
Moustachu
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

Peut-être me "trompje" mais ne peut-on pas définir ta MDI "mère" comme première réceptrice des évènements clavier. Je sais que cela permet que l'évènement KeyDown de la form soit activé avant celui des contrôle de cette fenêtre mais je ne sais pas si celà fonctionne d'une MDI mère à une MDI fille.

++
Moustachu