Creation de plusieurs fenêtres modales

roud59 Messages postés 99 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 26 juillet 2007 - 25 oct. 2005 à 16:14
roud59 Messages postés 99 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 26 juillet 2007 - 27 oct. 2005 à 10:27
Bonjour à tous

Voila mon problème : à l'arrivée de certains évènements (sur la liaison série par exemple), mon application ouvre une fenêtre modale dans laquelle l'utilisateur doit saisir des informations. Si un autre évènement arrive, une deuxième fenêtre modale est crée (c'est voulu) mais la première fenêtre perd le focus (et çà ce n'est pas voulu). L'utilisateur doit alors compléter et fermer la fenêtre 2 avant de finir de compléter et de fermer la fenêtre 1.

Pour résoudre ce problème lors de la création d'une fenêtre modale, mon application :

1) regarde si une fenêtre modale a le focus
2) crée une nouvelle fenêtre modale et lui passe un pointeur vers la fenêtre modale précédente
3) une fois la nouvelle fenêtre crée et dessinée, elle tente de rendre active la fenêtre précédente dont elle a eu le pointeur

Pour 3), j'ai testé SetFocus, SetForeground, .... La fenêtre précédente se remet bien au dessus mais n'a pas le focus.

Quelqu'un aurait-il une idée ou une solution ?
Merci d'avance de votre aide

Roud59

4 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
25 oct. 2005 à 16:43
gere une file d'attente.



ou sinon change le systeme Fenetre Modal avec une seule fenetre et des panel qui apparaissent au fur et a mesure.

je ne connais pas ton appli mais si un systeme ne fonctionne pas et devient execrable a mettre en place c'est qu'il n'est pas

approprié.



en gros :



010 ouverture d'une fenetre > mettre WindowOpen a true

020 sur click OK > mettre WindowOpen a false

021 si message en attente retour a 010 sinon aller a 030

030 on continus le programme ou on attend un nouveau message

ect...
0
roud59 Messages postés 99 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 26 juillet 2007 2
25 oct. 2005 à 17:01
Merci pour ta réponse fOxi

Je pense que le pannel n'est pas adapté car les fenêtres sont assez grandes, et je voudrais qu'elles soient supperposées.
J'ai pensé à uiliser des fenêtres non modales mais ceci me pose d'autres soucis :
- je veux à tout prix que l'utilisateur lise la fiche, réponde à la question et valide (c'est une fenêtre alarme) et ne puisse rien faire d'autre. Il faudrait donc désactiver toutes les autres fenêtres de l'application qui ne sont pas d'alarme
- l'information arrive par liaison série ou par modem ou par socket tcp/ip chacun dans des threads séparés. Comme l'affichage se fait dans le thread principal, le ShowMessage facilite grandement la synchronisation des threads. Si j'utilise une fenêtre non modale, il faut renvoyer la réponse de l'utilisateur au thread qui a reçu l'évènement et compliquer mes threads et mon application.

Merci quand même de ton aide.

Roud59
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
25 oct. 2005 à 17:31
mmm en gros ... avec ton systeme l'appli est bloquée tant qu'il n'y a pas eu de reponse de la part de la fenetre modal.

et en cas de flood du a un bug ... l'utilisateur vas se retrouver avec des dizaines de fenetres a l'ecran...

si j'exagere un peu... ^^



ça me parait un peu redondant comme methode.



bon deja, peut importe de ou arrive le message, le resultat est qu'un message arrive.

> pouf j'ouvre une fenetre que l'utilisateur doit remplir.

> mais plop, une nouvelle fenetre arrive faisant perdre le focus a celle ouverte.

> l'utilisateur tolerant remplis cette deuxieme fenetre (alors que l'autre attend toujours)

> mais plop plop, une troisieme fenetre arrive faisant perdre encore le focus a la deuxieme..

> l'utilisateur exasperer desinstall ton appli et cherche une alternative.

conclusion > appli mal concue.



non je pense qu'il faut, coter serveur, empecher l'envois tant qu'une tache est en cours.

lui mettre un Wait en gros.

meme si cela doit complexifier le serveur.

mais a mon humble avis, ce serat moins dur a faire que de developer un systeme tirer par les cheveux qui au final

serat plus complexe et lourd qu'une amelioration du serveur.



mais je pense qu'il vaut mieux se prendre la tete a developper un truc qui serat simple d'utilisation que de faire l'inverse.

car tu seras d'accord avec moi, y'a rien de plus exasperant qu'une application qui fonctionne de maniere irradique et illogique.



maintenant ... trouver la bonne methode a appliquer.

et si tu utiliser un PageControl ? tu pourrais jouer avec la propriete
"Visible" des pages tout en restant dans une modal qui recevrais a la
chaine les messages du serveur.



vois le probleme comme cela, deux personne se rencontre en ville.

normalement la rencontre se ferat comme cela :

client - bonjour

serveur - tiens salut! comment ça va ?

client - ca va bien et toi ?

serveur - bien bien! quoi de neuf ?

client - oh pas grand chose ... et toi ?



tu vois chaque question est traitée l'une aprés l'autre ...


prenons maintenant la meme situation mais avec ton programme voila ce qui ce passe :

client - bonjour !
serveur
- tiens salut ! ca va ? moi ça va ! quoi de neuf ? moi pas grand chose
! t'as vus a la tele hier soir ? pfff il abuse serieux ! franchement
dans quel monde on vie! moi je serais eux ... blablalblablalb...

client - ... O_o ...



faut eviter de faire un serveur "petasse" qui laisseras pas le temps au client de parler.



bon et bien bonne chance.
0
roud59 Messages postés 99 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 26 juillet 2007 2
27 oct. 2005 à 10:27
Bonjour fOxi

Mon système est un peu plus complexe car :
- j'ai (actuellement) 3 serveurs tcp/ip
- j'ai plus de 1200 'serveurs modem' qui ne sont pas des PC mais des petites cartes électronique avec un petit microcontrolleur et un petit modem.
- je gère des pannes (pas très urgentes) mais aussi des demandes de secours (franchement urgent). Et il ne faut pas que le demande de secours soit retardé parce que l'utilisateur prend son temps à aquitter une panne.Heureusement je ne reçois pas 10 alarmes en même temps en permanence, mais 2 alarmes simultanées peuvent arriver de temps en temps.
Je viens de consulter les utilisateurs, ils souhaitent une fenêtre par alarme, dont la couleur indique l'importance.
Pour ces fenêtres, j'ai donc 2 solutions : modale ou non. La modale m'arrange car le code est très simple mais j'ai le problème objet de mon post. Et comme je n'ai pas de réponse satisfaisante (excuse moi), je vais m'orienter vers les fenêtres non modales. Comme ça se situe dans un thread, je peux attendre sans bloquer le thread principal. Et puis mon nombre de fenêtres sera limité par mon nombre de threads (nombre de modem de réception + nombre de clients IP connectés). Si ça fonctionne, je ferai un post.

Merci quand même de tes réponses : elles m'ont permis de me demander s'il n'y avait pas d'autres manière de faire et de demander l'avis les utilisateurs sur ce sujet

Roud59
0
Rejoignez-nous