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
» Logiciel de planétarium.
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -55%
Friteuse sans huile – PHILIPS – Airfryer ...
Voir le deal
49.99 €

 

 2.12 du 7 Avril 2013: amélioration des fonctions ...Click...

Aller en bas 
4 participants
AuteurMessage
Klaus

Klaus


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

2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Empty
MessageSujet: 2.12 du 7 Avril 2013: amélioration des fonctions ...Click...   2.12 du 7 Avril 2013: amélioration des fonctions ...Click... EmptyDim 7 Avr 2013 - 10:28

Nouvelle version:
KGF.dll du 7/4/2013

J'ai optimisé le traitement du survol d'un objet par le curseur de la souris. Aucun changement fonctionnel, aucun changement de la doc.

Je remets ici les 3 programmes de démo:

test_mouse_over.bas:
- survol d'objets dans form 0 et dans un container avec changement d'aspect
- sélection dune ligne d'une liste par simple survol, sans cliquer
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_on 17

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

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
  GetObjectHandleUnderCursor()
  caption 98,"Han dle: "+str$(GetObjectHandleUnderCursor)
end_sub

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

test_mouse_over_bis.bas:
- survol de mémo et list avec changement d'aspect
- survol de boutons avec changement de taille
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"

test_mouse_over_ter.bas:
- survol de deux pictures avec dessin d'une trace
Code:
' test_mouse_over_ter.bas

label mouse_enter_memo, mouse_exit_memo
label mouse_enter_rect, mouse_exit_rect, mouse_move_rect

dim dll$ : dll$ = "KGF.dll"
dim langage$ : langage$ = "FR"
' dim langage$ : langage$ = "EN"

dim x%, y%, r%, s$, p%

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."
  item_add 1,"Les objets vont"
  item_add 1,"changer d'aspect"
else
  item_add 1,"Hoover the cursor"
  item_add 1,"over the objects"
  item_add 1,"and they will"
  item_add 1,"change their aspect"
end_if
picture 2 : top 2,10 : left 2,350
  width 2,200 : height 2,400
picture 3 : top 3,320 : left 3,200
  width 3,120 : height 3,100
 
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_rect
button 302 :hide 302 : on_click 302,mouse_exit_rect
button 402 :hide 402 : on_click 402,mouse_move_rect


' ClickSetHook(1,101)
' ClickSetLink(201,5)
' ClickSetLink(301,6)
DefineMouseOver(1,201,101,5)
DefineMouseOver(1,301,101,6)

' ClickSetHook(0,102)
' ClickDefineRect(1,left(2),top(2),width(2),height(2))
' ClickDefineRect(2,200,320,120,100)
' ClickSetLinkRect(202,5,1)
' ClickSetLinkRect(302,6,1)
' ClickSetLinkRect(402,7,1)
' ClickSetLinkRect(202,5,2)
' ClickSetLinkRect(302,6,2)
' ClickSetLinkRect(402,7,2)

 DefineMouseOverRect(0,202,102,5,1,left(2),top(2),width(2),height(2))
 DefineMouseOverRect(0,302,102,6,1,left(2),top(2),width(2),height(2))
 DefineMouseOverRect(0,402,102,7,1,left(2),top(2),width(2),height(2))
 DefineMouseOverRect(0,202,102,5,2,200,320,120,100)
 DefineMouseOverRect(0,302,102,6,2,200,320,120,100)
 DefineMouseOverRect(0,402,102,7,2,200,320,120,100)

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_rect:
  s$ = text$(102)
  p% = instr(s$,"R")
  r% = mid$(s$,p%+1,len(s$))
  2d_target_is r%+1
  if langage$="FR"
    caption 0,"Entrée picture "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")"
  else
    caption 0,"Enter picture "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")"
  end_if
  return

mouse_exit_rect:
  s$ = text$(102)
  p% = instr(s$,"R")
  r% = mid$(s$,p%+1,len(s$))
  2d_target_is r%+1
  if langage$="FR"
    caption 0,"Sortie picture "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")"
  else
    caption 0,"Exit picture "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")"
  end_if
  return

mouse_move_rect:
  s$ = text$(102)
  p% = instr(s$,"R")
  r% = mid$(s$,p%+1,len(s$))
  s$ = left$(s$,p%-1)
  p% = instr(s$,",")
  x% = val(left$(s$,p%-1))-left(r%+1)
  y% = val(mid$(s$,p%+1,len(s$)))-top(r%+1)
  2d_circle x%, y%, 3
  if langage$="FR"
    caption 0,"Move picture "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")"
  else
    caption 0,"Move picture "+time$+" ("+trim$(text$(101))+") ("+trim$(text$(102))+")"
  end_if
  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

' DefineMouseOverRect:
' 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 DefineMouseOverRect(obj%,btn%,edt%,act%,num%,x%,y%,w%,h%)
  ClickSetHook(obj%,edt%)
  ClickDefineRect(num%,x%,y%,w%,h%)
  ClickSetLinkRect(btn%,act%,num%)
end_sub

#INCLUDE "KGF_SUB.bas"
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Empty
MessageSujet: re   2.12 du 7 Avril 2013: amélioration des fonctions ...Click... EmptyDim 7 Avr 2013 - 15:45

@ Klaus,

Je sais que je vais être casse.... mais serait il possible
de récupérer le numéro de l'objet traité dans une variable.

Je m'explique.

Actuellement, si je créé 10 objets à surveiller, je me retrouve avec 20 button ( dans mon cas, 1 button "in", 1 button "out") .
Si la fonction renvoyée le numéro de l'objet dans une variable "Object_Detect%",
on aurait besoin d'un button par action mais plus de multiplication par le nombre d' objet.
Il suffit de traiter l'application selon le numéro d'objet retourné ( if Object_detect%=x then ...).

Je ne sais pas si j'ai été très clair sur ce coup là... Laughing

Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Empty
MessageSujet: Re: 2.12 du 7 Avril 2013: amélioration des fonctions ...Click...   2.12 du 7 Avril 2013: amélioration des fonctions ...Click... EmptyDim 7 Avr 2013 - 16:55

Pas du tout ! Very Happy mais est-ce que Number_Click ne ferait pas l'affaire ?
Revenir en haut Aller en bas
Jicehel

Jicehel


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

2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Empty
MessageSujet: Re: 2.12 du 7 Avril 2013: amélioration des fonctions ...Click...   2.12 du 7 Avril 2013: amélioration des fonctions ...Click... EmptyDim 7 Avr 2013 - 16:58

Pas dans son cas, si j'ai bien compris puisque ses objets n'en sont pas mais que ce sont en fait des bouts d'images
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Empty
MessageSujet: re   2.12 du 7 Avril 2013: amélioration des fonctions ...Click... EmptyDim 7 Avr 2013 - 17:04

Number_click renvoit le numéro cliqué mais ne me permet pas de diminuer le nombre de bouton à cliquer.

ce que je voudrais c'est que la fonction declenche le traitement par le bouton mais qu'à fois que
le traitement est le même, ce soit le même bouton qui soit declenché et que le dispaching
selon l'objet survolé se fasse sur la valeur de la variable de retour contenant son numéro.

c'est pas très clair tout çà... Laughing

Revenir en haut Aller en bas
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Empty
MessageSujet: re   2.12 du 7 Avril 2013: amélioration des fonctions ...Click... EmptyDim 7 Avr 2013 - 17:19

Je me reprends pour être sûr d'être compris...

Actuellement, si je créé un objet avec effet, il me deux boutons invisibles par objet pour le traitement des actions "in" et "out".
Si on renvoi le numéro de l'objet dans une variable, je peux créer autant d' objet que je veux et seulement un bouton par action à traiter.

Mouse_in:

if In%=objet1 => .......
if In%=objet1 => .......

return

Actuellement :

10 objets créés et surveillés avec "in" et "out" => 20 boutons

Avec renvoi du num dans une variable :

10 objets créés et surveillés avec "in" et "out" => 2 boutons
Revenir en haut Aller en bas
Klaus

Klaus


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

2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Empty
MessageSujet: Re: 2.12 du 7 Avril 2013: amélioration des fonctions ...Click...   2.12 du 7 Avril 2013: amélioration des fonctions ...Click... EmptyDim 7 Avr 2013 - 18:29

Je comprend bien ta question. Pour y répondre, il faut que j'explique un peu plus en détail la méthode de réalisation de ces fonctions.

Tout tourne autour de la façon dont Windows gère les évènements. C'est un système de messages très courts, envoyés aux différents destinataires (fenêtre, container, objets comme edit, bouton etc). Chaque destinataire a sa propre routine d'évènement pour gérer l'ensemble des évènements qui lui sont adressés. Il arrive souvent que Windows adresse un message à une fenêtre (form 0 en Panoramic), mais ce message est destiné à un objet dans cette fenêtre. La routine évènement de la form 0 reconnaît alors ce fait et redirige le message vers le destinataire présumé, en se remettant immédiatement à l'écoute des messages suivants.

Dans le cas de Panoramic, la routine évènement est générée automatiquement lors de la création de l'exécutable. Elle fait partie intégrante de l'environnement généré automatiquement pour le programme lui-même, puis pour la form 0, ainsi que pour tous les objets fenêtrés. Seuls les objets picture et alpha ne sont pas des objets fenêtrés et n'ont donc pas de routine évènement. C'est la routine évènement de leur "contenant" (form 0 ou un container) qui est mise à contribution.

Le noyau de Panoramic, à son tour, permet d'appeler un sous-programme Panoramic lorsqu'un de ces évènements arrive. Certes, Panoramic ne donne accès qu'à un choix restreint d'évènements à traiter. Mais pour tous les évènements traités par Panoramic, c'est d'abord la routine d'évènement de Windows qui agit, et qui transfert le contrôle au noyau de Panoramic pour les cas où le programmeur a créé un ON_xxx, et c'est le noyau de Panoramic appelle à son tour le sous-programme évènement en PAnoramic. Le cas des picture et alpha est particulier: c'est la form contenant le picture qui réagit à sa place et qui est responsable de redessiner le picture ENTIER à chaque modification.

La difficulté, tant qu'on est à l'intérieur de cette chaîne de routines en cascade, c'est qu'on est dans un environnement "évènement". C'est pour un programme application l'équivalent d'une interruption hardware pour un driver. On est soumis à des contraintes de temps très strictes. Trop de temps passé dans une routine d'évènement, et un voir une multitude d'évènements suivants peuvent être "oubliés". Il y a bien une sorte de file d'attente, encore faut-il qu'elle soit vidée suffisamment vite pour que les nouveaux évènements puissent y trouver une place.

Et c'est exactement ce qui se produit avec mon module test_mouse_over_ter.bas, losqu'on essaie d'avoir une trace du passage de la souris dans le picture. Les fonctions de dessin 2d sont fatalement lentes, et de plus, à chaque cherche affiché, le picture entier est redessiné ! Il n'y a pas moyen d'ajouter juste ces quelques pixels ! C'est pourquoi l'affichage paraît saccadé, et décalage parfois.

On n'a pas le même problème avec les deux autres modules, lors du survol de boutons, listes ou mémos. Ces objets sont des objets Windows fenêtrés, et le changement d'état est réalisé par Windows dans un mode prioritaire. On ne passe que très peu de temps dans la routine évènement Panoramic.

J'ai choisi d'intercepter l'évènement Windows lorsqu'il est envoyé à un objet (fonction ClickSetHook). Je détourne le flot du programme vers une routine évènement localisée dans la DLL. Là, je filtre les évènements qui m'intéressent et je passe les autres à la routine qui aurait normalement été appelée. Cela s'appelle la méthode du hameçonnage (hooking en anglais). Et pour chaque évènement qui m'intéresse, je déclenche une action de mon choix.

Donc, connaissant ces contraintes pour en avoir fait l'amère expérience, j'ai tenté de concevoir un mécanisme qui permet d'enrichir la gestion des évènements de Panoramic, mais en prenant le stricte minimum de temps au niveau des routines évènement écrites en Panoramic. Et la méthode qui donne l'exécution la plus rapide, est bien celle qui cible directement la bonne portion de code, sans avoir à passer par une procédure de reconnaissance avec des IFs en cascade, ou des SELECT, ou que sais-je. J'ai choisi de simuler le clic sur un bouton, mais j'aurais pu choisir autre chose, comme ON_CHANGE sur un edit etc. Mais, crois-moi, si tu passes du temps à analyser quelle action il faut exécuter, il pourra déjà être trop tard pour pouvoir intercepter l'action suivante. Je suis tombé dans ce piège, au début, et le cas de la trace dans un picture en est la démonstration flagrante. Par contre, dans test_mouse_over.bas, le cas de sélection d'une ligne dans un objet list par simple survol montre ce que l'on peut faire si l'on est strict avec la gestion du temps des routines évènements.

Pour résumer: oui, je pourrais fournir une indication sur l'objet ayant déclenché l'action. Mais même dans ce cas, cela ne règle pas tout, car pour un seul et même objet, on peut gérer, simultanément, plusieurs évènements par mes fonctions: entrée/sortie de souris, déplacements de la souris dans l'objet, clic gauche ou droit, double clic etc. Il faudrait fournir: l'objet concerné, la nature de l'évènement et les coordonnées. Et le décodage en serait encore plus complexe.

Au final, pour ces raisons techniques, je préfère rester avec cette structure dans laquelle, pour chaque évènement géré, un a un bouton caché et une routine évènement liée à ce bouton par un on_click. Ainsi, il est d'ailleurs très facile d'ajouter le traitement d'un évènement supplémentaire ou d'en enlever un, sans changer le cours global du programme. To comme si l'on ajoutait un ON_CLICK et la routine correspondante à on objet Panoramic, il suffit simplement d'ajouter le bouton et sa routine on_click, puis une ligne ClickSetLink pour liéer l'évèmenent au bouton.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Empty
MessageSujet: re   2.12 du 7 Avril 2013: amélioration des fonctions ...Click... EmptyDim 7 Avr 2013 - 18:43

Sniff!!!....

Le vrai "Button_Picture" serait donc la vraie solution.... Laughing
Revenir en haut Aller en bas
Klaus

Klaus


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

2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Empty
MessageSujet: Re: 2.12 du 7 Avril 2013: amélioration des fonctions ...Click...   2.12 du 7 Avril 2013: amélioration des fonctions ...Click... EmptyDim 7 Avr 2013 - 19:02

Bien sûr. Et ça viendra sûrement.

En attendant, un picture peut déjà servir de bouton. Certes, on n'a pas le changement d'aspect si le curseur entre dans le picture-button, comme pour un vrai bouton, mais on peut le cliquer. C'est ce que je fais dans la barre d'outils de mon IDE, et c'est possible dans DLL.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Empty
MessageSujet: re   2.12 du 7 Avril 2013: amélioration des fonctions ...Click... EmptyDim 7 Avr 2013 - 19:09

En tout cas merci pour ta réponse avec autant d'explications.
Cela va nous permettre de comprendre certaines difficultés
dans la création des fonctions de KGF.dll .
Revenir en haut Aller en bas
Invité
Invité




2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Empty
MessageSujet: Re: 2.12 du 7 Avril 2013: amélioration des fonctions ...Click...   2.12 du 7 Avril 2013: amélioration des fonctions ...Click... EmptyDim 7 Avr 2013 - 20:13

Bonsoir,
Je me permets tout le temps de ne pas intervenir, mais il y a les démons derrière moi.

Est-ce ce que ce bout de code ne pourrait pas servir de base. Il y a le problème du déplacement de la fenêtre, mais il y a peut-être une solution.
Code:

dim res%,hnd%,mode%,left%,top%,width%,height%
label remettre
dll_on "C:\PANO\DLL\KGF.dll"
hnd%=handle(0):top% = top(0)+100 :left%=left(0)+100
res% = DLL_call6("WindowRectangleHole",hnd%,1,left%,top%,80,30)

form 10:border_hide 10:width 10,80:height 10,30:color 10,255,0,0:gosub remettre
on_click 0,remettre
end
remettre:
 left 10,left(0)+100:top 10,top(0)+100
return
Le bouton c'est la form 10, et peut-être que ...?
Revenir en haut Aller en bas
Contenu sponsorisé





2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Empty
MessageSujet: Re: 2.12 du 7 Avril 2013: amélioration des fonctions ...Click...   2.12 du 7 Avril 2013: amélioration des fonctions ...Click... Empty

Revenir en haut Aller en bas
 
2.12 du 7 Avril 2013: amélioration des fonctions ...Click...
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» 2.19 du 24 avril 2013: amélioration de SearchStringList
» 2.20 du 26 avril 2013: correction de SerachStringList
» 2.21 du 26 avril 2013: correction de SerachStringList
» 2.08 du 29 Mars 2013: amélioration de ClickIntercept
» 2.09 du 1er Avril 2013 - nouvelle fonction SetClickLinkRect

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: