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 |
|
|
| bouton roll-over | |
| | |
Auteur | Message |
---|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 28 Mar 2013 - 20:12 | |
| @ Klaus, Je confirme ce que j'ai écrit, pas de handle pour Picture, voilà le pourquoi... cela dit handle_canvas passe, passe t il aussi pour la fonction de la dll ? | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 28 Mar 2013 - 20:47 | |
| @ Klaus, Tu me dis : - Citation :
- Au lieu d'utiliser un timer, pourquoi n'utilises-tu pas la possibilité de détecter l'entrée du curseur dans un objet ainsi que sa sortie ?
Il me faut bien un évènement qui lance la fonction à interval régulier pour savoir si ma souris est dans ou hors l'objet. D'ailleurs, tu en utilises un dans ton fichier "mouse_over_Sub.bas" dans la fonction "mouse_over_scruter".... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: bouton roll-over Jeu 28 Mar 2013 - 23:17 | |
| Effectivement. J'avais oublié cela, aussi. Il est vrai aussi que pour un picture, on ne peut pas avoir de handle, et le handle_canvas n'est pas suffisant. Mais, pour tous les objets visuels pour lesquels on peut avoir un handle (donc sauf picture en alpha), le code suivant, très simple et intuitif, marche parfaitement. Les infos sont affichées dans la caption de la form 0, et ce sans timer: - Code:
-
' test_mouse_over_bis.bas
label mouse_enter_memo, mouse_exit_memo
dim dll$ : dll$ = "KGF.dll"
KGF_initialize(dll$)
memo 1 : top 1,10 : left 1,10 width 1,300 : height 1,300 edit 101 : hide 101 button 201 :hide 201 : on_click 201,mouse_enter_memo button 301 :hide 301 : on_click 301,mouse_exit_memo
ClickSetLink(handle(201),5) ClickSetLink(handle(301),6) ClickSetHook(handle(1),handle(101))
end
mouse_enter_memo: caption 0,"Entrée mémo "+time$ return
mouse_exit_memo: caption 0,"Sortie mémo "+time$ return
#INCLUDE "KGF_SUB.bas"
EDIT correction d'une petite erreur (sans incidence sur le déroulement du code présenté, mais plus correct si l'on veut aller plus loin.
Dernière édition par Klaus le Jeu 28 Mar 2013 - 23:44, édité 1 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 28 Mar 2013 - 23:35 | |
| On peut jouer aussi avec Mouse_x_left_down et Mouse_x_left_up en ajoutant une troisième ligne au tableau Tab$( x%,3) ligne qui contiendrait les chemins des icone_Clic$ et avoir une simulation complète d'un bouton : Tab$(1,1)=image neutre Tab$(1,2)=image survol Tab$(1,3)=image clique Le top serait que des images puissent être placé dans un buttton en définissant le type du button exemple Type%=0 (bouton alpha) ou Type%=1 (bouton icone) si type% n'est pas défini, le type est alpha par défaut . La super classe serait de pouvoir intégrer une icone dans un Sub_Menu... Bon, aller, je me tais, sinon je vais réveiller Cosmos 70.... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: bouton roll-over Ven 29 Mar 2013 - 9:57 | |
| J'ai fait une nouvelle version de KGF.dll: la version V2.08 du 29 Mars 2013. Cette version permet de gérer simultanément jusqu'à 200 évènements et/ou objets avec les fonctions de ClickIntercept. Il faut télécharger KGF.dll, KGF_SUB.bas et KGF.chm (la doc est à jour). Et voici une petite démo, avec un mémo et un list, dont le survol par la souris est géré très simplement, sans utilisation d'un timer: - Code:
-
' test_mouse_over_bis.bas
label mouse_enter_memo, mouse_exit_memo label mouse_enter_list, mouse_exit_list
dim dll$ : dll$ = "KGF.dll"
KGF_initialize(dll$)
memo 1 : top 1,10 : left 1,10 width 1,300 : height 1,300 item_add 1,"Déplacez le curseur" item_add 1,"à l'aide de la souris" list 2 : top 2,10 : left 2,350 width 2,200 : height 2,400 item_add 2,"Les objets vont" item_add 2,"changer d'aspect" edit 101 : top 101,330 : ' hide 101 button 201 :hide 201 : on_click 201,mouse_enter_memo button 301 :hide 301 : on_click 301,mouse_exit_memo
edit 102 : top 102,360 : ' hide 102 button 202 :hide 202 : on_click 202,mouse_enter_list button 302 :hide 302 : on_click 302,mouse_exit_list
ClickSetHook(1,101) ClickSetLink(201,5) ClickSetLink(301,6)
ClickSetHook(2,102) ClickSetLink(202,5) ClickSetLink(302,6)
end
mouse_enter_memo: color 1,255,230,230 font_color 1,0,0,255 caption 0,"Entrée mémo "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" return
mouse_exit_memo: color 1,255,255,255 font_color 1,0,0,0 caption 0,"Sortie mémo "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" return
mouse_enter_list: color 2,230,230,255 font_color 2,0,0,255 caption 0,"Entrée list "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" return
mouse_exit_list: color 2,255,255,255 font_color 2,0,0,0 caption 0,"Sortie list "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" return
#INCLUDE "KGF_SUB.bas"
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: bouton roll-over Ven 29 Mar 2013 - 11:04 | |
| Génial ça, tiens je vais m'en servir ce soir pour les menu de Barbarian Merci Klaus | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 29 Mar 2013 - 13:30 | |
| @ Klaus, Je crois que cela mérite quelques explications... J' avoue être un peu (beaucoup ) pommé et dans le flou le plus total... Bref ce que je crois avoir compris ClickSetHook demande à la dll de surveiller les évènements de l'objet et renvoi les coordonnées de l'entrée dans l'objet. A t on besoin vraiment besoin de les afficher ? ou plutôt de les retourner à Panoramic ? Puisque derrière, ClickSetLink déclenche la fonction lié à un bouton lui même lié à l'objet dont le handle est a eté récupéré par la dll | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: bouton roll-over Ven 29 Mar 2013 - 14:14 | |
| Il faut déclarer ces boutons et edit parce qu'ils servent à la gestion des évènements. Mais il n'ont certes pas besoin d'être visibles. Il suffit de faire un HIDE. Dans le programme de démo, je n'ai gardé les edit visibles que pour montrer la variation de leur contenu. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 29 Mar 2013 - 14:31 | |
| @ Klaus, j' ai passé un petit moment à réfléchir et tu pourras m'envoyer sur les roses si je te complique trop la vie. N' aurait il pas été plus lisible une fonction : res%=dll_call4("OnMouseOver", hnd_objet%, hnd_Button%,Obj%,On_mouse%) hnd% => l'objet à surveiller hnd% => le bouton fictif qui déclenche l'évènement Obj% => Numéro d'objet intercepté renvoyé par la dll On_mouse% => l' évènement intercepté renvoyé dans cette variable ainsi, en déclarant un objet on peut y associer la fonction dans un menu "select...case...end_select". Menu: clic%= Number_click Select clic% Case No_Button :On_Mouse_Over (Obj%,On_Mouse%) .... End_Select ReturnSub On_Mouse_Over(No%,N%) If No%= .... If N%=1 Then ........ If N%=2 Then ........ End_ifEnd_SubBon, c' est à ce moment que tu peux m'envoyer sur les roses... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: bouton roll-over Ven 29 Mar 2013 - 15:04 | |
| J'avais réfléchi un bon moment, lorsque j'ai conçu ces fonctions. Et j'ai retenu architecture actuelle, car je voulais pouvoir gérer, pour un seul objet Panoramic, plusieurs évènements. Mon code le montre: pour chacun des deux objets (mémo et list), deux évènements sont gérés: mouse_enter et mouse_leave. Mais on pourrait également ajouter le clic droit etc. Et c'est le même edit qui sert de base pour transmettre les coordonnées de l'évènement, mais on peut (sans que ce soit obligatoire) déclarer des boutons différents pour chacun de ces évènements afin d'avoir une identification facile de l'évènement. C'est ce que j'ai fait dans la démo: 4 boutons, chacun pour un des évènements.
Maintenant, on peut bien sûr concevoir la chose autrement. Une partie des fonctions est d'ailleurs déjà obsolète, car Jack a intégré le double clic (même si cela ne marche pas forcément mieux qu'avec ma fonction). Je gère aussi le clic droit, avec la même facilité que les autres évènements. Donc, pour le moment, je peux gérer, simultanément sur un même objet, les évènements 1 = clic gauche 2 = clic droit 3 = double-clic 4 = molette ( à réaliser ) 5 = entrée de la souris 6 = sortie de la souris et cela pour plusieurs objets, tant que le total des évènements ne dépasse pas 200. Ce qui laisse de la marge.
En fait, j'ai voulu faire une gestion modulaire: Pour chaque objet géré: 1. ClickSetHook intercepte les évènements de l'objet afin de les passer dans le filtre des évènements paramétrable en Panoramic 2. ClickSetLink ajoute un élément (un évènement) au filtre des évènements pour l'objet sélectionné par ClickSetHook 3. ClickClearHook enlève un élément (un évènement) du filtre des évènements, ou annule le filtre global pour un objet Et, en marge, on a la fonction ClickIt qui permet de simuler un évènement d'un des types possibles, sut un objet dont on specifie le handle.
Voilà, c'est le concept qui est derrière. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 29 Mar 2013 - 15:34 | |
| Je comprends bien ta démarche en arrière plan . Dans la "présentation" que je te proposais dans mon post précédent je parlais de lisibilité du côté utilisateur... Tu peux très bien garder tes deux ou trois (voir plus...) fonctions en arrière plan dans la dll mais l'appel et le retour des infos me paraissait plus clair à comprendre surtout pour les néophytes en programmation. On passe en paramètres : le numéro d'objet à surveiller le numéro du bouton fictif qui sert de relais/déclencheur (çà c'est pas encore trop dur à comprendre ) la variable de retour pour l'objet dans lequel se trouve la souris la variable de retour du type d'évènement en cours on évite un edit fantôme pour des données qui ne servent qu'à la dll et dans le menu on gère seulement les évènements que l'on veut. si on ne pas traîter un évènement il suffit de ne pas introduire le if qui correspondrait. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: bouton roll-over Ven 29 Mar 2013 - 17:18 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: bouton roll-over Ven 29 Mar 2013 - 17:58 | |
| Extension de mon programme de démo, à un groupe de 3 boutons. La nouvelle version de Panoramic offre déjà une réaction du bouton au survol: un changement de couleur. J'ai ajouté un changement de taille du bouton, sans modifier la réaction de base de Panoramic. J'ai gardé caché les EDIT nécessaires à cette action: - Code:
-
' test_mouse_over_bis.bas
label mouse_enter_memo, mouse_exit_memo label mouse_enter_list, mouse_exit_list label mouse_enter_B1, mouse_exit_B1 label mouse_enter_B2, mouse_exit_B2 label mouse_enter_B3, mouse_exit_B3
dim dll$ : dll$ = "KGF.dll" dim langage$ : langage$ = "FR" ' dim langage$ : langage$ = "EN"
KGF_initialize(dll$)
memo 1 : top 1,10 : left 1,10 width 1,300 : height 1,300 if langage$="FR item_add 1,"Déplacez le curseur" item_add 1,"à l'aide de la souris" else item_add 1,"Hoover the cursor" item_add 1,"over the objects" end_if list 2 : top 2,10 : left 2,350 width 2,200 : height 2,400 if langage$="FR item_add 2,"Les objets vont" item_add 2,"changer d'aspect" else item_add 2,"and they will" item_add 2,"change their aspect" end_if button 3 : top 3,360 : left 3,10 : width 3,30 : caption 3,"B1" button 4 : top 4,360 : left 4,40 : width 4,30 : caption 4,"B2" button 5 : top 5,360 : left 5,70 : width 5,30 : caption 5,"B3"
edit 101 : top 101,320 : width 101,60 : left 101,10 : ' hide 101 button 201 :hide 201 : on_click 201,mouse_enter_memo button 301 :hide 301 : on_click 301,mouse_exit_memo
edit 102 : top 102,320 : width 102,60 : left 102,80: ' hide 102 button 202 :hide 202 : on_click 202,mouse_enter_list button 302 :hide 302 : on_click 302,mouse_exit_list
edit 103 : hide 103 edit 104 : hide 104 edit 105 : hide 105 button 203 : on_click 203,mouse_enter_B1 : hide 203 button 303 : on_click 303,mouse_exit_B1 : hide 303 button 204 : on_click 204,mouse_enter_B2 : hide 204 button 304 : on_click 304,mouse_exit_B2 : hide 304 button 205 : on_click 205,mouse_enter_B3 : hide 205 button 305 : on_click 305,mouse_exit_B3 : hide 305
ClickSetHook(1,101) ClickSetLink(201,5) ClickSetLink(301,6)
ClickSetHook(2,102) ClickSetLink(202,5) ClickSetLink(302,6)
ClickSetHook(3,103) ClickSetLink(203,5) ClickSetLink(303,6)
ClickSetHook(4,104) ClickSetLink(204,5) ClickSetLink(304,6)
ClickSetHook(5,105) ClickSetLink(205,5) ClickSetLink(305,6)
end
mouse_enter_memo: color 1,255,230,230 font_color 1,0,0,255 if langage$="FR caption 0,"Entrée mémo "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" else caption 0,"Enter mémo "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" end_if return
mouse_exit_memo: color 1,255,255,255 font_color 1,0,0,0 if langage$="FR caption 0,"Sortie mémo "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" else caption 0,"Exit mémo "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" end_if return
mouse_enter_list: color 2,230,230,255 font_color 2,0,0,255 if langage$="FR caption 0,"Entrée list "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" else caption 0,"Enter list "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" end_if return
mouse_exit_list: color 2,255,255,255 font_color 2,0,0,0 if langage$="FR caption 0,"Sortie list "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" else caption 0,"Exit list "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" end_if return
mouse_enter_B1: top 3,top(3)-1 : left 3,left(3)-1 height 3,height(3)+2 : width 3,width(3)+2 return mouse_exit_B1: top 3,top(3)+1 : left 3,left(3)+1 height 3,height(3)-2 : width 3,width(3)-2 return
mouse_enter_B2: top 4,top(4)-1 : left 4,left(4)-1 height 4,height(4)+2 : width 4,width(4)+2 return
mouse_exit_B2: top 4,top(4)+1 : left 4,left(4)+1 height 4,height(4)-2 : width 4,width(4)-2 return
mouse_enter_B3: top 5,top(5)-1 : left 5,left(5)-1 height 5,height(5)+2 : width 5,width(5)+2 return
mouse_exit_B3: top 5,top(5)+1 : left 5,left(5)+1 height 5,height(5)-2 : width 5,width(5)-2 return
#INCLUDE "KGF_SUB.bas"
On peut voir la facilité de mise en oeuvre de telles fonctions ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 30 Mar 2013 - 19:50 | |
| @ Klaus, As tu réfléchis ?... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: bouton roll-over Sam 30 Mar 2013 - 20:59 | |
| Je peux te proposer ceci, avec une procédure supplémentaire dans le code Panoramic. - Code:
-
' test_mouse_over_bis.bas
label mouse_enter_memo, mouse_exit_memo label mouse_enter_list, mouse_exit_list label mouse_enter_B1, mouse_exit_B1 label mouse_enter_B2, mouse_exit_B2 label mouse_enter_B3, mouse_exit_B3
dim dll$ : dll$ = "KGF.dll" dim langage$ : langage$ = "FR" ' dim langage$ : langage$ = "EN"
KGF_initialize(dll$)
memo 1 : top 1,10 : left 1,10 width 1,300 : height 1,300 if langage$="FR item_add 1,"Déplacez le curseur" item_add 1,"à l'aide de la souris" else item_add 1,"Hoover the cursor" item_add 1,"over the objects" end_if list 2 : top 2,10 : left 2,350 width 2,200 : height 2,400 if langage$="FR item_add 2,"Les objets vont" item_add 2,"changer d'aspect" else item_add 2,"and they will" item_add 2,"change their aspect" end_if button 3 : top 3,360 : left 3,10 : width 3,30 : caption 3,"B1" button 4 : top 4,360 : left 4,40 : width 4,30 : caption 4,"B2" button 5 : top 5,360 : left 5,70 : width 5,30 : caption 5,"B3"
edit 101 : top 101,320 : width 101,60 : left 101,10 : ' hide 101 button 201 :hide 201 : on_click 201,mouse_enter_memo button 301 :hide 301 : on_click 301,mouse_exit_memo
edit 102 : top 102,320 : width 102,60 : left 102,80: ' hide 102 button 202 :hide 202 : on_click 202,mouse_enter_list button 302 :hide 302 : on_click 302,mouse_exit_list
edit 103 : hide 103 edit 104 : hide 104 edit 105 : hide 105 button 203 : on_click 203,mouse_enter_B1 : hide 203 button 303 : on_click 303,mouse_exit_B1 : hide 303 button 204 : on_click 204,mouse_enter_B2 : hide 204 button 304 : on_click 304,mouse_exit_B2 : hide 304 button 205 : on_click 205,mouse_enter_B3 : hide 205 button 305 : on_click 305,mouse_exit_B3 : hide 305
' ClickSetHook(1,101) ' ClickSetLink(201,5) ' ClickSetLink(301,6) DefineMouseOver(1,201,101,5) DefineMouseOver(1,301,101,6)
' ClickSetHook(2,102) ' ClickSetLink(202,5) ' ClickSetLink(302,6) DefineMouseOver(2,202,102,5) DefineMouseOver(2,302,102,6)
ClickSetHook(3,103) ClickSetLink(203,5) ClickSetLink(303,6)
ClickSetHook(4,104) ClickSetLink(204,5) ClickSetLink(304,6)
ClickSetHook(5,105) ClickSetLink(205,5) ClickSetLink(305,6)
end
mouse_enter_memo: color 1,255,230,230 font_color 1,0,0,255 if langage$="FR caption 0,"Entrée mémo "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" else caption 0,"Enter mémo "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" end_if return
mouse_exit_memo: color 1,255,255,255 font_color 1,0,0,0 if langage$="FR caption 0,"Sortie mémo "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" else caption 0,"Exit mémo "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" end_if return
mouse_enter_list: color 2,230,230,255 font_color 2,0,0,255 if langage$="FR caption 0,"Entrée list "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" else caption 0,"Enter list "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" end_if return
mouse_exit_list: color 2,255,255,255 font_color 2,0,0,0 if langage$="FR caption 0,"Sortie list "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" else caption 0,"Exit list "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")" end_if return
mouse_enter_B1: top 3,top(3)-1 : left 3,left(3)-1 height 3,height(3)+2 : width 3,width(3)+2 return mouse_exit_B1: top 3,top(3)+1 : left 3,left(3)+1 height 3,height(3)-2 : width 3,width(3)-2 return
mouse_enter_B2: top 4,top(4)-1 : left 4,left(4)-1 height 4,height(4)+2 : width 4,width(4)+2 return
mouse_exit_B2: top 4,top(4)+1 : left 4,left(4)+1 height 4,height(4)-2 : width 4,width(4)-2 return
mouse_enter_B3: top 5,top(5)-1 : left 5,left(5)-1 height 5,height(5)+2 : width 5,width(5)+2 return
mouse_exit_B3: top 5,top(5)+1 : left 5,left(5)+1 height 5,height(5)-2 : width 5,width(5)-2 return
' DefineMouseOver: ' P1 = le numéro d'objet à surveiller ' P2 = le numéro du bouton fictif qui sert de relais/déclencheur (çà c'est pas encore trop dur à comprendre Laughing ) ' P3 = la variable de retour pour l'objet dans lequel se trouve la souris ' P4 = la variable de retour du type d'évènement en cours sub DefineMouseOver(obj%,btn%,edt%,act%) ClickSetHook(obj%,edt%) ClickSetLink(btn%,act%) end_sub
#INCLUDE "KGF_SUB.bas"
Le mémo et la liste sont gérés selon cette méthode, les boutons sont restés en méthode classique. A toi de voir. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 30 Mar 2013 - 21:02 | |
| Je vais voir tout çà de près... | |
| | | Contenu sponsorisé
| Sujet: Re: bouton roll-over | |
| |
| | | | bouton roll-over | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |