FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Tout est tranquille
par Jean Claude Hier à 21:41

» Texte en gif animé
par JL35 Hier à 13:29

» BasicEditor
par Yannick Mer 20 Sep 2017 - 17:17

» Simuler l’appui d'une touche ou combinaison de touches.
par pascal10000 Lun 18 Sep 2017 - 19:30

» Utilisation de HVIEWER pour afficher des images
par papydall Lun 18 Sep 2017 - 17:43

» Panoramic et les gifs animés.
par papydall Lun 18 Sep 2017 - 16:32

» recover source
par pascal10000 Dim 17 Sep 2017 - 14:21

» Recent dans vos menu
par Jean Claude Sam 16 Sep 2017 - 11:41

» Comment centrer un texte 3D.
par pascal10000 Ven 15 Sep 2017 - 20:20

» Carte interface 16 entrées et 16 sorties
par Jicehel Ven 15 Sep 2017 - 16:30

» Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT
par pascal10000 Ven 15 Sep 2017 - 16:20

» Compilateur FBPano
par jean_debord Ven 15 Sep 2017 - 9:59

» 1 (en analyse): 3D_TARGET_IS ne fonctionne pas sur 3D_TEXT
par Jack Jeu 14 Sep 2017 - 19:52

» Problème avec la 3D.
par Jack Jeu 14 Sep 2017 - 18:06

» Test de la 3D.
par mindstorm Mer 13 Sep 2017 - 19:45

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

Partagez | 
 

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

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Klaus

avatar

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

MessageSujet: 2.12 du 7 Avril 2013: amélioration des fonctions ...Click...   Dim 7 Avr 2013 - 11: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
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7991
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Dim 7 Avr 2013 - 16: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
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: 2.12 du 7 Avril 2013: amélioration des fonctions ...Click...   Dim 7 Avr 2013 - 17:55

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

avatar

Nombre de messages : 5855
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: 2.12 du 7 Avril 2013: amélioration des fonctions ...Click...   Dim 7 Avr 2013 - 17: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
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7991
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Dim 7 Avr 2013 - 18: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
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7991
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Dim 7 Avr 2013 - 18: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
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: 2.12 du 7 Avril 2013: amélioration des fonctions ...Click...   Dim 7 Avr 2013 - 19: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
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7991
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Dim 7 Avr 2013 - 19:43

Sniff!!!....

Le vrai "Button_Picture" serait donc la vraie solution.... Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: 2.12 du 7 Avril 2013: amélioration des fonctions ...Click...   Dim 7 Avr 2013 - 20: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
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7991
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Dim 7 Avr 2013 - 20: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
Voir le profil de l'utilisateur
Invité
Invité



MessageSujet: Re: 2.12 du 7 Avril 2013: amélioration des fonctions ...Click...   Dim 7 Avr 2013 - 21: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é




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

Revenir en haut Aller en bas
 
2.12 du 7 Avril 2013: amélioration des fonctions ...Click...
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» mail de masse pour ANIMAL CROSSING WII U.(Fait le 28 avril 2013)
» Nouvelle interface Bbox, toujours rien ?
» 2.16 du 22 avril 2013: nouvel objet RichEdit
» beIN SPORT en clair du 26 mars au 01 avril 2013 sur Bbox
» [Edit] Formation professionnelle Houdini - 03 - 30 avril 2013 à Paris

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: