Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Form minimisé, normale, maximisée | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Form minimisé, normale, maximisée Sam 18 Déc 2010 - 14:14 | |
| J'aimerais pouvoir - savoir dans quel état est une form (minimisée, normale, maximisée) - être avertie quand son état change - pouvoir forcer l'état (minimisé, normal, maximisé) Pour cela, je propose: - une variable système FORM_STATUS qui retournerait les valeurs suivantes: 0 = normal 1 = minimisé 2 = maximisé - un évènement on_change sur une form qui se déclencherait si l'état change - une commande FORM_MODE N,S avec N=numéro de form S=état de la form à établir: 0 = normal 1 = minimisé 2 = maximisé
| |
| | | dragonno
Nombre de messages : 341 Localisation : Près de Toulouse Date d'inscription : 22/01/2009
| Sujet: Re: Form minimisé, normale, maximisée Sam 18 Déc 2010 - 16:35 | |
| Tu veux dire un évennement on-resize Sinon bien vu pour cette idée, intéressant ça. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Form minimisé, normale, maximisée Sam 18 Déc 2010 - 17:32 | |
| Oui, ce serait exactement un évènement ON_RESIZE. J'ai simplement choisi ON_CHANGE car c'est un mot-clé déjà connu de Panoramic, seulement pas utilisable avec les form. Je me suis dit que l'implémentation serait plus facile en activant ce mot-clé pour les form pour y projeter les évènements windows correspondant au resize, minimize, maximize ou normalize, mais je peux me tromper. Mais je suis sûr que Jack saura trouver la bonne formulation s'il retient cette suggestion. | |
| | | Invité Invité
| Sujet: Re: Form minimisé, normale, maximisée Dim 19 Déc 2010 - 0:42 | |
| Tu poses un demande pour entre-autre minimiser une fenêtre, et moi j'ai un problème avec ta dll: kgf.dll Je ne voulais pas ouvrir un nouveau sujet vu qu'il s'agit d'un problème externe à Panoramic, et comme justement il s'agit de diminuer un form, et bien je vais poser le problème ici. Il me semblait que l'on pouvait cumuler les découpes dans un form, mais cela ne marche pas. Les deux codes pris individuellement fonctionnent, mais l'association des deux, fait que la deuxième découpe referme la première. - Code:
-
dim i% :label fin :width 0,50:height 0,50 form 10:width 10,410:height 10,160:border_small 10 :top 10,200 :on_click 10,fin dll_on "C:\TESTE\KGF\KGF.dll" i%= DLL_call6("WindowRectangleHole" , handle(10) , 1 , 377 , 0, 70 , 70 ) i%= DLL_call6("WindowRectangleHole" , handle(10) , 1 , 377 , 70, 5 , 90 ) end fin: terminate Est-ce pas possible, ou y-a-t'il une erreur de ma part? Dans le cas où cela n'était pas prévu, ne te casses pas la tête, j'essaye une chose, mais c'est vraiment pas important. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Form minimisé, normale, maximisée Dim 19 Déc 2010 - 2:23 | |
| Le bon endroit pour poser des questions concernant ces routines, c'est dans la rubrique "Le site de Klaus" sur la page d'accueil du forum, dans le fil de discussion "Nouvelle fonction pour "percer un trou" dans une form !" dont voici le lien: https://panoramic.1fr1.net/t931-nouvelle-fonction-pour-percer-un-trou-dans-une-formJe me suis penché un peu sur ton programme. Je me suis rendu compte très vite qu'il y a une erreur dans la documentation: P: res% = DLL_call6("WindowEllipticHole",handle(numero_form%),mode%,top%,left%,width%,height%) devrait être: P: res% = DLL_call6("WindowEllipticHole",handle(numero_form%),mode%,left%,top%,width%,height%) (inversion de top% et left%). Je corrigerai cela. Puis, j'ai vu qu'effectivement, seul se second "trou" est pris en compte ce qui n'est pas normal. Je vais explorer cela. Mais je posterai les réponses dans le fil de discussion référencé ci-dessus. EDIT 19/12/2010 à 03:21 Le problème est corrigé et la nouvelle version mise en ligne ! | |
| | | Invité Invité
| Sujet: Re: Form minimisé, normale, maximisée Dim 19 Déc 2010 - 10:16 | |
| Je répond à ta proposition principale de statue de form minimisé ou maximisé. Ta proposition est intéressante. On peut toutefois voir plusieurs choses. 1) défiir les dimensions de form normal. Ainsi: - Code:
-
width 0,100:height 0,500 lorsque l'on maximalise en cliquant sur la case, puis en maximisant, et en mode normal, la fenêtre reprend les dimensions précédentes. Là il n'y a rien à redire. Mais si on miniminise la forme 0, là onne peut rien faire! Apportons un timer: - Code:
-
width 0,100:height 0,500 label teste timer 1:on_timer 1,teste
end teste: if width(0)<10 then message "largeur:"+str$(width(0))+" hauteur:"+str$(height(0)):full_space 0 return Et bien dans ce cas le timer ne fonctionne pas, et cela justifie ta demande. Mais est-ce que vraiment çà apporterait une différence si on pouvait savoir si une fenêtre est minimisée? Jusqu'à présent chaque fenêtre d'un programme (Word Paint ...) qui est minimisée, je ne sais pas si un programme peut réveiller la fenêtre, et là tu as des connaissances que je n'ai pas. Si c'est le cas, ce serait intéressant. Maintenant un timer de plus, cela devient à force problèmatique. Si il faut un timer pour ceci, un timer pour savoir si le clic droit de la souris est cliquée, si un timer existe pour ceci et cela, on se retrouve avec un drôle de codage constament détourné, si l'interval est trop court. Là je pense qu'il faudrait aussi une commande du genre TIMER_BLOQUE, où tout les timer sont bloqués le temps que l'évènement d'un timer soit terminé. Et une autre commande TIMER_DEBLOQUE, où les timer qui étaient en action, en laissant de côté ceux qui étaient inactifs, soient de nouveau réactivés. Il est vrai qu'on peut accompanier chaque timer d'un flag pour connaitre son état. Conclusion, si c'est vraiment possible d'avoir un évènement qui intervient et permet de coder en conséquence, ce serait le bien venu. Curieux le Navigateur TheWord Browser que je teste ne montre pas de correction orthographique. Dommage! peut-être faut-il un plugins |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Form minimisé, normale, maximisée Dim 19 Déc 2010 - 11:30 | |
| J'ai essayé de rétablir la form minimisée, à l'aide d'un timer. Ca ne marche pas. Non pas parce que le timer ne marche pas: le timer marche bien, même si la form est minimisée. Les commandes width et height ne font pas réapparaître la form, ni la commande show. Il y a une mini-fenêtre qui s'affiche en bas à gauche, au-dessus de la barre de tâches, et on peut la rétablir avec les boutons de dimensionnement de cette fenêtre.
Mais pour provoquer cela par programme, ça ne suffit pas. Il faut pouvoir connaître et gérer l'état de la fenêtre par programme si on veut s'assurer qu'une fenêtre donnée est bien affichée à un instant t précis.
Il y a bien sûr la possibilité de faire border_small - il n'y a plus les boutons "minimiser" et "maximiser", seul la croix persiste. On peut aussi utiliser border_hide et on gère tout par programme. Mais dans ces cas, on perd la souplesse de laisser l'utilisateur placer et dimensionner ses fenêtres comme il le veut, et c'est dommage.
Bien sûr on peut faire sans (dans mon IDE écrit en Panoramic je fais cela), mais c'est très rigide et on perd en souplesse. A mon sens, les fonctions proposées sont bien dans l'esprit de Panoramic et je n'ai pas l'impression que la réalisation risque de bouleverser beaucoup de choses. | |
| | | Invité Invité
| Sujet: Re: Form minimisé, normale, maximisée Dim 19 Déc 2010 - 14:01 | |
| Toi qui es plein de ressources, il y a peut-être moyen de faire quelque chose. Regardes avec tes dll le code suivant, peut-être pourrais-tu pondre quelque chose d'intéressant. - Code:
-
dim i% ,g%:label fin ,grand width 0,50:height 0,50 : hide 0 form 20: width 20,415:height 20,160:border_hide 20 :top 20,200:color 20,167,171,130 form 10:hide 10: width 10,415:height 10,160:border_small 10 :top 10,200 command_target_is 10
button 3:top 3,010:left 3,381:width 3,18:height 3,20:caption 3,"r":font_name 3,"Marlett" :hint 3,"quitter" button 4:top 4,090:left 4,381:width 4,18:height 4,20:font_name 4,"Pointers":caption 4,"¤":hint 4,"suivant" button 5:top 5,065:left 5,381:width 5,18:height 5,20:font_name 5,"Pointers":caption 5,"@":hint 5,"précédent" button 6:top 6,035:left 6,381:width 6,18:height 6,20:font_name 6,"Marlett" :caption 6,"2" dll_on "C:\TESTE\KGF\KGF.dll" i% = DLL_call6( "WindowRectangleHole" , handle(10) , 1 , 377 , 4 , 28 , 25 ) i% = DLL_call6( "WindowRectangleHole" , handle(10) , 1 , 377 ,26, 5 , 121 ) i% = DLL_call6( "WindowRectangleHole" , handle(10) , 1 , 405 , 4, 5 , 144 ) i% = DLL_call6( "WindowRectangleHole" , handle(10) , 1 , 380 , 144,26 , 4 )
on_click 3,fin :on_click 6,grand :show 10 end grand: g%=-1-g% if g%=-1 then full_space 10:else : width 10,415:height 10,160 return fin: if message_warning_yes_no("on quitte vraiment?")=2 then return terminate
Dernière édition par cosmos70 le Dim 19 Déc 2010 - 18:06, édité 2 fois |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Form minimisé, normale, maximisée Dim 19 Déc 2010 - 15:20 | |
| C'est très intéressant. Cela permet de contourner le problème du on_close qui pour l'heure, ne permet pas d'empêcher la fermeture de la fenêtre. C'est sans rapport avec le sujet de mon post initial, mais je le garde comme moyen de remplacer le bouton de fermeture. Merci, Cosmos70 ! | |
| | | Invité Invité
| Sujet: Re: Form minimisé, normale, maximisée Dim 19 Déc 2010 - 18:05 | |
| Je ne suis pas complètement hors sujet. Je me demandais si cela te ferais penser qu' il serait possible d'adapter ta dll pour présenter une forme avec les boutons fermeture et maximiser/restaurer J'ai modifié le code plus haut pour présenter ce bouton. Là je remarque qu'il n'ai pas possible de passer en full_space d'une forme.
Je dis cela comme ça, c'est juste pour le filing, en réalité vu tes compétences, j'imaginais une forme trouée, avec comblage en dessous. A nous de placer les boutons. Je pense qu'en même en testant le code, vu qu'il faut désactiver les trous pour passer en pleine page, et rétablir avec les décalages pour de nouveau bloquer la fermeture, cela devient bien compliqué.
Donc j'ai rien dit. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Form minimisé, normale, maximisée Dim 19 Déc 2010 - 18:14 | |
| Et il en est de même si l'on change la taille de la form par la souris, en tirant les bordures. Pourquoi ? Parce que les coordonnées du trou rectangulaire sont spécifiée en pixels relativement au coin en haut à gauche de la form. Dès qu'on change la largeur de la form, la place des boutons "fermer", "minimiser" etc change, et le trou ne sera plus en face. Il faudrait alors être averti par un évènement ON_CHANGE (ou ON_RESIZE) pour reboucher le trou ancien et en percer un autre.
Non, sincèrement, je pense que les fonctionnalités que je suggère, permettent de résoudre cela élégamment, sans avoir à faire des "gymnastiques". | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Form minimisé, normale, maximisée Mar 21 Déc 2010 - 0:00 | |
| Bonsoir à tous ! Une petite remarque : lorsque l'on maximise une form, ses coordonnées X (LEFT) et Y (TOP) ont une valeur négative (la largeur des bordures je suppose) c'est déja une info... Si je fais un petit programme avec : FORM 0 et un FORM 1 par exemple : ce que je trouve dommage c'est que si on minimise le FORM 0, l'autre FORM est minimiser lui aussi. Si on planque le FORM 0 (hide 0) --> le form 1 reste affiché, par contre si par la suite on minimise le form 1, c'est foutu on ne peut plus le faire réapparaitre... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Form minimisé, normale, maximisée Mar 21 Déc 2010 - 0:14 | |
| Eh oui, ça fait partie des problèmes avec les form. Une form autre que form 0 n'apparaît pas dans la barre de tâches, et si la petite mini-fenêtre qui s'affiche en bas à gauche n'est plus visible, on ne peut plus rien faire, même manuellement. C'est pourquoi je suggérais une solution programmable, par un évènement, une variable système (ou, à la réflexion, une fonction FORM_SIZE(N) ) retournant une valeur indiquant dans quel état se trouve la form. Car même si top(N) et left(N) retournent une valeur négative, encore faut-il savoir à quel moment le tester, et ça ne détermine que l'état maximisé. On n'a rien pour l'état minimisé. Et c'est pire quand la fenêtre est redimensionné par la souris: à moins de dédier un timer et une routine on_timer à la surveillance d'une fenêtre, il n'y a pas moyen de gérer cela. Et avec des timer, ça devient vite lourd et source de conflit.
| |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Form minimisé, normale, maximisée Mar 21 Déc 2010 - 0:23 | |
| Oui en effet, ce qui serait bien ce serait de pouvoir "casser" le lien de parenté avec la form 0 Les timers tant que c'est pour redimensionner des objets dans une form ce n'est pas très compliqué (cela nécessite une certaine façon de définir ses objets) mais je reconnais qu'il faut faire un peu de gymnastique... Klaus : toujours frileux d'utiliser les timers ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Form minimisé, normale, maximisée Mar 21 Déc 2010 - 0:36 | |
| Non, pas du tout: je les utilise, comme le montre mon petit exemple posté récemment pour réaliser une form N (N<>0) "éternelle" - impossible à tuer par la croix: elle ressucite toujours, et avec le contenu de ses champs !
J'ai appliqué ce principe pour la fenêtre annexe de mon jeu de Belote (voir mon site): On ne peut pas la fermer non plus, et c'est avec un timer que je le fais.
Le problème avec les timer se précise dès qu'il y en a plusieurs. Les routines s'interrompent gaiement, et c'est la pagaille. Il faut désactiver judicieusement certains timers et les réactiver après - c'est pourquoi je parle de gymnastique. Et tout cela pour un truc qui pourrait être géré par un simple ON_CHANGE sur la form à surveiller, avec une fonction renseignant sur l'état actuel de la form. | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Form minimisé, normale, maximisée Mar 21 Déc 2010 - 0:45 | |
| Oups! désolé mais j'ai pas mal de lecture en retard... oui un ON_CHANGE sur une FORM serait cool et pouvoir écrire: FORM 1 PARENT 1,-1 : ' <-- ça serait vraiment le top ! Et peut être, pour plus tard, avoir un registre d'état/flags permettant de définir les propriétés d'un form ? | |
| | | Contenu sponsorisé
| Sujet: Re: Form minimisé, normale, maximisée | |
| |
| | | | Form minimisé, normale, maximisée | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |