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
» Bataille terrestre
Zones sensitives sur un objet Panoramic Emptypar Marc Aujourd'hui à 16:20

» item_index
Zones sensitives sur un objet Panoramic Emptypar Marc Aujourd'hui à 16:13

» SineCube
Zones sensitives sur un objet Panoramic Emptypar Marc Hier à 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Zones sensitives sur un objet Panoramic Emptypar Marc Hier à 12:22

» Philharmusique
Zones sensitives sur un objet Panoramic Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Zones sensitives sur un objet Panoramic Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Zones sensitives sur un objet Panoramic Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Zones sensitives sur un objet Panoramic Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Zones sensitives sur un objet Panoramic Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Zones sensitives sur un objet Panoramic Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Zones sensitives sur un objet Panoramic Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0
Zones sensitives sur un objet Panoramic Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Zones sensitives sur un objet Panoramic Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
Zones sensitives sur un objet Panoramic Emptypar Klaus Lun 6 Mai 2024 - 10:23

» @Jack
Zones sensitives sur un objet Panoramic Emptypar Jack Mar 30 Avr 2024 - 20:40

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 du moment : -28%
Précommande : Smartphone Google Pixel 8a 5G ...
Voir le deal
389 €

 

 Zones sensitives sur un objet Panoramic

Aller en bas 
3 participants
AuteurMessage
Klaus

Klaus


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

Zones sensitives sur un objet Panoramic Empty
MessageSujet: Zones sensitives sur un objet Panoramic   Zones sensitives sur un objet Panoramic EmptyVen 3 Fév 2012 - 1:10

J'ai fait, en Panoramic pur, un moyen de rendre certaines zones d'un objet Panoramic "sensibles" à un clic gauche de la souris, permettant de générer un évènement Panoramic donnant l'identification de la zone clickée.

Le début du code contient la doc complète. Voici le code:
Code:
' ZonesSensitives.bas

' (Note: quelque fois, ZS est utilisé pour signifier "Zone Sensitive")

' Ce module peut travailler sur les objets Panoramic suivants:
'  picture  scene2d  memo  edit  button  container
' Cette liste n'est pas exhaustive. Mais cela permet déjà de voir quelques
' applications intéressantes:
'  exclure certaines parties d'un SCENE2D du clic de souris
'  différencier des colonnes (!) dans un mémo
'  définir des zones réactives sur une carte géographique
'  etc.


' Ce module permet de définir des zones sensitives sur un objet Panoramic.
' L'objet ciblé est désigne par ZS_n (ZoneSensitive n).
' Une zone sensitive est définie par son numéro d'objet, les coordonnées
' du coin en haut à gauche et du coin en bas à droite, ainsi que d'un
' identifiant numérique qu'il convient de choisir unique.
' Plusieurs zones sensitives peuvent être actives au même moment, dans le
' même objet, ou dans plusieurs objets.

' Le programme application communique avec le package ZS via des variables
' et des sous-programmes

' Les variables d'interface sont:
' ZS_n% (entrée)        numéro d'objet ciblé par le service demandé
' ZS_xy% (entrée/sortie) description de la zone sensitive
' ZS_clicked% (sortie)  numéro d'objet qui a été clické
' Composition de la variable ZS_xy%: c'est un tableau de 5 cases:
'  ZS_xy%(0) = x1  ZZ_xx%(1) = y1    coin en haut à gauche
'  ZS_xy%(2) = x2  ZZ_xx%(3) = y2    coin en bas à droite
'  ZS_xy%(4) = identifiant            une valeur libre, unique pour une ZS

' Les sousprogrammes d'interface sont:
'  ZS_init    initialise le système ZS, crée les labels et les variables.
'              Une commande "label" doit être donnée pour cette routine.
'              Exemple:  label ZS_init : gosub ZS_init
'  ZS_ajouter  ajouter une ZS au système. Les variables suivantes doivent
'              être renseignées:
'                ZS_n%    numéro d'objet ciblé
'                ZS_xy%(0) abscisse du coin en haut à gauche de la zone
'                ZS_xy%(1) ordonnée du coin en haut à gauche de la zone
'                ZS_xy%(2) abscisse du coin en bast à droite de la zone
'                ZS_xy%(3) ordonnée du coin en bast à droite de la zone
'                ZS_xy%(4) identifiant de la zone sensitive
'              Si l'objet indiqué par ZS_n% n'est pas encore ciblé par
'              une autre ZS, le programme déclare un évènement
'              ON_CLICK ZS_click sur cet objet. Ce sera désactivé par
'              les routines appropriées.
'  ZS_raz:    annule l'ensemble des zones sensitives ainsi que les
'              routines ON_CLICK éventuelles
'  ZS_signaler specifie le numéro d'un objet EDIT pour recevoir la
'              notification d'un clic recevable sur une des ZS actives.
'              Cet objet doit avoir un évènement ON_CHANGE qui se déclenchera
'              chaque fois qu'une zone sensitive active a été cliquée.
'              Et dans ce cas, cet obbjet contient l'identifiant de la ZS.
'              Les variables à renseigner pour ZS_ajouter sont remplies
'              avec les valeurs correspondantes à la zone sensitive, et
'              la variable ZS_clicked% contient le numéro de l'objet contenant
'              la zone sensitive qui a été clickée.
'  ZS_desactiver désactive une zone sensitive. Pour cela, la variable ZS_n%
'              doit contenir l'identifiant de la zone sensitive à désactiver.
'              Cette ZS ne réagira plus au clic, mais reste mémorisée. On
'              peut la réactiver par le sousprogramme ZS_activer.
'  ZS_activer  réactive une zone sensitive qui a été désactivée par le
'              sousprogramme ZS_desactiver
'  ZS_retirer  retire une zone sensitive du système. La variable ZS_n% doit
'              contenir son identifiant unique. Elle est complètement
'              effacée et ne peut pas être réactivée par ZS_activer

' La démontration travaille avec un PICTURE 100 dont on déclare le quart
' supérieur gauche en zone sensitive avec identifiant 137, et le quart
' inférieur droit en zone sensitive avec identifiant 29. Un EDIT 101 sert
' d'objet de notification: son évèment ON_CHANGE affiche des informations
' sur un clic reçu - il faudrait placer à cet endroit le traitement
' spécifique de l'application.

' ATTENTION ! Le programme de démo inclus ici ne contient pas de sélection
' visuelle des fonctions. Une variable DEMO% est à modifier pour obtenir
' les tests suivants:
'  DEMO% = 1.  les deux ZS sont créées, ainsi que le lien de notification
'  DEMO% = 2  la ZS 137 est désactivée
'  DEMO% = 3  la ZS 137 est réactivée
'  DEMO% = 4  la ZS 137 est retirée
'  DEMO% = 5  on tente de réactiver la ZS 137
'  DEMO% = 6  le système est complètement remis à zéro

' programme de démo
dim DEMO% : DEMO% = 1
label creer_environnement, une_zone_est_clickee

gosub creer_environnement

' *** initialiser le système des zones sensitives
'    Cette ligne est à copier au début d'un programme application
label ZS_init : gosub ZS_init

' *** zone sensitive id=137 sur le quart supérieur gauche d'un PICTURE
ZS_n% = 100
ZS_xy%(0) = 0 : ZS_xy%(1) = 0
ZS_xy%(2) = 200 : ZS_xy%(3) = 150
ZS_xy%(4) = 137
gosub ZS_ajouter

' *** zone sensitive id=29 sur le quart inférieur droit d'un PICTURE
ZS_n% = 100
ZS_xy%(0) = 200 : ZS_xy%(1) = 150
ZS_xy%(2) = 400 : ZS_xy%(3) = 300
ZS_xy%(4) = 29
gosub ZS_ajouter

' *** utiliser EDIT 101 pour signaler les clics reçus
ZS_n% = 101
gosub ZS_signaler
if DEMO%=1 then end

' *** désactiver  ZS 137
ZS_n% = 137
gosub ZS_desactiver
if DEMO%=2 then end

' ** réactiver ZS 137
ZS_n% = 137
gosub ZS_activer
if DEMO%=3 then end

' ** supprimer ZS 137
ZS_n% = 137
gosub ZS_retirer
if DEMO%=4 then end

' *** tenter de réactiver ZS 137
ZS_n% = 137
gosub ZS_activer
if DEMO%=5 then end

' *** tout effacer
gosub ZS_raz
if DEMO%=6 then end
end

creer_environnement:
  picture 100 : top 100,30 : left 100,30    : ' OK
'  scene2d 100 : top 100,30 : left 100,30    : ' OK sans COLOR
'  memo 100 : top 100,30 : left 100,30      : ' OK
'  edit 100 : top 100,30 : left 100,30      : ' OK
'  button 100 : top 100,30 : left 100,30    : ' OK sans color
'  container 100 : top 100,30 : left 100,30  : ' OK sans color
  width 100,400 : height 100,300
  if object_type(100)<>27
    if object_type(100)<>2
      if object_type(100)<>23
        color 100,200,200,255
      end_if
    end_if
  end_if
  edit 101 : hide 101 : on_change 101,une_zone_est_clickee
  form 10 : left 10,700 : top 10,30 : width 10,300
  memo 11 : parent 11,10 : top 11,10 : left 11,10 : width 11,260
  return
 
une_zone_est_clickee:
  clear 11
  item_add 11,"clic sur objet "+str$(ZS_clicked%)
  item_add 11,"  zone ("+str$(ZS_zones%(ZS_j%,2))+","+str$(ZS_zones%(ZS_j%,3))+"/"+str$(ZS_zones%(ZS_j%,4))+","+str$(ZS_zones%(ZS_j%,5))+")"
  item_add 11,"  identifiant="+str$(ZS_zones%(ZS_j%,6))
' ************* placer ICI le code application
' ...
' ************* fin du code application
  return

' =================== routines su système ZS
'        tout ce qui suit, est à copier dans un programme application
'        ou à inclure par #INCLUDE

' *** definir les labels internes
ZS_labels:
  label ZS_ajouter, ZS_signaler, ZS_desactiver
  label ZS_activer, ZS_raz, ZS_retirer
  label ZS_variables, ZS_click, ZS_trouver
  return

' *** définir les variables internes
ZS_variables:
  dim ZS_n% : ZS_n% = 0--1  : ' numéro d'objet ciblé (-1=rien)
  dim ZS_xy%(4)              : ' (0)=x1  (1)=y1  (2)=x2  (3)=y2 (4)=identifiant
  dim ZS_n_objets%          : ' nombre d'objets surveillés
  dim ZS_objets%(50)        : ' liste de sobjets surveillés
  dim ZS_n_zones%            : ' nombre de zones ciblées
  dim ZS_zones%(200,6)      : '  (x,0) flag actif/inactif
                              '  (x,1) numéro d'objet à surveiller
                              '  (x,1)=x1  (x,2)=y1  (x,3)=x2  (x,4)=y2
                              '  (x,6)=identifiant de zone
  dim ZS_clicked%            : ' numéro de l'objet clické
  dim ZS_x%, ZS_y%          : ' coordonnées d'un clic
  dim ZS_i%, ZS_j%, ZS_res%  : ' variable de travail
  dim ZS_signal%            : ' numéro d'objet pour signaler un clic
  return

' routine interface - initialiser le système ZS
ZS_init:
  if label("ZS_labels")=0
    label ZS_labels
    gosub ZS_labels
    gosub ZS_variables
  end_if
  return

' routine interface - remse à zero du système ZS
ZS_raz:
  if ZS_n_objets%>=0
    for ZS_i%=1 to ZS_n_objets%
      off_click ZS_objets%(ZS_i%)
    next ZS_i%
  end_if
  ZS_n% = 0-1
  ZS_n_objets% = 0
  ZS_n_zones% = 0
  return
 
' routine interface - ajouter une zone sensitive
ZS_ajouter:
  gosub ZS_trouver
  if ZS_res%=0
    ZS_n_objets% = ZS_n_objets%+1
    ZS_objets%(ZS_n_objets%) = ZS_n%
  end_if
  ZS_n_zones% = ZS_n_zones%+1
  ZS_zones%(ZS_n_zones%,0) = ZS_n%
  ZS_zones%(ZS_n_zones%,1) = 1
  ZS_zones%(ZS_n_zones%,2) = ZS_xy%(0)
  ZS_zones%(ZS_n_zones%,3) = ZS_xy%(1)
  ZS_zones%(ZS_n_zones%,4) = ZS_xy%(2)
  ZS_zones%(ZS_n_zones%,5) = ZS_xy%(3)
  ZS_zones%(ZS_n_zones%,6) = ZS_xy%(4)
  if ZS_res%=0 then on_click ZS_n%,ZS_click
  return
 
' routine interface - établir le lien vers un EDIT de signalisation
ZS_signaler:
  if ZS_n%>0
    if object_exists(ZS_n%)=1
      if object_type(ZS_n%)=3 then ZS_signal% = ZS_n%
    end_if
    ZS_signal% = ZS_n%
  else
    ZS_signal% = 0
  end_if
  return
 
' routine interface - désactiver une zone sensitive
ZS_desactiver:
  if ZS_n_zones%=0 then return
  for ZS_i%=1 to ZS_n_zones%
    if ZS_zones%(ZS_i%,6)=ZS_n%
      ZS_zones%(ZS_i%,1) = 0
      return
    end_if
  next ZS_i%
  return
 
' routine interface - réactiver une zone sensitive désactivée
ZS_activer:
  if ZS_n_zones%=0 then return
  for ZS_i%=1 to ZS_n_zones%
    if ZS_zones%(ZS_i%,6)=ZS_n%
      ZS_zones%(ZS_i%,1) = 1
      return
    end_if
  next ZS_i%
  return

' routine interface - retirer une zone sensitive
ZS_retirer:
  if ZS_n_zones%=0 then return
  for ZS_i%=1 to ZS_n_zones%
    if ZS_zones%(ZS_i%,6)=ZS_n%
      if ZS_i%<ZS_n_zones%
        for ZS_j%=1 to ZS_i%-1
          ZS_zones%(ZS_j%,0) = ZS_zones%(ZS_j%+1,0)
          ZS_zones%(ZS_j%,1) = ZS_zones%(ZS_j%+1,1)
          ZS_zones%(ZS_j%,2) = ZS_zones%(ZS_j%+1,2)
          ZS_zones%(ZS_j%,3) = ZS_zones%(ZS_j%+1,3)
          ZS_zones%(ZS_j%,4) = ZS_zones%(ZS_j%+1,4)
          ZS_zones%(ZS_j%,5) = ZS_zones%(ZS_j%+1,5)
          ZS_zones%(ZS_j%,6) = ZS_zones%(ZS_j%+1,6)
        next ZS_j%
      end_if
      ZS_n_zones% = ZS_n_zones% - 1
      return
    end_if
  next ZS_i%

  return
 
' routine interne - chercher un objet dans table
ZS_trouver:
  for ZS_i%=1 to ZS_n_objets%
    if ZS_objets%(ZS_i%)=ZS_n%
      ZS_res% = ZS_i%
      return
    end_if
  next ZS_i%
  ZS_res% = 0
  return
 
' routine interne - routine click dans un objet géré par ZS
ZS_click:
  for ZS_i%=1 to ZS_n_objets%
    if clicked(ZS_objets%(ZS_i%))=1
      ZS_clicked% = ZS_objets%(ZS_i%)
      ZS_x% = mouse_x_left_down(ZS_clicked%)
      ZS_y% = mouse_y_left_down(ZS_clicked%)
      for ZS_j%=1 to ZS_n_zones%
          if ZS_zones%(ZS_j%,0)=ZS_clicked%
            if ZS_zones%(ZS_j%,1)=1
              if ZS_zones%(ZS_j%,2)<ZS_x%
                if ZS_zones%(ZS_j%,3)<ZS_y%
                  if ZS_zones%(ZS_j%,4)>ZS_x%
                    if ZS_zones%(ZS_j%,5)>ZS_y%
'                      message "clic sur objet "+str$(ZS_clicked%)+" zone ("+str$(ZS_zones%(ZS_j%,2))+","+str$(ZS_zones%(ZS_j%,3))+"/"+str$(ZS_zones%(ZS_j%,4))+","+str$(ZS_zones%(ZS_j%,5))+") identifiant="+str$(ZS_zones%(ZS_j%,6))
                      ZS_xy%(0) = ZS_zones%(ZS_j%,2)
                      ZS_xy%(1) = ZS_zones%(ZS_j%,3)
                      ZS_xy%(2) = ZS_zones%(ZS_j%,4)
                      ZS_xy%(3) = ZS_zones%(ZS_j%,5)
                      ZS_xy%(4) = ZS_zones%(ZS_j%,6)
                      if ZS_signal%>0 then text ZS_signal%,str$(ZS_zones%(ZS_j%,6))
                      return
                    end_if
                  end_if
                end_if
              end_if
            end_if
          end_if
      next ZS_j%
      return
    end_if
  next ZS_i%
  return
 
 
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
exdragon

exdragon


Nombre de messages : 601
Date d'inscription : 05/01/2012

Zones sensitives sur un objet Panoramic Empty
MessageSujet: Re: Zones sensitives sur un objet Panoramic   Zones sensitives sur un objet Panoramic EmptyVen 3 Fév 2012 - 4:14

Lol, trop hardu pour moi Wink

En tous cas, bravo de savoir faire un truc pareil !!!
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Zones sensitives sur un objet Panoramic Empty
MessageSujet: Re: Zones sensitives sur un objet Panoramic   Zones sensitives sur un objet Panoramic EmptySam 4 Fév 2012 - 21:14

Encore un autre beau programme...
Revenir en haut Aller en bas
Contenu sponsorisé





Zones sensitives sur un objet Panoramic Empty
MessageSujet: Re: Zones sensitives sur un objet Panoramic   Zones sensitives sur un objet Panoramic Empty

Revenir en haut Aller en bas
 
Zones sensitives sur un objet Panoramic
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» L'objet SYNDEDIT de Panoramic
» Panoramic IDE : supprimer un objet
» Lecture d'un objet externe à Panoramic.
» Click sur un objet externe a Panoramic
» Détermine si oui ou non un objet est PARENT d'un autre objet

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: