FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» PANORAMIC V 1
Objets réagissant au survol de la souris, sans clic ! Emptypar Klaus Aujourd'hui à 15:32

» Gestion d'un système client-serveur.
Objets réagissant au survol de la souris, sans clic ! Emptypar Klaus Aujourd'hui à 13:18

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Objets réagissant au survol de la souris, sans clic ! Emptypar Froggy One Aujourd'hui à 11:16

» @Jack
Objets réagissant au survol de la souris, sans clic ! Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
Objets réagissant au survol de la souris, sans clic ! Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
Objets réagissant au survol de la souris, sans clic ! Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Objets réagissant au survol de la souris, sans clic ! Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Objets réagissant au survol de la souris, sans clic ! Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Objets réagissant au survol de la souris, sans clic ! Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Objets réagissant au survol de la souris, sans clic ! Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
Objets réagissant au survol de la souris, sans clic ! Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Objets réagissant au survol de la souris, sans clic ! Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Objets réagissant au survol de la souris, sans clic ! Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Objets réagissant au survol de la souris, sans clic ! Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Objets réagissant au survol de la souris, sans clic ! Emptypar leclode Mer 17 Avr 2024 - 11:07

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le deal à ne pas rater :
Cdiscount : -30€ dès 300€ d’achat sur une sélection Apple
Voir le deal

 

 Objets réagissant au survol de la souris, sans clic !

Aller en bas 
2 participants
AuteurMessage
Klaus

Klaus


Nombre de messages : 12280
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Objets réagissant au survol de la souris, sans clic ! Empty
MessageSujet: Objets réagissant au survol de la souris, sans clic !   Objets réagissant au survol de la souris, sans clic ! EmptySam 8 Déc 2012 - 19:52

J'ai trouvé une astuce pour faire réagir des objets au survol de la souris, sans avoir à cliquer dedans !

Le programme utilise KGF.dll et KGF_SUB.bas.

Les zones EDIT et MEMO de ce programme se colorient en rouge au survol de la souris.

Au lieu de colorier en rouge, on pourrait imaginer n'importe quoi d'autre.

Si cette fonctionnalité vous intéresse, je la rendrai disponible sous une forme facile à utiliser. Voici la démo:
Code:
' test_mouse_over.bas

label scruter

dim x%, y%, i%, k%, kold%, ki%, kiold%
dim objets%(7), nobj%, gauche%(7),haut%(7),large%(7),hauteur%(7)
dim colorer%(7)
nobj% = 7
objets%(1) = 1
objets%(2) = 2
objets%(3) = 11
objets%(4) = 12
objets%(5) = 13
objets%(6) = 14
objets%(7) = 10
colorer%(1) = 0
colorer%(2) = 1
colorer%(3) = 0
colorer%(4) = 1
colorer%(5) = 0
colorer%(6) = 1
colorer%(7) = 0

alpha 1 : top 1,10 : left 1,10 : caption 1,"Votre nom:"
edit 2 : top 2,10 : left 2,70 : width 2,200

container 10 : top 10,40 : left 10,10 : caption 10,"Fiche personnelle"
  width 10,400 : height 10,300

alpha 11 : parent 11,10 : top 11,20 : left 11,10 : caption 11,"Adresse:"
memo 12 : parent 12,10 : top 12,20 : left 12,80
  width 12,200 : height 12,50
alpha 13 : parent 13,10 : top 13,80 : left 13,10 : caption 13,"Numéro SS:"
edit 14 : parent 14,10 : top 14,80 : left 14,80 : width 14,200

for i%=1 to 7
  gauche%(i%) = left(objets%(i%))
  haut%(i%) = top(objets%(i%))
  large%(i%) = width(objets%(i%))
  hauteur%(i%) = height(objets%(i%))
next i%
for i%=3 to 6
  gauche%(i%) = gauche%(i%) + left(objets%(7))
  haut%(i%) = haut%(i%) + top(objets%(7))
next i%

alpha 99 : top 99,400 : left 99,10 : caption 99,"Repos"

timer 100 : timer_interval 100,100 : on_timer 100,scruter

KGF_initialize("KGF.dll")

end

scruter:
  timer_off 100
  GetMousePosition(handle(0))
  x% = GetMousePositionX%
  y% = GetMousePositionY%
  if (x%>=0) and (y%>=0)
    k% = 0
    ki% = 0
    for i%=1 to 7
      if x%>=gauche%(i%)
        if x%<(gauche%(i%)+large%(i%))
          if y%>=haut%(i%)
            if y%<(haut%(i%)+hauteur%(i%))
              k% = objets%(i%)
              ki% = i%
              exit_for
            end_if
          end_if
        end_if
      end_if
    next i%
    if k%>0
      if kold%>0
        if colorer%(kiold%)=1 then color kold%,255,255,255
      end_if
      kold% = k%
      kiold% = ki%
      if kold%>0
        if colorer%(kiold%)=1 then color kold%,255,0,0
      end_if
    end_if
    caption 99,str$(x%)+","+str$(y%)+"  sur objet "+str$(k%)
  else
    caption 99,"Sorti"
  end_if
  timer_on 100
  return
 
#INCLUDE "KGF_SUB.bas"
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Objets réagissant au survol de la souris, sans clic ! Empty
MessageSujet: Re: Objets réagissant au survol de la souris, sans clic !   Objets réagissant au survol de la souris, sans clic ! EmptySam 8 Déc 2012 - 21:18

Et comment qu'elle est bien cette fonction. Wink
Bravo Klaus
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12280
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Objets réagissant au survol de la souris, sans clic ! Empty
MessageSujet: Re: Objets réagissant au survol de la souris, sans clic !   Objets réagissant au survol de la souris, sans clic ! EmptySam 8 Déc 2012 - 22:32

Alors, voici une version de "production", utilisable facilement par #INCLUDE.

Programme de démo:
Code:
' test_mouse_over.bas

' === définition de quelques objets dont le survol est contrôlé
alpha 1 : top 1,10 : left 1,10 : caption 1,"Votre nom:"
edit 2 : top 2,10 : left 2,70 : width 2,200
container 10 : top 10,40 : left 10,10 : caption 10,"Fiche personnelle"
  width 10,400 : height 10,300
alpha 11 : parent 11,10 : top 11,20 : left 11,10 : caption 11,"Adresse:"
memo 12 : parent 12,10 : top 12,20 : left 12,80
  width 12,200 : height 12,50
alpha 13 : parent 13,10 : top 13,80 : left 13,10 : caption 13,"Numéro SS:"
edit 14 : parent 14,10 : top 14,80 : left 14,80 : width 14,200
list 15 : top 15,10 : left 15,430 : height 15,400

' objet pour la trace du programme
alpha 99 : top 99,400 : left 99,10 : caption 99,"Repos"

KGF_initialize("KGF.dll")

create_mouse_over(8,100)
add_mouse_over(1,0,0,0,0)
add_mouse_over(2,0,255,0,0)
add_mouse_over(11,10,0,0,0)
add_mouse_over(12,10,0,255,255)
add_mouse_over(13,10,0,0,0)
add_mouse_over(14,10,0,255,255)
add_mouse_over(10,0,0,0,0)
add_mouse_over(15,0,255,255,0)

end

' cette procédure est appelée chaque fois que le curseur entre
' dans un des objets surveillés, ou sur la form 0
' flag%=1 ==> on est dans la form
' flag%=0 ==> on est en-dehors de la form
sub on_mouse_over(flag%,obj%)
  if flag%=1
    caption 99,str$(mouse_over_x%)+","+str$(mouse_over_y%)+"  sur objet "+str$(obj%)+"  "+str$(mouse_over_n%)
' à titre d'exemple, on va interdire l'entrée dans le champ "adresse"
' (objet 12) si le nom est vide (objet 2)
    if mouse_over_k%=12
      if trim$(text$(2))=""
        MousePosition(left(12)+width(12)+left(10)+10,top(12)+top(10)+10)
      end_if
    end_if
  else
    caption 99,"Sorti"
  end_if
end_sub

#INCLUDE "mouse_over_SUB.bas"
#INCLUDE "KGF_SUB.bas"

et le module mouse_over_SUB.bas:
Code:
' mouse_over_SUB.bas

' le programme principal doit contenir une procédure on_mouse_over().
' Cette procédure sera appelée chaque fois que le curseur entre dans
' un objet surveillé. Avant d'appeler cette procédure, le programme
' effectue un éventuel changement de couleur, mais cette procédure est
' appelée pour tout objet scruté dans lequel le curseur entre, même
' s'il n'y a pas de changement de couleur.
'
' sub on_mouse_over(flag%,obj%)
'  if flag%=1
'    traiter ici l'évènement "dans la form" pour objet obj%
'  else
'    traiter ici l'évènement "en-dehors de la form"
'  end_if
' end_sub

message "mouse_over: ce module ne peut pas être exécuté directement."
terminate

' ===== routine évènement pour le timer (usage internne)
mouse_over_scruter:
  timer_off mouse_over_ntimer%
  GetMousePosition(handle(0))
  mouse_over_x% = GetMousePositionX%
  mouse_over_y% = GetMousePositionY%
  if (mouse_over_x%>=0) and (mouse_over_y%>=0)
    mouse_over_kold% = mouse_over_k%
    mouse_over_kiold% = mouse_over_ki%
    mouse_over_k% = 0
    mouse_over_ki% = 0
    for mouse_over_i%=1 to mouse_over_nobj%
      if mouse_over_x%>=mouse_over_gauche%(mouse_over_i%)
        if mouse_over_x%<(mouse_over_gauche%(mouse_over_i%)+mouse_over_largeur%(mouse_over_i%))
          if mouse_over_y%>=mouse_over_haut%(mouse_over_i%)
            if mouse_over_y%<(mouse_over_haut%(mouse_over_i%)+mouse_over_hauteur%(mouse_over_i%))
              mouse_over_k% = mouse_over_objets%(mouse_over_i%)
              mouse_over_ki% = mouse_over_i%
              exit_for
            end_if
          end_if
        end_if
      end_if
    next mouse_over_i%
    if mouse_over_k%<>mouse_over_kold%
      if mouse_over_kold%>0
        if mouse_over_colorer%(mouse_over_kiold%)=1 then color mouse_over_kold%,255,255,255
      end_if
      if mouse_over_k%>0
        if mouse_over_colorer%(mouse_over_ki%)=1
          color mouse_over_k%,mouse_over_RGB%(mouse_over_ki%,1),mouse_over_RGB%(mouse_over_ki%,2),mouse_over_RGB%(mouse_over_ki%,3)
        end_if
      end_if
      mouse_over_n% = mouse_over_n% + 1
      on_mouse_over(1,mouse_over_k%)
    end_if
  else
      on_mouse_over(0,0)
  end_if
  timer_on mouse_over_ntimer%
  return

' ===== création du système mouse_over
'  maxobj% ==> nombre maxi d'objets à scruter
'  ntimer% ==> un numéro d'objet disponible pour créer le timer interne
sub create_mouse_over(maxobj%,ntimer%)
  if label("mouse_over_scruter")=0 then label mouse_over_scruter
  if variable("mouse_over_nobj%")=0
    dim mouse_over_maxobj% : mouse_over_maxobj% = maxobj%
    dim mouse_over_ntimer% : mouse_over_ntimer% = ntimer%
    dim mouse_over_nobj%
    dim mouse_over_k%
    dim mouse_over_ki%
    dim mouse_over_kold%
    dim mouse_over_kiold%
    dim mouse_over_i%
    dim mouse_over_n%
    dim mouse_over_x%
    dim mouse_over_y%
    dim mouse_over_objets%(mouse_over_maxobj%)
    dim mouse_over_gauche%(mouse_over_maxobj%)
    dim mouse_over_haut%(mouse_over_maxobj%)
    dim mouse_over_largeur%(mouse_over_maxobj%)
    dim mouse_over_hauteur%(mouse_over_maxobj%)
    dim mouse_over_colorer%(mouse_over_maxobj%)
    dim mouse_over_RGB%(mouse_over_maxobj%,3)
    timer mouse_over_ntimer% : timer_interval mouse_over_ntimer%,100
    on_timer mouse_over_ntimer%,mouse_over_scruter
  end_if
end_sub

' ===== supprimer le système mouse_over
sub delete_mouse_over()
  if variable("mouse_over_nobj%")=1
    timer_off mouse_over_ntimer%
    delete mouse_over_ntimer%
    free mouse_over_maxobj%
    free mouse_over_ntimer%
    free mouse_over_nobj%
    free mouse_over_k%
    free mouse_over_ki%
    free mouse_over_kold%
    free mouse_over_kiold%
    free mouse_over_i%
    free mouse_over_n%
    free mouse_over_x%
    free mouse_over_y%
    free mouse_over_objets%
    free mouse_over_gauche%
    free mouse_over_haut%
    free mouse_over_large%
    free mouse_over_hauteur%
    free mouse_over_colorer%
    free mouse_over_RGB%
  end_if
end_sub

' ===== ajouter un objet à surveiller au système mouse_over
' obj%        ==> numéro de l'objet
' parent%    ==> numéro de l'objet parent de obj%
' R%, G%, B%  ==> couleurs RGB pour changement de couleur de fond
'                R%=G%=B%=0  ==>  pas de changement de couleur
sub add_mouse_over(obj%,parent%,R%,G%,B%)
  if mouse_over_nobj%<mouse_over_maxobj%
    mouse_over_nobj% = mouse_over_nobj% + 1
    mouse_over_objets%(mouse_over_nobj%) = obj%
    if parent%=0
      mouse_over_gauche%(mouse_over_nobj%) = left(obj%)
      mouse_over_haut%(mouse_over_nobj%) = top(obj%)
    else
      mouse_over_gauche%(mouse_over_nobj%) = left(obj%)+left(parent%)
      mouse_over_haut%(mouse_over_nobj%) = top(obj%)+top(parent%)
    end_if
    mouse_over_largeur%(mouse_over_nobj%) = width(obj%)
    mouse_over_hauteur%(mouse_over_nobj%) = height(obj%)
    if (R%=0) and (G%=0) and (B%=0)
      mouse_over_colorer%(mouse_over_nobj%) = 0
    else
      mouse_over_colorer%(mouse_over_nobj%) = 1
      mouse_over_RGB%(mouse_over_nobj%,1) = R%
      mouse_over_RGB%(mouse_over_nobj%,2) = G%
      mouse_over_RGB%(mouse_over_nobj%,3) = B%
    end_if
  end_if
end_sub

Le code est documenté.

Une brève explication: il y a deux objets placés directement sur la form 0, puis un container ayant lui-même 4 objets. La boucle de reconnaissance parcourt la table des numéros d'objets, dans l'ordre chronologique de leur ajout. Il est donc nécessaire d'ajouter d'abord tous les objets individuels, et le container après, car sinon, le programme s'arrêtera à la reconnaissance du container lorsque le curseur y entrera et ne réagira plus lorsque le curseur entre dans un des objets du container.

Et pour montrer que la routine on_mouse_over fonctionne vraiment comme une routine évènement, j'ai interdit le survol du mémo adresse (objet 12) si l'edit nom (objet 2) n'est pas renseigné. Spectaculaire !

EDIT

J'ai modifié les 2 modules pour passer le numéro de l'objet concerné en paramètre à la procédure on_mouse_over(). C''est plus intuitif comme ça.


Dernière édition par Klaus le Dim 9 Déc 2012 - 13:38, édité 2 fois
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Objets réagissant au survol de la souris, sans clic ! Empty
MessageSujet: Re: Objets réagissant au survol de la souris, sans clic !   Objets réagissant au survol de la souris, sans clic ! EmptyDim 9 Déc 2012 - 11:58

C'est bien Klaus.
Dire qu'en voyant le sujet sur un objet TreeViem je crois, et en regardant Delphi, j'avais fait un poste pour te répondre et te demandé si te serais pas possible de faire cette dll. Et puis j'ai effacé, vu que tu voulais que ce soit en Panoramic pur, et que tu avais mieux à faire!
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Objets réagissant au survol de la souris, sans clic ! Empty
MessageSujet: Re: Objets réagissant au survol de la souris, sans clic !   Objets réagissant au survol de la souris, sans clic ! EmptyDim 9 Déc 2012 - 13:01

En effet, ce sera sympa avec l'affichage de l'arborescence.
On survol un élément, la ligne change de couleur , on clique ça le déplit ou le replit
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12280
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Objets réagissant au survol de la souris, sans clic ! Empty
MessageSujet: Re: Objets réagissant au survol de la souris, sans clic !   Objets réagissant au survol de la souris, sans clic ! EmptyDim 9 Déc 2012 - 13:25

L'objet LIST de Panoramic ne sait pas colorier une ligne ! On peut changer globalement la couleur de fond, ou globalement la couleur ou les attributs de la police, mais pas pour une seule ligne.

EDIT

Et sans faire un clic, comment identifier la ligne sur laquelle se trouve le curseur ? On ne connaît que les coordonnées x et y, mais en fonction de la police, de sa taille et de ses attributs, les lignes sont plus ou moins hautes !


Dernière édition par Klaus le Dim 9 Déc 2012 - 13:37, édité 1 fois
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12280
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Objets réagissant au survol de la souris, sans clic ! Empty
MessageSujet: Re: Objets réagissant au survol de la souris, sans clic !   Objets réagissant au survol de la souris, sans clic ! EmptyDim 9 Déc 2012 - 13:35

Correction d'un bug dans mouse_over_SUB.bas. Mis à jour dans le post plus haut. Le programme test_mouse_over.bas a été mis à jour aussi, mais indépendamment de ce bug: c'est pour ajouter un objet LIST dans la surveillance.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12280
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Objets réagissant au survol de la souris, sans clic ! Empty
MessageSujet: Re: Objets réagissant au survol de la souris, sans clic !   Objets réagissant au survol de la souris, sans clic ! EmptyDim 9 Déc 2012 - 17:16

J'ai ajouté une fonction à KGF.dll permettant de connaître le numéro de lignesous le curseur d'un objet LIST ! KGF.dll, KGF_SUB.bas et demo_KGF_SUB.bas ont été mis à jour.

J'ai utilisé cette fonction pour afficher le numéro de ligne de la list, lorsque le curseur glisse dessus.

Ceci implique une surveillance permanente, et pas seulement lorsque le curseur entre ou sort d'un objet. J'ai donc ajouté une case à cocher dans le programme de démo pour choisir le moce de surveillance (par défaut: surveillance permanente). Ainsi, vous verrez le changement de comportement.

Je republie ici les sources nouvelle version:

test_mouse_over.bas:
Code:
' test_mouse_over.bas

label changer_type
dim res%

' === définition de quelques objets dont le survol est contrôlé
alpha 1 : top 1,10 : left 1,10 : caption 1,"Votre nom:"
edit 2 : top 2,10 : left 2,70 : width 2,200
container 10 : top 10,40 : left 10,10 : caption 10,"Fiche personnelle"
  width 10,400 : height 10,300
alpha 11 : parent 11,10 : top 11,20 : left 11,10 : caption 11,"Adresse:"
memo 12 : parent 12,10 : top 12,20 : left 12,80
  width 12,200 : height 12,50
alpha 13 : parent 13,10 : top 13,80 : left 13,10 : caption 13,"Numéro SS:"
edit 14 : parent 14,10 : top 14,80 : left 14,80 : width 14,200
list 15 : top 15,10 : left 15,430 : height 15,400
item_add 15,"aaaaaa"
item_add 15,"bbbbbb"
item_add 15,"cccccc"
check 16 : top 16,340 : left 16,10 : caption 16,"Surveillance permanente"
  width 16,150 : mark_on 16 : on_click 16,changer_type
check 17 : top 17,360 : left 17,10 : caption 17,"Sélection dans liste par glissement"
  width 17,250 : mark_off 17

' objet pour la trace du programme
alpha 99 : top 99,400 : left 99,10 : caption 99,"Repos"

KGF_initialize("KGF.dll")

create_mouse_over(8,100,1)
add_mouse_over(1,0,0,0,0)
add_mouse_over(2,0,255,0,0)
add_mouse_over(11,10,0,0,0)
add_mouse_over(12,10,0,255,255)
add_mouse_over(13,10,0,0,0)
add_mouse_over(14,10,0,255,255)
add_mouse_over(10,0,0,0,0)
add_mouse_over(15,0,255,255,0)

end

changer_type:
  mouse_over_type(checked(16))
  return

' cette procédure est appelée chaque fois que le curseur entre
' dans un des objets surveillés, ou sur la form 0
' flag%=1 ==> on est dans la form
' flag%=0 ==> on est en-dehors de la form
sub on_mouse_over(flag%,obj%)
  if flag%=1
    caption 99,str$(mouse_over_x%)+","+str$(mouse_over_y%)+"  sur objet "+str$(obj%)+"  "+str$(mouse_over_n%)
' à titre d'exemple, on va interdire l'entrée dans le champ "adresse"
' (objet 12) si le nom est vide (objet 2)
    if obj%=12
      if trim$(text$(2))=""
        MousePosition(left(12)+width(12)+left(10)+10,top(12)+top(10)+10)
      end_if
    end_if
    if object_type(obj%)=8
      GetListBoxItemFromPoint(obj%,mouse_over_x%, mouse_over_y%)
      if GetListBoxItemFromPoint>0
        if checked(17)=1 then
        SelectListBoxItem(handle(obj%),GetListBoxItemFromPoint)
      end_if
      caption 99,str$(mouse_over_x%)+","+str$(mouse_over_y%)+"  sur objet "+str$(obj%)+"  "+str$(mouse_over_n%)+"  item "+str$(GetListBoxItemFromPoint)
    end_if
  else
    caption 99,"Sorti"
  end_if
end_sub

#INCLUDE "mouse_over_SUB.bas"
#INCLUDE "KGF_SUB.bas"

mouse_over_SUB.bas:
Code:
' mouse_over_SUB.bas

' le programme principal doit contenir une procédure on_mouse_over().
' Cette procédure sera appelée chaque fois que le curseur entre dans
' un objet surveillé. Avant d'appeler cette procédure, le programme
' effectue un éventuel changement de couleur, mais cette procédure est
' appelée pour tout objet scruté dans lequel le curseur entre, même
' s'il n'y a pas de changement de couleur.
'
' sub on_mouse_over(flag%,obj%)
'  if flag%=1
'    traiter ici l'évènement "dans la form" pour objet obj%
'  else
'    traiter ici l'évènement "en-dehors de la form"
'  end_if
' end_sub

message "mouse_over: ce module ne peut pas être exécuté directement."
terminate

' ===== routine évènement pour le timer (usage internne)
mouse_over_scruter:
  timer_off mouse_over_ntimer%
  GetMousePosition(handle(0))
  mouse_over_x% = GetMousePositionX%
  mouse_over_y% = GetMousePositionY%
  if (mouse_over_x%>=0) and (mouse_over_y%>=0)
    mouse_over_kold% = mouse_over_k%
    mouse_over_kiold% = mouse_over_ki%
    mouse_over_k% = 0
    mouse_over_ki% = 0
    for mouse_over_i%=1 to mouse_over_nobj%
      if mouse_over_x%>=mouse_over_gauche%(mouse_over_i%)
        if mouse_over_x%<(mouse_over_gauche%(mouse_over_i%)+mouse_over_largeur%(mouse_over_i%))
          if mouse_over_y%>=mouse_over_haut%(mouse_over_i%)
            if mouse_over_y%<(mouse_over_haut%(mouse_over_i%)+mouse_over_hauteur%(mouse_over_i%))
              mouse_over_k% = mouse_over_objets%(mouse_over_i%)
              mouse_over_ki% = mouse_over_i%
              exit_for
            end_if
          end_if
        end_if
      end_if
    next mouse_over_i%
    if (mouse_over_k%<>mouse_over_kold%) or (mouse_over_type%=1)
      if mouse_over_kold%>0
        if mouse_over_colorer%(mouse_over_kiold%)=1 then color mouse_over_kold%,255,255,255
      end_if
      if mouse_over_k%>0
        if mouse_over_colorer%(mouse_over_ki%)=1
          color mouse_over_k%,mouse_over_RGB%(mouse_over_ki%,1),mouse_over_RGB%(mouse_over_ki%,2),mouse_over_RGB%(mouse_over_ki%,3)
        end_if
      end_if
      mouse_over_n% = mouse_over_n% + 1
      on_mouse_over(1,mouse_over_k%)
    end_if
  else
      on_mouse_over(0,0)
  end_if
  timer_on mouse_over_ntimer%
  return

' ===== création du système mouse_over
'  maxobj% ==> nombre maxi d'objets à scruter
'  ntimer% ==> un numéro d'objet disponible pour créer le timer interne
'  typ%    ==> type de surveillance  0=changement d'objet  1=continuel
sub create_mouse_over(maxobj%,ntimer%,typ%)
  if label("mouse_over_scruter")=0 then label mouse_over_scruter
  if variable("mouse_over_nobj%")=0
    dim mouse_over_maxobj% : mouse_over_maxobj% = maxobj%
    dim mouse_over_ntimer% : mouse_over_ntimer% = ntimer%
    dim mouse_over_type% : mouse_over_type% = typ%
    dim mouse_over_nobj%
    dim mouse_over_k%
    dim mouse_over_ki%
    dim mouse_over_kold%
    dim mouse_over_kiold%
    dim mouse_over_i%
    dim mouse_over_n%
    dim mouse_over_x%
    dim mouse_over_y%
    dim mouse_over_objets%(mouse_over_maxobj%)
    dim mouse_over_gauche%(mouse_over_maxobj%)
    dim mouse_over_haut%(mouse_over_maxobj%)
    dim mouse_over_largeur%(mouse_over_maxobj%)
    dim mouse_over_hauteur%(mouse_over_maxobj%)
    dim mouse_over_colorer%(mouse_over_maxobj%)
    dim mouse_over_RGB%(mouse_over_maxobj%,3)
    timer mouse_over_ntimer% : timer_interval mouse_over_ntimer%,100
    on_timer mouse_over_ntimer%,mouse_over_scruter
  end_if
end_sub

' ===== supprimer le système mouse_over
sub delete_mouse_over()
  if variable("mouse_over_nobj%")=1
    timer_off mouse_over_ntimer%
    delete mouse_over_ntimer%
    free mouse_over_maxobj%
    free mouse_over_ntimer%
    free mouse_over_type%
    free mouse_over_nobj%
    free mouse_over_k%
    free mouse_over_ki%
    free mouse_over_kold%
    free mouse_over_kiold%
    free mouse_over_i%
    free mouse_over_n%
    free mouse_over_x%
    free mouse_over_y%
    free mouse_over_objets%
    free mouse_over_gauche%
    free mouse_over_haut%
    free mouse_over_large%
    free mouse_over_hauteur%
    free mouse_over_colorer%
    free mouse_over_RGB%
  end_if
end_sub

' ===== ajouter un objet à surveiller au système mouse_over
' obj%        ==> numéro de l'objet
' parent%    ==> numéro de l'objet parent de obj%
' R%, G%, B%  ==> couleurs RGB pour changement de couleur de fond
'                R%=G%=B%=0  ==>  pas de changement de couleur
sub add_mouse_over(obj%,parent%,R%,G%,B%)
  if mouse_over_nobj%<mouse_over_maxobj%
    mouse_over_nobj% = mouse_over_nobj% + 1
    mouse_over_objets%(mouse_over_nobj%) = obj%
    if parent%=0
      mouse_over_gauche%(mouse_over_nobj%) = left(obj%)
      mouse_over_haut%(mouse_over_nobj%) = top(obj%)
    else
      mouse_over_gauche%(mouse_over_nobj%) = left(obj%)+left(parent%)
      mouse_over_haut%(mouse_over_nobj%) = top(obj%)+top(parent%)
    end_if
    mouse_over_largeur%(mouse_over_nobj%) = width(obj%)
    mouse_over_hauteur%(mouse_over_nobj%) = height(obj%)
    if (R%=0) and (G%=0) and (B%=0)
      mouse_over_colorer%(mouse_over_nobj%) = 0
    else
      mouse_over_colorer%(mouse_over_nobj%) = 1
      mouse_over_RGB%(mouse_over_nobj%,1) = R%
      mouse_over_RGB%(mouse_over_nobj%,2) = G%
      mouse_over_RGB%(mouse_over_nobj%,3) = B%
    end_if
  end_if
end_sub

' ===== changer le type de surveillance
'  typ%    ==> type de surveillance  0=changement d'objet  1=continuel
sub mouse_over_type(typ%)
  mouse_over_type% = typ%
end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12280
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Objets réagissant au survol de la souris, sans clic ! Empty
MessageSujet: Re: Objets réagissant au survol de la souris, sans clic !   Objets réagissant au survol de la souris, sans clic ! EmptyDim 9 Déc 2012 - 18:44

Dans le programme test_mouse_over.bas, j'ai ajouté une check box pour permettre de sélectionner une ligne simplement en glissant le curseur dessus ! Seul le programme de démo est modifie. KGF_SUB.bas et mouse_over_SUB.bas contenaient déjà tout ce qu'il faut.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Objets réagissant au survol de la souris, sans clic ! Empty
MessageSujet: Re: Objets réagissant au survol de la souris, sans clic !   Objets réagissant au survol de la souris, sans clic ! Empty

Revenir en haut Aller en bas
 
Objets réagissant au survol de la souris, sans clic !
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Simuler un clic gauche souris
» Survol des objets
» Position de la souris sur un objet à travers d'autres objets
» Tolérance dans le clic souris
» Clic souris répétitif automatique

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: