PROGRAMMER UN EVENT GENERAL DANS TOUT LE PROJECT

cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012 - 7 oct. 2004 à 10:12
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007 - 19 oct. 2004 à 16:37
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

Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
19 oct. 2004 à 16:37
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
LogRaam (aka Gabriel Mailhot) Messages postés 60 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 25 avril 2005
15 oct. 2004 à 20:47
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
LogRaam (aka Gabriel Mailhot) Messages postés 60 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 25 avril 2005
15 oct. 2004 à 16:36
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
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
15 oct. 2004 à 16:13
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.

++
LogRaam (aka Gabriel Mailhot) Messages postés 60 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 25 avril 2005
14 oct. 2004 à 23:58
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
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
14 oct. 2004 à 20:40
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...
jmocaro Messages postés 14 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 19 octobre 2007
13 oct. 2004 à 17:21
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.
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
13 oct. 2004 à 16:39
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?
jmocaro Messages postés 14 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 19 octobre 2007
12 oct. 2004 à 17:32
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
jmocaro Messages postés 14 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 19 octobre 2007
12 oct. 2004 à 17:05
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
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
8 oct. 2004 à 17:00
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.
LogRaam (aka Gabriel Mailhot) Messages postés 60 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 25 avril 2005
7 oct. 2004 à 20:04
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
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
7 oct. 2004 à 17:53
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
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
7 oct. 2004 à 16:27
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)
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
7 oct. 2004 à 10:15
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
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
7 oct. 2004 à 10:12
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
Rejoignez-nous