silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: bug : SHOW_MODAL bloque les évènements Ven 9 Mar 2018 - 19:53 | |
| La commande SHOW_MODAL bloque les évènements de la fenêtre rendu modale, ce qui bloque le programme car plus aucune action n'est possible. - Code:
-
label test ' form 10 : HIDE 10 : left 10,600 ' button 11 : caption 11,"Quitter" : parent 11,10 : on_click 11,test ' SHOW_MODAL 10 END test: terminate return | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: bug : SHOW_MODAL bloque les évènements Ven 9 Mar 2018 - 22:30 | |
| Exact. C'est un bug. Fais comme ceci, en attendant la correction: - Code:
-
label test ' form 10 : HIDE 10 : left 10,600 ' button 11 : caption 11,"Quitter" : parent 11,10 : on_click 11,test ' ' SHOW_MODAL 10 inactive 0 show 10 END test: active 0 hide 10 to_foregound 0 terminate : ' supprimer cette ligne pour revenir au programme de base... return | |
|
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: bug : SHOW_MODAL bloque les évènements Dim 11 Mar 2018 - 21:20 | |
| Je ne pense pas que ce soit un bug. Tel que je l'ai codé, après un SHOW_MODAL sur un FORM, ce FORM modal passe au premier plan et reste ainsi jusqu'à ce que l'utilisateur le ferme en cliquant sur la croix rouge. Tout objet lié par PARENT à ce FORM (comme un bouton) reste lui aussi bloqué jusqu'à ce que l'utilisateur ferme le FORM, et il est normal que les événements n'agissent pas. - Code:
-
dim i% label test form 10 : HIDE 10 : left 10,600 : caption 10,"Form 10" button 11 : caption 11,"Compter" : parent 11,10 : on_click 11,test SHOW_MODAL 10 END test: i%=i%+1 caption 0,str$(i%) return Dans ce code, si on clique plusieurs fois sur le bouton de FORM 10, rien ne se passe. Tout est figé. Les événements sont empilés sans s'exécuter. Si on détruit ensuite FORM 10 en cliquant sur sa croix rouge, le nombre de clics s'affiche dans le bandeau de FORM0. SHOW_MODAL avait été demandé sur le forum avec ce fonctionnement. Il fallait figer un FORM jusqu'à sa destruction, de la même manière qu'une fenêtre de la série MESSAGE fige tout et attend une action de l'utilisateur pour disparaître. Voici la définition d'un FORM modal: - Citation :
- A modal form is one where the application can't continue to run until the form is closed.
traduction: Un FORM modal est un FORM pour lequel l'application ne peut pas continuer son exécution jusqu'à ce que le FORM soit fermé. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: bug : SHOW_MODAL bloque les évènements Lun 12 Mar 2018 - 0:16 | |
| Je regrette, Jack, mais je ne suis pas d'accord avec toi, pour une fois. Si, En Delphi, j'ouvre une form avec SHOWMODAL, elle reste bien entendu active au-dessus de toutes les autres fenêtres de la même application, mais tous les objets de cette form affichée en SHOWMODAL sont actifs, que ce soit les boutons, les options qui peuvent changer d'état, les Edit dont un peut saisir le contenu, etc. J'ai d'ailleurs dans KGF.dll des fenêtres de dialogue qui peuvent s'afficher, qui sont ouvertes comme ça et dont évidemment tous les boutons sont actifs, et en particulier des boutons de validation ou annulation permettant de fermer la fenêtre proprement. Il est facile de vérifier ce fonctionnement d'unr form Delphi affichée par ce mode. La différence, par rapport à l'affichage d'une form par la méthode simple SHOW, c'est que SHOWMODAL est une fonction retournant une valeur pouvant être positionnée dans le code fermant la fenêtre modale, informant ainsi le programme appelant de la suite à donner, alors qu'une fenêtre ouverte par SHOW existe en fait en parallèle, de façon totalement asynchrone avec le reste du programme. Ce qui est vrai, c'est que les autres actions de l'application sont bloquées tant que la form montrée par SHOWMODAL ne sera pas fermée. Mais uniquement ces actions-là, pas cette de la form modale. Même un objet TTimer déclarée dans la form modale fonctionne, alors que les autres sont stoppés. J'espère que tu ne m'en voudras pas d'intervenir de cette façon, mais je parle de ce que j'utilise couramment dans KGF.dll ainsi que dans les programmes Delphi indépendants. Et, d'ailleurs, il n'est même pas besoin de déclarer une telle form avec des options spéciales (telles que les fenêtres de dialogues de Windows), la simple méthoce SHOWMODAL est suffisante. EDITOn peut parfaitement simuler le comportement correct du SHOWMODAL en Panoramic pur: - Code:
-
label close10 form 10 : hide 10 : on_close 10,close10 : ... ajouter ici tous les objets de la form 10 ... ' pour SHOWMODAL: inactive 0 show 10 to_foreground 10 : ' si nécessaire - habituellement, non utile ... ' ici, on a voulu fermer la form 10: close10: hide 10 active 0 to_foreground 0 : ' ici, c'est nécessaire !
Et voilà. Tous les objets de la form 10 sonc actifs, alors que les objets de la form 0 ne sont pas accesibles. Et en fermant la form 10 (même avec la croix rouge), tout redevient normal. | |
|
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: bug : SHOW_MODAL bloque les évènements Lun 12 Mar 2018 - 10:53 | |
| @jack Je pensais que SHOW_MODAL fonctionnait tel que le décris klaus. Jimaginais pouvoir imposer un choix à l'utilisateur (comme OPEN_DIALOG/SAVE_DIALOG) avant de poursuivre le déroulé du programme L'intérèt de cette commande tel qu'elle est ne me saute pas vraiment au yeux, puisque une fenetre MESSAGE fait la même chose. Le code que tu montres provoque une erreur au dela de 5 click: Il n'est pas rare que je l'obtienne avec les évènements empilés. | |
|
Contenu sponsorisé
| Sujet: Re: bug : SHOW_MODAL bloque les évènements | |
| |
|