Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: KGF_dll - nouvelles versions Mar 3 Mai 2022 - 19:21
Klaus, ça marche mais en partie seulement...
Quand le constructeur est ouvert et que je bascule vers l'éditeur -> Ok Quand l'éditeur est ouvert et que je bascule vers le constructeur -> Ok
Mais si j'ouvre un projet dans le constructeur et donc une FORM est ouverte avec les objet du projet :
Quand le constructeur est ouvert et que je bascule vers l'éditeur -> Ok Quand l'éditeur est ouvert et que je bascule vers le constructeur -> est bien le constructeur ne réapparait pas !
En résumé cela fonctionne si dans chaque programme on a que la FORM 0.
Mais on pourrait contourner le problème si tu mets en place une fonction avec ON_USER_EVENT qui se déclenche lors du changement d'état de la form 0. comme je le disais au-dessus. Comme cela on peu gérer les fenêtres annexes depuis le programme en question. Je sais pas si je suis très clair dans mes explications ?!
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: KGF_dll - nouvelles versions Mer 4 Mai 2022 - 0:48
J'ai ajouté une nouvelle fonction:
Code:
res% = dll_call1("GetCurrentWindowState",hnd%)
La fonction retourne: -1 si erreur (handle nonvalide) 0 si la fenêtre est en état normal 1 si la fenêtre est en état minimisé 2 si la fenêtre est en état maximisé
Recharge KGF.dll et essaie si tu peux résoudre ton problème ainsi.
Yannick aime ce message
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: KGF_dll - nouvelles versions Mer 4 Mai 2022 - 8:08
Je vais regarder ça Klaus. Merci.
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: KGF_dll - nouvelles versions Mer 4 Mai 2022 - 13:27
Bonjour Klaus
Malheureusement mon idée ne fonctionne pas. j'ai tenté différentes choses mais rien n'y fait ! Je reprendrai ce soir....
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: KGF_dll - nouvelles versions Mer 4 Mai 2022 - 13:45
J'ai modifié légèrement la fonction ForceWindowToForeground. Elle marche maintenant quelque soit l'état de la fenêtre visée. Et si le handle de la fenêtre n'est pas celui de Form 0 de l'application, l'application est quand-même activé, placée en avant-plan, la form visée est placée en avant-plan et reçoit le focus. Et ça marche même si la fenêtre visée est minimisée.
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: KGF_dll - nouvelles versions Mer 4 Mai 2022 - 14:03
D'accord Klaus. Je regarderai ce soir....
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: KGF_dll - nouvelles versions Mer 4 Mai 2022 - 16:06
Je ne peux pas tester pour le moment mais j'ai une question :
lorsque que l'application est réaffiché par la fonction dll, est ce qu'elle réaffiche tous les forms de l'application ou seulement le form 0 ?
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: KGF_dll - nouvelles versions Mer 4 Mai 2022 - 19:11
Bonsoir Klaus,
mauvaise nouvelle... Ca ne fonctionne pas ! A moins que je m'y prenne mal...
Voila le sous programme que j'ai mis et qui est appelé par le menu "basculer vers" :
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: KGF_dll - nouvelles versions Mer 4 Mai 2022 - 20:11
Eh oui, tu t(y prends mal
Excuse-moi, je n'ai pas pu résister.
Dans les deux codes, si le handls au début est zéro, qu'est-ce que tu fais ? Tu lance le programme (bien !) mais tu ne recherche PAS à nouveau le handle ! Donc, si au départ, le handle est zéro,, il le reste et la fonction ne peut rien faire.
D'ailleurs, as-tu vérifié que si le handle est non-nul, est-ce que c'est bien le handle de la form 0 du programme visé ?
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: KGF_dll - nouvelles versions Mer 4 Mai 2022 - 20:31
oui mais dans ce cas c'est juste le lancement du 2eme programme... et c'est le programme en cours qui est minimisé. et ensuite le 2eme programme retrouve le 1er. le handle est donc récupéré...
enfin je t'avoue que j'ai testé beaucoup de façons de faire et ce que tu indique je l'ai fait aussi. Mais ça ne marche pas !
La seule solution que j'ai trouvé pour le moment c'est de fermer le programme 1 quand on ouvre le programme 2 et relancer le programme 1 quand on quitte le programme 2.
Mais justement je voulais éviter de quitter les programmes et pouvoir si l'on voulait les avoir ensemble.
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 1:12
Alors, procède comme suit:
1. Lance ce programme:
Code:
caption 0,str$(handle(0)) edit 1 : text 1,caption$(0) end
Puis, place ceci dans l'éditeur, SANS le lancer:
Code:
' test_GetCurrentWindowState.bas
dim res%, hnd% hnd% = 7082924 dll_on "KGF.dll" res% = dll_call1("ForceWindowToForeground",hnd%) end
' ou tester ceci, uste pour voir le résultat de la fonction GetCurrentWindowState res% = dll_call1("GetCurrentWindowState",formhnd%) select res% case -1: message "erreur" case 0: message "état normal" case 1: message "état minimisé" case 2: message "état maximisé" end_select end
Maintenant, copie le contenu du EDIT du premier programme dans le source du second, dans la ligne "hnd%= ..." mais ne le lance pas encore !
Maintenant, minimise le premier programme, puis lance le second.Le premier apparaîtra alors en avant-plan.
Maintenant, tu peux arrêter le SECOND programme, maximiser le premier, pus relancer le second. Résultat correct !
Maintenant, arrête le SECOND programme, normalise le premier et place-le en arrière-plan, en appelant un programme quelconque devant (Firefox, Notepad, ... n 'importe quoi). Puis lance le second à nouveau et le premier réapparaîtra en avant-plan.
Evidemment, cela nemarche que si tu as la version actuelle de KGF.dll. Mais ça marche.
Si cela ne marche pas chez toi, avec certitude, tu n'as pas le bon handle, à supposer que tu aies la bonne version de KGF.dll. Affiche le handle en question dans les deucx programmes et vérifie bien que la valeur est identique.
Tu vois, quelques fois, de petits codes tout simples peuvent mettre une fonctionnalité en évidence.
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 8:55
Bonjour Klaus
Effectivement selon ton test cela fonctionne.
J'ai repris mon code et j'ai ajouté un control du handle. Celui est bon dans les 2 programmes. Le retour du handle par l'autre programme est correcte.
Petites précisions : 1)Je fais ces tests uniquement avec des versions EXEcutable et non les fichiers Bas. 2) Pour l'éditeur je dois activer KGF à chaque passage et la fermer en fin de sub car d'autres dll sont utilisées dans le programme. 3) Il me semble qu'il y a un comportement différent dans Windows lorsqu'on utilise le bouton MINIMISER en haut à droite et la fonction MINIMISER dans Panoramic.
Je me demande si tout cela n'a pas un lien ?!
Je pense que je vais en rester à ma première idée qui consiste à fermer le premier et ouvrir le second. Et si l'utilisateur souhaite mettre les 2 en même temps il lui suffira de ne pas utiliser cette fonction.
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 10:14
Bon, j'ai plusieurs remarques à faire:
1. j'ai sécuriséla fonction GetCurrentWindowState qui détecte maintenant correctement si le handle est nul ou celui d'un objet qui n'est pas une FORM. Comme cette fonction est utilisée également en interne par la fonction ForceWindowToForeground, les deux sont concernées par cette modification. Donc, recharge KGF.dll...
2. il y a effectivement un différence entre minimiser une fenêtre par le bouton dans la barre de titre ou par la commande minimize de Panoramic. Idem pour Maximize. Je ne sais pas encore à quoi ça tient et je vais traquer cela. En attendant, ça marche parfaitement pour le changement d'état provoqué par les boutons de la barre de titre. En ce qui concerne les commandes Panoramic, l'état du programme ciblé est bien reconnu correctement, mais le rappel ne se fait pas. Je vais donc me focaliser là-dessus.
3. Voici une version améliorée des programmes des test. Le programme BBB est celui dont l'état est à analyser, et le programme AAA est celui qui analyse et/ou rappelle le programme BBB.
AAA:
Code:
' test_GetCurrentWindowState.bas
label rappeler, tester dim res%, hnd%, titre$ titre$ = "BBB"
caption 0,"AAA" alpha 1 : top 1,10 : left 1,10 : caption 1,"Handle du programme BBB:" edit 2 : top 2,40 : left 2,10 : width 2,100 button 3 : top 3,70 : left 3,10 : caption 3,"Rappeler BBB" on_click 3,rappeler button 4 : top 4,70 : left 4,110 : caption 4,"Tester BBB" on_click 4,tester dll_on "KGF.dll" end
tester: hnd% = dll_call2("GetWindowByTitle",0,adr(titre$)) text 2,str$(hnd%) res% = dll_call1("GetCurrentWindowState",hnd%) select res% case -1: message "erreur" case 0: message "état normal" case 1: message "état minimisé" case 2: message "état maximisé" end_select return
BBB:
Code:
' test_GetCurrentWindowState_BBB.bas
label minimiser, maximiser
caption 0,BBB alpha 2 : top 2,10 : left 2,10 : caption 2,"Handle(0):" edit 1 : top 1,40 : left 1,10 : text 1,str$(handle(0))
button 3 : top 3,80 : left 3,10 : caption 3,"Minimiser" on_click 3,minimiser button 4 : top 4,80 : left 4,110 : caption 4,"Maximiser" on_click 4,maximiser
end
minimiser: minimize 0 return
maximiser: maximize 0 return
Ce sera un peu plus facile à tester...
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 10:36
Il y a de l'amélioration !
J'arrive maintenant à passer de l'un à l'autre mais il y a encore quelques blocages en fonction de la façon dont on minimise la fenêtre. Comme tu l'indiquais dans le précédent message...
J'ai fait les tests avec mes programmes Editeur et Constructeur, donc en 'situation réelle' et avec les fichiers EXEcutables.
En fait si la minimisation se fait par programmation le retour de la fenêtre ne se fait pas ! Par contre si l'on minimise avec le bouton au haut à gauche cela fonctionne...
Je pense que tu te rapproches du but...
PS : Et sinon peut on minimiser par une fonction KGF ?
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 11:03
Citation :
PS : Et sinon peut on minimiser par une fonction KGF ?
Oui ! Regarde la doc de la fonction ChangeWindowSize dans la section "Fonction de gestion des fenêtres":
code fonction à exécuter: 0 = maximiser la fenêtre 1 = placer la fenêtre en (gauche%,haut%) 2 = centrer la fenêtre à l'écran 3 = placer la fenêtre en (haut%,gauche%) et imposer les dimensions largeur% et hauteur% 4 = centrer la fenêtre à l'écran et imposer les dimensions largeur% et hauteur%
Tu peux donc jouer sur le code 3 pour déplacer une fenêtre hors de l'écran (avec gauche%=10000 par exemple) ou la rappeler (avec gauche%=0 ou n'importe quelle valeur utile...). Ainsi, tu évites l'écueil de la minimisation par Panoramic.
Si tu utilises cette option, utilise en fait les deux techniques conjointement: ForceWindowToForeground au cas où la fenêtre aurait été réduite par le bouton de la barre de titre, suivi de ChangeWindowSize code 3 pour imposer position et dimension. Dans ce cas, tu utilisera aussi ChangeWindowSize au lieu des commandes Panoramic MINIMIZE et MAXIMIZE.
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 12:42
Bon j'y suis depuis plus d'une heure et ça ne fonctionne toujours pas non plus...
Je passe l'affichage "hors écran" et lorsque je rappelle ChangeWindowSize par la fonction 3 il n'affiche rien ! j'ai ajouté ForceWindowToForeground et même ajouté des pauses 200ms pour assurer un délai.
Bref je vais revenir comme je disais à mon idée de départ qui fonctionne parfaitement. A moins que tu trouves une solution d'ici là...
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 14:25
Bon, j'aib modifié ChangeWindowSize de la manière suivante: en passant la valeur de -1 dans les deux derniers paramètres, la largeur et/ou la hauteur de la fenêtre n'est pas changée.
Donc, mes deux programmes de démo deviennent: AAA:
Lance BBB, minimiseèle par le bouton. Lance AAA, rappelle BBB par le bouton. ==> ça marche. idem pour le bouton de maximisation.
Et ça marche pour les boutons de la barre de titre...
Il faut recharger KGF.dll.
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 17:17
Non non ça ne marche pas chez moi si je teste avec l'éditeur et le constructeur !
J'attends que tu trouves la solution entre la fonction MINIMIZE et le bouton en haut de la FORM. C'est la solution la plus proche qui fonctionne la mieux...
Le reste c'est trop chaotique et a chaque fois je teste durant des heures pour trouver une solution...
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 17:40
Je ne sais pas ce que fait la commande MINIMIZE de Panoramic. Elle n'est pas équivalente à un clic sur le bouton "Minimiser" de la barre de titre et je ne sais pas comment réagir par rapport à ça.
As-tu seulement essayé d'utiliser la commanne "NORMAL N" de Panoramic . Elle devrait inverser l'effet de la commande MINIMIZE, en tout cas selon la doc...
Mais si tu remplacesla commande MINIMIZE comme je l'ai fait dans mon programme de démo, ça marche bien ! A condition de recharger KGF.dll.
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 19:18
Oui Klaus sur la papier ça marche bien... Mais dans l'environnement de mes 2 programmes ça ne fonctionne pas ou pas complétement. Et je ne veux pas intégrer quelque chose qui ne fonctionne qu'a moitié !
Peut être que Jack pourrai nous en dire (surtout pour toi) un peu plus sur la façon dont sont codés MINIMIZE, NORMAL et MAXIMIZE.
Pour le moment je reste sur mon idée de fermé le programme 1 et ouvrir le programme 2 et inversement. En attendant, cette façon de faire fonctionne et cela me permettra d'avancer sur la suite.
Merci pour ton aide Klaus.
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 21:07
Eh bien, il reste la façon ultime de forcer l'autgre programme à se restaurer lui-même: c'est un USER_EVENT !
Dans le programme qui est minimisé, tu fais un ON_USER_EVENT xxx. Et au label xxx, tu testes si c'est le bon USER_EVENT, at alors le programme fait un "NORMAL 0" et se restaure ainsi lui-même.
Je poste ce soir une version de KGF.dll qui te permettra d'envoyer un tel USER_EVENT, et le tout sera joué. Tu peux aller plus loin, avec ça: forcer le programme distant à se minimiser lui-même, à se saborder lui-même etc...
Ca viendra ce soir.
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 21:15
ah oui c'est un peu ce que je disais sur les précédents messages quand je parlais de USER_EVENT.
Mais comme tu n'avais pas relevé, je me suis dis que ce n'était peut être pas réalisable !
Prends ton temps Klaus. Demain je serai au boulot. J'aurai moins de temps et de possibilités...
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 22:43
Je viens de me rendre compte que la fonction existe déjà ! Le l'avais faite pour pouvoir tester, mais elle est utilisable.
Alors, on fait comme ceci:
Code:
dim wpar%, lpar% ... wpar% = hex("FF010000") ' FF000000 signifie "USER_EVENT envoyé par un programme Panoramic externe ' 00010000 signifie "exécuter la commande NORMAL 0" ' ... on peut en définir d'autres.. ' lpar% peut aussi servir à passer des informations (comme handle(0) du programme local qui peut alors répondre...) lpar% = 0 res% = dll_call2("SendUSerEvent",wpar%,lpar%)
et dans l'autre programme, tu fais:
Code:
label UserEvent dim wpar%, lpar% ... on_user_event UserEvent ... UserEvent: wpar% = user_event_wparam lpar% = user_event_lparam if bin_and(wpar%,hex("FF000000")=hex("FF000000") : ' est-ce un USER_EVENT envoyé part un programme Panoramic externe ? if bin_add(wpar%,"00FF0000)=hex("00010000") : ' est-ce la commande pour NORMAL ? nomal 0 end_if ... ici, traiter éventuellement d'autres codes action ... end_if
Il n'y a même pas besoin de recharger KGF.dll.
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 23:05
ok par contre j'ai déjà le designer qui est en place sur le constructeur et voila ce que ça me donne :
et donc comment intégrer sans faire d'erreur ?
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Mai 2022 - 23:13
Quelles sont les valeurs de MaskOrigin% et MaskOperation% ?