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 |
|
|
| problème position curseur sur l'ascenseur | |
| | |
Auteur | Message |
---|
Invité Invité
| Sujet: problème position curseur sur l'ascenseur Dim 4 Nov 2012 - 19:37 | |
| titre changé, mouse_y_position n'étant pas en causeVola le problème: Je mets quelques lignes pour situer l'aide: (Avec les sub de Klaus, le programme faisant plus de 4000 lignes, je fais un raccourcis. - Code:
-
x0% = left(115)+2 :set_focus 0 i% = dll_call2("MouseLeftClick",x0%, 5) :' donne la position actuelle en haut de l'écran sur l'objet 115 message "regarder sur 115" y115% = mouse_y_position(115) :message "aa" J'ai une forme qui s'agrandi au fur et à mesure, et qui fait plusieurs pages. Pour savoir où je me trouve dans la forme 0, j'ai un trait vertical (un picture que j'ai mis en rouge pour le repérer). Pour tester des déplacements de pages, il me faut un repère, et c'est ce trait qui prend entièrement la page qui me permet en cliquant dessus de savoir à quelle hauteur je me trouve, car mouse_y_position(115), 115 étant le picture trait, me donne l'emplacement exacte du clic. Mais voila, surprise, en voulant prendre cette information, le curseur de l'ascenseur de la forme, alors que dans mon teste, il faut 3 clics pour aller en bas de celle-ci, me remonte tout en haut la page. Voici les morceaux d'images: 1) J'ai mis le curseur en pas, et je suis en bas de la 3ème page (donc 3 clics) J'en suis dans le programme à message "regarder 115" 2) je répond au message, et j'obtiens ceci, on voit le curseur de la fenêtre en haut. La on voit le curseur en haut, alors qu'il faut déjà 3 clics pour y arriver, et que je n'ai pas encore fait un clic. Vérifié, revérifié, fait des tas de testes pour savoir où était le problème, alors que c'est l'instruction MOUSE_Y_POSITION() qui pose problème. La question est de savoir: quelqu'un a une idée pour savoir comment procéder?
Dernière édition par cosmos70 le Dim 14 Avr 2013 - 0:06, édité 2 fois |
| | | Invité Invité
| Sujet: Re: problème position curseur sur l'ascenseur Dim 4 Nov 2012 - 22:20 | |
| Ce n'est pas mouse_x_position qui pose problème, c'est le clic avec la dll. On ne le voit pas car le changement est dans la queue de file. En mettant un deuxième message juste après le premier, le curseur se retrouve ne haut. Le premier message est bloquant. C'est un défi de faire ce programme, mais c'est loin d'être facile. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: problème position curseur sur l'ascenseur Dim 4 Nov 2012 - 22:42 | |
| J'ai un doute sur l'utilisation de MouseLeftClick dans ces conditions.
Cette fonction s'adresse à la fenêtre active et travaille en coordonnées relatives de la fenêtre. Or, je ne suis pas certain que l'ascenseur de la fenêtre peut être atteint correctement de cette manière. Il faudrait que tu vérifies cela, mais sans perturber la gestion de la souris par des messages. Utilise plutôt des affichages dans un alpha sur la form, ou dans la caption de la form 0.
Mais tu as aussi AbsoluteMouseLeftClick. Cette fonction travaille en coordonnées absolues de l'écran et ne dépend nullement d'une form active. Dans ton cas, ce sera peut-être plus intéressant d'utiliser le mode absolu. Qu'en penses-tu ? Ce qui est certain, c'est que les deux routines font un positionnement préalable par MousePosition ou AbsoluteMousePosition avant de générer le clic gauche. Si le positionnement marche, le clic tombe forcément au bon endroit. | |
| | | Invité Invité
| Sujet: Re: problème position curseur sur l'ascenseur Dim 4 Nov 2012 - 23:15 | |
| Merci pour ta réponse, mais vois-tu, ce n'est pas MouseLeftClick qui clique sur l'ascenseur, c'est le clic sur un élement qui prend toute la hauteur du l'écran, je veux dire toutes les pages, qui provoque le scroll de la fenêtre tout en haut. Car c'est à partir de cet instant du clic sur un objet, que je détermine la position, pour savoir si je clique ou non sur l'ascenseur de la form, en haut ou en bas et pour des lignes ou des pages. Donc le déplacement est déjà fait avant que je clique sur l'ascenseur.
Je suis en train de faire un essaie en cliquant pixel par pixel verticalement pour que le clic me déclenche un évènement sur le premier objet qu'il rencontre, donc avec number_click, le point de départ du haut sauvegardé lors de la création de l'objet, car avec le scroll, la position est relative, mais j'ai encore ce problème de remonté en haut qui apparaît. je ne sais plus trop ce que je peux faire. C'est quand même bien dommage de ne pas arriver à résoudre ce problème, car le clic sur l'ascenseur en lui-même ne pose pas de problème. Ou alors je dois partir d'une autre idée, mais ce sera moins rapide si l'ancre est vers la fin. En connaissant la hauteur d'une page, je fais les clics en descendant jusqu'à atteindre le bon endroit, car là ayant le top sauvegardé de chaque objet, par déplacement de page, je dois me rapprocher de l'objet. C'est moins professionnel! |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: problème position curseur sur l'ascenseur Dim 4 Nov 2012 - 23:34 | |
| Dans certains cas, Windows repositionne effectivement l'affichage, sans que cela soit provoqué volontairement par l'utilisateur. Regarde ce code: - Code:
-
width 0,2200 : height 0,2200 memo 1 : left 1,10 : top 1,300 : width 1,2000 : color 1,200,255,255 memo 2 : left 2,300 : top 2,10 : height 2,2000 : color 2,255,255,200 end
Place l'ascenseur horizontal à droite, puis clique sur le mémo horizontaL. L'affichage est automatiquement ramené en position horizontale 10, soit le début du memo. Faits la même chose avec l'ascenseur vertical et le mémo vertical: même constat pour l'autre direction. C'est un comportement Windows que j'ai déjà souvent maudit. Mais tu n'y peux rien - c'est comme ça. | |
| | | Invité Invité
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 0:03 | |
| Oui. Je pense que je vais y arrivé. Ce qui est bizarre, c'est que si je clique sur ma barre témoin à la main, la fenêtre ne se déplace pas. Mais si je me sers de la dll pour cliquer, là la fenêtre remonte. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 0:10 | |
| Essaie ce que j'ai suggéré: passe par le AbsoluteMouseLeftClick. Comme ça, il n'y a pas de lien avec les coordonnées relatives de la fenêtre. Je ne garantis pas le résultat, mais ça vaut le coup d'essayer. | |
| | | Invité Invité
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 0:38 | |
| J'essayerai. Mais à force de mettre des commentaires pour bloquer des codes, ou de mettre des if 1=2 end_if un peu partout, cela devient le foutoir, et compréhensible. Des testes, des testes... Il va être temps que je remette de l'ordre. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 0:46 | |
| | |
| | | Invité Invité
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 1:18 | |
| Ca commence à marcher. Mais je crois pouvoir dire une chose indispensable: il faut rajouter des pauses pour un clic. J'espère pouvoir faire comme toi, un moment ou un autre (mais pas cette nuit), pouvoir pousser un euréka! |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 1:20 | |
| Je suis content de te voir progresse ! | |
| | | Invité Invité
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 1:36 | |
| Là j’atteins directement la bonne page. Demain je verrais pour les lignes. C'est un sacré progrès, car pour ce genre de programme, j'imagine mal de m'en servir et de chercher partout la bonne page. Si une fenêtre fait une centaine de pages, même plus, ça n'a pas de charme. Là j'ai procédé en mettant au départ la page en haut. Ensuite je divise la hauteur du top de l'objet par celui de l'écran, et je clique sur le bas de l'ascenseur pour un saut de page. Reste plus que les lignes à calculer. Bon |
| | | Invité Invité
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 10:01 | |
| Au poil ! (de chameau et non du ..) J'ai réussi. J'ai le droit aussi de m'exprimer lorsque je trouve quelque chose. La ligne choisi, est placée en haut de l'écran. titre changé, mouse_y_position n'étant pas en cause |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 10:37 | |
| YESSSSSSSS !!!!!!!!
Merci pour cette info ! Cela me rassure grandement !
| |
| | | Invité Invité
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 10:57 | |
| Merci. Mais j'ai une question. Sur mon ordi, il me faut pour une fenêtre, 100 clics pour la flèche de l'ascenseur, pour une page. Je ne sais pas si c'est en rapport avec la résolution et le type de Windows. Je ne sais pas si il y a un algorithme pour le nombre, ou si c'est standard. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 11:44 | |
| Si tu utilises un clic dans la barre de défilement au-dessus ou en-dessous du bouton mobile de la barre de défilement, la "quantité" défilée est déterminée par la notion de "taille de page" qui est déterminée par un calcul automatique, en fonction des dimensions réelles de la zone client de la fenêtre. Cette dimension pouvant changer, non seulement par les commandes WIDTH et HEIGHT, mais également en tirant les bords avec la souris, on ne peut pas donner de formule évidente pour déterminer le décalage. En plus, il y a un autre facteur qui entre en considération: c'est la notion de "ligne". Et la dimension d'une ligne change en fonction de la police utilisée pour l'objet, du type d'objet, etc.
La barre de défilement utilise la valeur de "taille de page" pour chaque déplacement provoqué par un clic dans la partie vide de la barre de défilement. Mais cette taille n'est pas recalculée à chaque déplacement. Elle est mémorisée et recalculée uniquement lorsque la configuration physique de l'objet (de la form) change. Et il y a un service API permettant de récupérer la taille de page. Si c'est important, je peux faire une fonction dans KGF.dll qui permet de récupérer cette taille, qui est d'ailleurs différente pour les deux barres horizontales et verticales. | |
| | | Invité Invité
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 12:56 | |
| Bien voila. Je ne sais pas si la police d'écran intervient, vu que j'ai différente polices dans mes objets, et que je ne clique non pas sur un memo, mais sur la fenêtre. Maintenant j'ai un calcul de 100 en hauteur, mais j'ai toute la hauteur, car en y pensant, j'ai mis la barre de tache sur le côté droit, vu qu'avec les écrans actuels, on est en "cinémascope". De plus j'ai mis un utilitaire qui me cache ou montre celle-ci sur un raccourcis clavier. J'ai bien compris que la dimension de l'écran est concernée par ce nombre. Je pense que ce serait une bonne chose que d'avoir la taille de la page. J'étais justement en train de me demander comment j'allais procéder. Donc d'accord. Ensuite je réfléchirai pour mettre un programme de démo pour ce service. Rentrer dans Pagiciel pour comprendre n'est pas évident pour le premier venu, même si j'ai mis pas mal de commentaire. Si on veut voir, j'ai mis à jour dans le WebDaw, dans le dossier Pagiciel, le zip. Mais pour avoir la bonne ligne, il faut modifier le nombre de ligne qui est 100, par celui que vous trouvez à la ligne 2678: - Citation :
- for a%=1 to top(nombre_memo%+b%)-15 step hauteur%/100
i% = dll_call2("MouseLeftClick",xx%, y0%) next a% Dans le menu, il y a le sous menu: atteindre, le 1er n'est pas branché. Le programme ce n'est que du remplissage pour mettre au point. C'est juste pour des testes. Tant que je n'aurai pas inclus les images, je ne reprend pas la démo, d'autant que ce sera qu'avec Pagiciel. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 13:00 | |
| Finalement, ce n'était pas compliqué. J'ai fait la fonction GetScrollBarInfo, et du coup, KGF.dll passe à la version V1.82: 1.82 05/11/2012 ajout fonction GetScrollBarInfo
La doc est mise à jour, et KGF_SUB.bas et demo_KGF_SUB.bas également. avant de l'utiliser, fais marcher demo_KGF_SUB.bas, la dernière fonction (numéro 192à, et regarde le résultat. Tu as ainsi toutes les informations voulues, séparément pour la barre horizontale et verticale: - valeurs mini et maxi - position actuelle - taille de la page
| |
| | | Invité Invité
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 14:02 | |
| Je te remercie. Je verrais cela ce soir, car là je vais partir. |
| | | Invité Invité
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 19:55 | |
| J'essaye de faire marcher la dernière fonction, et j'obtiens toujours une erreur. J'ai fais un raccourcis pour comprendre, mais il y a erreur: - Code:
-
dim kgf_dir%,res% dll_on "C:\PANO\DLL\KGF.dll"
memo 10 : top 10,10 : left 10,200 width 10,400 : height 10,800 GetScrollBarInfo(handle(0),"V") item_add 10,"Verticalement:" item_add 10," mini="+str$(GetScrollBarInfoMini%) item_add 10," maxi="+str$(GetScrollBarInfoMaxi%) item_add 10," posi="+str$(GetScrollBarInfoPosi%) item_add 10," page="+str$(GetScrollBarInfoPage%) GetScrollBarInfo(handle(0),"H") item_add 10,"Horizontalement:" item_add 10," mini="+str$(GetScrollBarInfoMini%) item_add 10," maxi="+str$(GetScrollBarInfoMaxi%) item_add 10," posi="+str$(GetScrollBarInfoPosi%) item_add 10," page="+str$(GetScrollBarInfoPage%) message "Taper Return pour continuer" delete 10
dll_off end
' ==== res% = dll_call6("GetScrollBarInfo",hnd%,dir%,mini%,maxi%,posi%,page%) sub GetScrollBarInfo(hnd%,dir$) ' ligne 26 if variable("GetScrollBarInfoMini%")=0 then dim GetScrollBarInfoMini% if variable("GetScrollBarInfoMaxi%")=0 then dim GetScrollBarInfoMaxi% if variable("GetScrollBarInfoPosi%")=0 then dim GetScrollBarInfoPosi% if variable("GetScrollBarInfoPage%")=0 then dim GetScrollBarInfoPage% dim_local KGF_dir% dim_local KGF_d$ : KGF_d$ = upper$(dir$) KGF_dir% = instr("VH",KGF_d$) ' ligne 34 res% = dll_call6("GetScrollBarInfo",hnd%,KGF_dir%,adr(GetScrollBarInfoMini%),adr(GetScrollBarInfoMaxi%),adr(GetScrollBarInfoPosi%),adr(GetSrollBarInfoPage%)) end_sub |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 21:05 | |
| Ca marchera mieux comme ça: - Code:
-
dim kgf_dir%,res% dll_on "KGF.dll"
memo 10 : top 10,10 : left 10,200 width 10,400 : height 10,800 GetScrollBarInfo(handle(0),"V") item_add 10,"Verticalement:" item_add 10," mini="+str$(GetScrollBarInfoMini%) item_add 10," maxi="+str$(GetScrollBarInfoMaxi%) item_add 10," posi="+str$(GetScrollBarInfoPosi%) item_add 10," page="+str$(GetScrollBarInfoPage%) GetScrollBarInfo(handle(0),"H") item_add 10,"Horizontalement:" item_add 10," mini="+str$(GetScrollBarInfoMini%) item_add 10," maxi="+str$(GetScrollBarInfoMaxi%) item_add 10," posi="+str$(GetScrollBarInfoPosi%) item_add 10," page="+str$(GetScrollBarInfoPage%) message "Taper Return pour continuer" delete 10
dll_off end
' ==== res% = dll_call6("GetScrollBarInfo",hnd%,dir%,mini%,maxi%,posi%,page%) sub GetScrollBarInfo(hnd%,dir$) ' ligne 26 if variable("GetScrollBarInfoMini%")=0 then dim GetScrollBarInfoMini% if variable("GetScrollBarInfoMaxi%")=0 then dim GetScrollBarInfoMaxi% if variable("GetScrollBarInfoPosi%")=0 then dim GetScrollBarInfoPosi% if variable("GetScrollBarInfoPage%")=0 then dim GetScrollBarInfoPage% dim_local KGF_dir% dim_local KGF_d$ : KGF_d$ = upper$(dir$) KGF_dir% = instr("VH",KGF_d$) ' ligne 34 ' res% = dll_call6("GetScrollBarInfo",hnd%,KGF_dir%,adr(GetScrollBarInfoMini%),adr(GetScrollBarInfoMaxi%),adr(GetScrollBarInfoPosi%),adr(GetSrollBarInfoPage%)) res% = dll_call6("GetScrollBarInfo",hnd%,KGF_dir%,adr(GetScrollBarInfoMini%),adr(GetScrollBarInfoMaxi%),adr(GetScrollBarInfoPosi%),adr(GetScrollBarInfoPage%)) end_sub A la ligne 35, dans le dernier paramètre, un "c" avait mystérieusement disparu... | |
| | | Invité Invité
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 22:17 | |
| Ça y est, ce programme marche, mais pas au début. Je ne comprend pas, j'avais téléchargé aujourd'hui, mais c'étais pas la bonne version. J'ai re-extrait depuis ce même zip, et j'ai la bonne version. Peut-être que KGF était actif, et qu'il n'a pas été recouvert. Maintenant je vais voir avec mon programme. |
| | | Invité Invité
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 22:46 | |
| Voila une information qui est intéressante. Plus d'une fois on a demandé de connaitre la position d'un curseur, et là on là! Ah oui, mais ça ne marche pas pour un memo, seulement pour la forme. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 23:17 | |
| Ca marche aussi pour un mémo. Regarde cette variante: - Code:
-
dim kgf_dir%,res% dll_on "KGF.dll"
memo 10 : top 10,10 : left 10,200 width 10,400 : height 10,800 bar_both 10 for res%=1 to 200 item_add 10,str$(res%) next res% GetScrollBarInfo(handle(0),"V") item_add 10,"Verticalement form 0:" item_add 10," mini="+str$(GetScrollBarInfoMini%) item_add 10," maxi="+str$(GetScrollBarInfoMaxi%) item_add 10," posi="+str$(GetScrollBarInfoPosi%) item_add 10," page="+str$(GetScrollBarInfoPage%) GetScrollBarInfo(handle(0),"H") item_add 10,"Horizontalement form 0:" item_add 10," mini="+str$(GetScrollBarInfoMini%) item_add 10," maxi="+str$(GetScrollBarInfoMaxi%) item_add 10," posi="+str$(GetScrollBarInfoPosi%) item_add 10," page="+str$(GetScrollBarInfoPage%) GetScrollBarInfo(handle(10),"V") item_add 10,"Verticalement memo 10:" item_add 10," mini="+str$(GetScrollBarInfoMini%) item_add 10," maxi="+str$(GetScrollBarInfoMaxi%) item_add 10," posi="+str$(GetScrollBarInfoPosi%) item_add 10," page="+str$(GetScrollBarInfoPage%) GetScrollBarInfo(handle(10),"H") item_add 10,"Horizontalement memo 10:" item_add 10," mini="+str$(GetScrollBarInfoMini%) item_add 10," maxi="+str$(GetScrollBarInfoMaxi%) item_add 10," posi="+str$(GetScrollBarInfoPosi%) item_add 10," page="+str$(GetScrollBarInfoPage%) ' delete 10
dll_off end
' ==== res% = dll_call6("GetScrollBarInfo",hnd%,dir%,mini%,maxi%,posi%,page%) sub GetScrollBarInfo(hnd%,dir$) ' ligne 26 if variable("GetScrollBarInfoMini%")=0 then dim GetScrollBarInfoMini% if variable("GetScrollBarInfoMaxi%")=0 then dim GetScrollBarInfoMaxi% if variable("GetScrollBarInfoPosi%")=0 then dim GetScrollBarInfoPosi% if variable("GetScrollBarInfoPage%")=0 then dim GetScrollBarInfoPage% dim_local KGF_dir% dim_local KGF_d$ : KGF_d$ = upper$(dir$) KGF_dir% = instr("VH",KGF_d$) ' ligne 34 res% = dll_call6("GetScrollBarInfo",hnd%,KGF_dir%,adr(GetScrollBarInfoMini%),adr(GetScrollBarInfoMaxi%),adr(GetScrollBarInfoPosi%),adr(GetScrollBarInfoPage%)) end_sub Je crois que tu sera surpris... | |
| | | Invité Invité
| Sujet: Re: problème position curseur sur l'ascenseur Lun 5 Nov 2012 - 23:38 | |
| J'ai pris ton programme, et je l'ai mis dans une page de Pagiciel, vu que je peux lancer les programmes avec. Mais maintenant, au boulot, je reprend mon programme. Je regarderai une autre fois. Dans ce cas, il y en a plus d'un qui devrait tester, car cela a été demandé plus d'une fois. |
| | | Contenu sponsorisé
| Sujet: Re: problème position curseur sur l'ascenseur | |
| |
| | | | problème position curseur sur l'ascenseur | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |