Avril 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 |
|
| | Position de la souris sur un objet à travers d'autres objets | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Position de la souris sur un objet à travers d'autres objets Mer 12 Juil 2017 - 22:42 | |
| Les fonctions MOUSE_X_POSIITON(N) et MOUSE_Y_POSIITON(N) retournent la position de la souris, relative à l'objet N. Ca marche très bien. Mais il y a un problème: si l'objet N est une form, un panel, un container etc, et si cet objet en contient d'autres (ce qui est en général le cas), cette fonction ne tient pas compte du déplacement de la souris tant que le curseur est dans un de ces objets, et ne réagit à nouveau que lorsque la souris survole le fond de l'objet N. Ca peut être voulu, mais dans certains cas, on peut vouloir avoir les coordonnées du curseur, même si l'objet se trouve sur un des autres objets contenus dans la form, le container etc. La fonction GetMousePosition de KGF.dll fait ce travail. Dans le petit code ci-dessous, une combo en haut à gauche permet de choisir le mode de détection "Panoramic" ou "KGF.dll", à tout moment. Puis,on peut observer le résultat dans la barre de titre du programme: - Code:
-
' SurveillerLaSouris.bas
label tick
dim x%, y%, res%
dll_on "KGF.dll"
combo 10 : width 10,150 item_add 10,"Survol avec Panoramic" item_add 10,"Survol avec KGF.dll" item_select 10,1
memo 1 : top 1,30 : left 1,100 alpha 2 : top 2,150 : left 2,10 : caption 2,"Alpha 2"
timer 99 : timer_interval 99,100 : on_timer 99,tick
end
tick: if item_index(10)=1 x% = mouse_x_position(0) y% = mouse_y_position(0) else res% = dll_call3("GetMousePosition",handle(0),adr(x%),adr(y%)) end_if caption 0,str$(x%)+","+str$(y%) return | |
| | | papydall
Nombre de messages : 6996 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Position de la souris sur un objet à travers d'autres objets Jeu 13 Juil 2017 - 3:26 | |
| | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Position de la souris sur un objet à travers d'autres objets Jeu 13 Juil 2017 - 14:42 | |
| Avec la nouvelle version de KGF.dll (publiée il y a quelques minutes), le code devient plus simple, et on obtient, en-dehors du numéro Panoramic de l'objet survolé, également son type (en notation Delphi). Voici e code, avec un Picture à survoler en plus: - Code:
-
' SurveillerLaSouris.bas
label tick
dim x%, y%, res%,Numero% dim txt$ : txt$ = string$(100," ")
dll_on "KGF.dll"
combo 10 : width 10,150 item_add 10,"Survol avec Panoramic" item_add 10,"Survol avec KGF.dll" item_select 10,2
memo 1 : top 1,30 : left 1,100 alpha 2 : top 2,150 : left 2,10 : caption 2,"Alpha 2" picture 3 : top 3,150 : left 3,200
res% = dll_call2("DeclarePanoramicObject",object_internal(10),10) res% = dll_call2("DeclarePanoramicObject",object_internal(1),1) res% = dll_call2("DeclarePanoramicObject",object_internal(2),2) res% = dll_call2("DeclarePanoramicObject",object_internal(3),3) res% = dll_call2("DeclarePanoramicObject",0,0)
timer 99 : timer_interval 99,100 : on_timer 99,tick
end
tick: if item_index(10)=1 x% = mouse_x_position(0) y% = mouse_y_position(0) else res% = dll_call3("GetMousePosition",handle(0),adr(x%),adr(y%)) end_if ' Numero% = dll_call2("FindPanoramicObject",x%,y%) ' caption 0,str$(x%)+","+str$(y%)+" objet "+str$(Numero%) Numero% = dll_call3("FindPanoramicObject",x%,y%,adr(txt$)) caption 0,str$(x%)+","+str$(y%)+" objet "+str$(Numero%)+" = "+trim$(txt$) return
| |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Position de la souris sur un objet à travers d'autres objets Jeu 13 Juil 2017 - 21:24 | |
| Et voici une version finale (recharger KGF.dll...) avec des containers, panels...: - Code:
-
' SurveillerLaSouris.bas
label tick
dim x%, y%, res%,Numero% dim txt$ : txt$ = string$(100," ")
dll_on "KGF.dll"
combo 10 : width 10,150 item_add 10,"Survol avec Panoramic" item_add 10,"Survol avec KGF.dll" item_select 10,2
memo 1 : top 1,30 : left 1,100 alpha 2 : top 2,150 : left 2,10 : caption 2,"Alpha 2" picture 3 : top 3,150 : left 3,200
container 20 : top 20,100 : left 20,350 : width 20,200 : height 20,300 caption 20,"Un container" button 21 : parent 21,20 : top 21,20 : left 21,40 panel 30 : parent 30,20 : top 30,50 : left 30,20 : width 30,150 : height 30,200
check 31 : parent 31,30 : caption 31,"Check 31" : top 31,20 : left 31,10 check 32 : parent 32,30 : caption 32,"Check 32" : top 32,50 : left 32,10
res% = dll_call2("DeclarePanoramicObject",object_internal(10),10) res% = dll_call2("DeclarePanoramicObject",object_internal(1),1) res% = dll_call2("DeclarePanoramicObject",object_internal(2),2) res% = dll_call2("DeclarePanoramicObject",object_internal(3),3)
res% = dll_call2("DeclarePanoramicObject",object_internal(31),31) res% = dll_call2("DeclarePanoramicObject",object_internal(32),32) res% = dll_call2("DeclarePanoramicObject",object_internal(30),30)
res% = dll_call2("DeclarePanoramicObject",object_internal(21),21) res% = dll_call2("DeclarePanoramicObject",object_internal(20),20)
res% = dll_call2("DeclarePanoramicObject",0,0)
timer 99 : timer_interval 99,100 : on_timer 99,tick
end
tick: if item_index(10)=1 x% = mouse_x_position(0) y% = mouse_y_position(0) else res% = dll_call3("GetMousePosition",handle(0),adr(x%),adr(y%)) end_if ' Numero% = dll_call2("FindPanoramicObject",x%,y%) ' caption 0,str$(x%)+","+str$(y%)+" objet "+str$(Numero%) Numero% = dll_call3("FindPanoramicObject",x%,y%,adr(txt$)) caption 0,str$(x%)+","+str$(y%)+" objet "+str$(Numero%)+" = "+trim$(txt$) return
Promenez le curseur sur la fenêtre et survolez les objets - la barre de titre va indiquer en permanence, non seulement les coordonnées, mais également le numéro de l'objet survolé et ton type ! | |
| | | Yannick
Nombre de messages : 8610 Age : 52 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 14 Juil 2017 - 20:16 | |
| | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Position de la souris sur un objet à travers d'autres objets Ven 14 Juil 2017 - 20:53 | |
| Eh bien, télécharge la bonne version de KGF.dll... | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Position de la souris sur un objet à travers d'autres objets Ven 14 Juil 2017 - 20:55 | |
| Suite à l'information de Papydall, j'ai pu modifier mo programme de démo en gérant la form 0 comme n'importe quel autre objet: - Code:
-
' SurveillerLaSouris.bas
label tick
dim x%, y%, res%,Numero% dim txt$ : txt$ = string$(100," ")
dll_on "KGF.dll"
combo 10 : width 10,150 item_add 10,"Survol avec Panoramic" item_add 10,"Survol avec KGF.dll" item_select 10,2
memo 1 : top 1,30 : left 1,100 alpha 2 : top 2,150 : left 2,10 : caption 2,"Alpha 2" picture 3 : top 3,150 : left 3,200
container 20 : top 20,100 : left 20,350 : width 20,200 : height 20,300 caption 20,"Un container" button 21 : parent 21,20 : top 21,20 : left 21,40 panel 30 : parent 30,20 : top 30,50 : left 30,20 : width 30,150 : height 30,200
check 31 : parent 31,30 : caption 31,"Check 31" : top 31,20 : left 31,10 check 32 : parent 32,30 : caption 32,"Check 32" : top 32,50 : left 32,10
res% = dll_call2("DeclarePanoramicObject",object_internal(10),10) res% = dll_call2("DeclarePanoramicObject",object_internal(1),1) res% = dll_call2("DeclarePanoramicObject",object_internal(2),2) res% = dll_call2("DeclarePanoramicObject",object_internal(3),3)
res% = dll_call2("DeclarePanoramicObject",object_internal(31),31) res% = dll_call2("DeclarePanoramicObject",object_internal(32),32) res% = dll_call2("DeclarePanoramicObject",object_internal(30),30)
res% = dll_call2("DeclarePanoramicObject",object_internal(21),21) res% = dll_call2("DeclarePanoramicObject",object_internal(20),20)
res% = dll_call2("DeclarePanoramicObject",object_internal(0),0)
timer 99 : timer_interval 99,100 : on_timer 99,tick
end
tick: if item_index(10)=1 x% = mouse_x_position(0) y% = mouse_y_position(0) else res% = dll_call3("GetMousePosition",handle(0),adr(x%),adr(y%)) end_if ' Numero% = dll_call2("FindPanoramicObject",x%,y%) ' caption 0,str$(x%)+","+str$(y%)+" objet "+str$(Numero%) Numero% = dll_call3("FindPanoramicObject",x%,y%,adr(txt$)) caption 0,str$(x%)+","+str$(y%)+" objet "+str$(Numero%)+" = "+trim$(txt$) return
| |
| | | Fredisland
Nombre de messages : 261 Date d'inscription : 30/03/2018
| Sujet: Re: Position de la souris sur un objet à travers d'autres objets Ven 27 Avr 2018 - 19:41 | |
| Je fais remonter le post. Je suis aussi pour une fonction qui permettrait de connaître la position de la souris sur le FORM en cours, indépendamment des objets affichés. | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Position de la souris sur un objet à travers d'autres objets Ven 27 Avr 2018 - 20:54 | |
| Ca, je peux te le faire aisément par une fonction dans KGF.dll si cela t'intéresse... il suffira de fournir le handle de la form (ou de tout autre objet par rapport auquel tu voudrais avoir les coordonnées...) et je peux te fournir les coordonnées de la souris, relativement à cet objet. En attendant, tu peux déjà le faire en Panoramic, en utilisant une fonction déjà existante dans KGF.dll: la fonction - Code:
-
res% = dll_call2("GetAbsoluteMousePosition",adr(x%),adr(y%)) retourne les coordonnées "écran" du curseur. Il suffit d'en soustraire les valeurs de LEFT(0) et TOP(0), ainsi que les valeurs de la largeur de bordure pour la position horizontale et de la hauteur de la barre de titre pour la position verticale, et tu as la position que tu cherches. Tout cela, c'est de l'arithmérique très siimple, et je peux le faire facilement dans KGF.dll. Au cas où tu chercherais à connaître la largeur de bordure et la hauteur de la barre de titre, sache que c'est simple: puisque chaque fenêtre est entourée de 3 bordures identiques (gauche, bas et droite) et d'une bordure plus épaisse (haut), tu as les équations suivantes: - Code:
-
LeftBottomRightBorder% = (width(0)-width_client(0))/2 TopBorder% = height(0)-height_client(0)-LeftBottomRightBorder% Ainsi, tu obtiens: - Code:
-
LocalCursorX% = AbsoluteCursorX - left(0) - LeftBottomRightBorder% LocalCursorY% = AbsoluteCursorY% - top(0) - TopBorder% | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Position de la souris sur un objet à travers d'autres objets Ven 27 Avr 2018 - 22:03 | |
| En fait, en relisant ma doc, je me suis rendu compte que cette fonction existe déjà: - Code:
-
res% = dll_call3("GetMousePosition",hnd%,adr(x%),adr(y%)) Elle retourne la position relative du curseur par rapport à l'objet désigné par son handle, même si en réalité, le curseur se trouve dans un autre objet, enfant de celui désigné par la handle (mémo dans une form, etc.) Donc, inutile de se précipiter - ça existe dans KGF.dll. | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Position de la souris sur un objet à travers d'autres objets Ven 27 Avr 2018 - 22:36 | |
| Regarde ce que l'on peut faire, actuellement, avec KGF.dll: - Code:
-
label tick dim res%, x0%, y0%, x1%, y1%, x2%, y2%
top 0,200 : left 0,100 panel 1 : top 1,40 : left 1,30 : width 1,400 : height 1,300 memo 2 : parent 2,1 : top 2,30 : left 2,20
alpha 3 : top 3,400 : left 3,10
dll_on "KGF.dll" timer 10 : timer_interval 10,100 : on_timer 10,tick
end
tick: timer_off 10 res% = dll_call3("GetMousePosition",handle(0),adr(x0%),adr(y0%)) res% = dll_call3("GetMousePosition",handle(1),adr(x1%),adr(y1%)) res% = dll_call3("GetMousePosition",handle(2),adr(x2%),adr(y2%)) caption 3,"Sur Form 0: "+str$(x0%)+","+str$(y0%)+" sur Panel 1: "+str$(x1%)+","+str$(y1%)+" sur Memo 2: "+str$(x2%)+","+str$(y2%)
timer_on 10 return | |
| | | Fredisland
Nombre de messages : 261 Date d'inscription : 30/03/2018
| Sujet: Re: Position de la souris sur un objet à travers d'autres objets Ven 27 Avr 2018 - 22:50 | |
| Merci beaucoup Klaus pour toutes ces infos très précieuses et ton ton travail de programmation ... | |
| | | Contenu sponsorisé
| Sujet: Re: Position de la souris sur un objet à travers d'autres objets | |
| |
| | | | Position de la souris sur un objet à travers d'autres objets | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |