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
» mise a jour calculatrice
par JL35 Aujourd'hui à 14:14

» [solved] 3D_LINE How to ?
par papydall Aujourd'hui à 6:51

» supprimé
par joeeee2017 Dim 15 Oct 2017 - 20:02

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» Convertisseur de base 10 de 2 à 36
par gigi75 Sam 14 Oct 2017 - 21:54

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» supprimé
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

» Un petit "coucou" à tous les Panoramiciens !
par Jack Ven 6 Oct 2017 - 10:24

» Pourquoi le compilateur stagne
par mindstorm Mer 4 Oct 2017 - 20:38

» Panoramic ?
par Marc37 Mer 4 Oct 2017 - 0:39

» Premiers pas avec Arduino
par Marc37 Mer 4 Oct 2017 - 0:29

» Mise à jour PANOMAND
par jean_debord Mar 26 Sep 2017 - 11:33

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 clic droit sans DLL(simuler ON_RIGHT_CLICK)

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

avatar

Nombre de messages : 466
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: clic droit sans DLL(simuler ON_RIGHT_CLICK)   Ven 10 Avr 2015 - 18:31

Bonjour à tous,

je sais que Klaus à ajouté cette possibilité dans sa DLL, mais je voulais en faire une version sans DLL(la Nième, sans doute Very Happy ), histoire de m'entraîner en langage Panoramic.
A tester sans modération drunken

Code:

' Panoramic 0.9.25
'
'
' Emuler ON_CLICK_RIGHT sans DLL
'
'
' Le numéro de l'objet cliqué est contenu dans la variable OBJECT_CLICKED
' sauf pour: OPEN_DIALOG/SAVE_DIALOG/MAIN_MENU/SUB_MENU/SOUND (retourne -1)
'
'
' V1.0
'
' Silverman, avril 2015



' Variables/label nécessaire à la routine
dim scankey,oldscankey,check_object,OBJECT_CLICKED,type_object,maxobj,right_clic
' Attention de ne pas oublier d'ajouter des "case V" dans
' la routine CHECK_RIGHT_CLICK
label CHECK_RIGHT_CLICK
' Tester le clic droit 20 fois par seconde
timer 1 : timer_interval 1,50 : on_timer 1,CHECK_RIGHT_CLICK


' Le code:

'
' Des objets...
'
label incompatible,objet,numero,autre

main_menu 11  : ' Erreur(traité)
sub_menu 12  : ' Erreur(traité)
parent 12,11
caption 12,"Fichier"


alpha 100
top 100,200 : left 100,0
caption 100,"Scene2d (alpha)"

button 101
top 101,20 : left 101,0
caption 101,"Bouton"

check 102
top 102,60 : left 102,0
caption 102,"Check"

container 103
top 103,90 : left 103,0
caption 103,"Container"

container_option 104  : ' Numéro non détecté pour ce type d'objet
top 104,90 : left 104,190
caption 104,"Container Options"
option 105 : parent 105,104
top 105,24 : left 105,12 : caption 105,"OptionA"
option 106 : parent 106,104
top 106,48 : left 106,12 : caption 106,"OptionB"

combo 107  : ' Numéro non détecté pour ce type d'objet
top 107,23 : left 107,90
text 107,"Combo"

' dlist  : ' objet invisible

edit 108
top 108,23 : left 108,250
text 108,"Edit"

' SECOND FORM : DEBUT
form 208
width 208,640 : height 208,480
top 208,280 : left 208,450

command_target_is 208

grid 209
grid_write 209,1,1,"Grid"
hint 209,"Ceci est un HINT"

hviewer 210  : ' Numéro non détecté pour ce type d'objet
top 210,30 : left 210,380
alpha 211
top 211,10 : left 211,380
caption 211,"Hviewer"

' image 320  : ' objet invisible
' 2d_image_copy 320,0,0,100,100

list 212
top 212,140 : left 212,130
item_add 212,"Liste"

memo 213
top 213,140 : left 213,280
item_add 213,"Memo"

movie 214  : ' Numéro non détecté pour ce type d'objet
color 214,255,255,255
top 214,280 : left 214,0
alpha 215
top 215,260 : left 215,0
caption 215,"Movie"

' open dialog  : ' Erreur(traité)

option 216
top 216,150 : left 216,500
caption 216,"Option"

panel 217
top 217,250 : left 217,130
caption 217,"Panel"

picture 218
top 218,140 : left 218,0
print_target_is 218
print "picture"
print_target_is 0

progress_bar 219
top 219,290 : left 219,350
alpha 220
top 220,270 : left 220,350
caption 220,"Progress bar"


' SECOND FORM : FIN
command_target_is 0

' save dialog  : ' Erreur(traité)

scene2d 315
top 315,220 : left 315,0

scene3d 316
top 316,10 : left 316,380
' print_target_is 316
' print "Scene3d"
3d_text 316,"Scene3d"
cam_z_position 10
' print_target_is 0

scroll_bar 317  : ' Numéro non détecté pour ce type d'objet
top 317,240 : left 317,240

' sound  : ' Erreur(traité)

spin 318
top 318,300 : left 318,240

' sprite 319  : ' L'objet ne répond pas au clic droit
' sprite_image_load 319,320

track_bar 321  : ' Numéro non détecté pour ce type d'objet
top 321,360 : left 321,240


'
alpha 322
top 322,220 : left 322,240
caption 322,"Scroll bar (alpha)"
'
alpha 323
top 323,280 : left 323,240
caption 323,"Spin (alpha)"
'
alpha 324
top 324,340 : left 324,240
caption 324,"Track bar (alpha)"



END

CHECK_RIGHT_CLICK:
timer_off 1
  ' On boucle jusqu'au numéro d'objet le plus élevé, donc faire attention
  ' a ne pas utiliser des numéro trop grand. L'ideal si le nombre d'objet
  ' ne varie pas, serait de les lister dans un tableau pour pouvoir les
  ' scanner encore plus rapidement.
  ' Non traité : lorsque l'on clique droit sur un objet d'un FORM et que
  ' l'on déclique sur l'autre FORM, le numéro renvoyé n'est pas toujours
  ' correct. Le code n'est pas conçu pour cette éventualité.
  ' (A voir avec avec mouse_x_right_down()).
  '
  '
  ' Pour un maximum de rapidité, on entre dans le IF si et seulement si le
  ' bouton droit de la souris viens juste d'être relâché.
  ' Du coup, le timer ne ralenti pas le code, peu importe le nombre d'objet.
  '
  oldscankey=scankey : scankey=scancode
  ' Clic droit ?
  if scankey=0 and oldscankey=2
      check_object=-1
      maxobj=-1
      OBJECT_CLICKED=-1
      repeat
        ' Début du scan
        check_object=check_object+1
        if object_exists(check_object)=1
            ' Comptage du nb d'objet
            maxobj=maxobj+1
            type_object=object_type(check_object)
            ' MOUSE_RIGHT_UP = erreur si objets de type 12,13,14,17,18
            if type_object>11 and type_object<19
              if type_object>14 and type_object<17
                  ' bin_or pour éviter les "pertes" de clics
                  right_clic=bin_or(mouse_right_up(check_object),mouse_right_down(check_object))
                  if right_clic>0 then OBJECT_CLICKED=check_object
              end_if
            else
              if type_object<>-1
                  ' bin_or pour éviter les "pertes" de clics
                  right_clic=bin_or(mouse_right_up(check_object),mouse_right_down(check_object))
                  if right_clic>0 then OBJECT_CLICKED=check_object
              end_if
            end_if
        end_if
      ' Arret du scan dès qu'un clic droit est détecté ou tous les objets scannés
      until right_clic>0 or maxobj=number_objects

      '
      '
      ' Traitement du clic
      ' ON_RIGHT_CLICK simulé, maintenant il faut choisir le sous-programme en
      ' fonction de l'objet cliqué.(Seulement 3 sous-programmes pour cette démo)
      select OBJECT_CLICKED
        case -1 : gosub incompatible
        case 0 : gosub objet
        case 1 : gosub objet
        case 2 : gosub objet
        case 100 : gosub objet
        case 101 : gosub objet
        case 102 : gosub objet
        case 103 : gosub objet
        case 104 : gosub objet
        case 105 : gosub objet
        case 106 : gosub objet
        case 107 : gosub objet
        case 108 : gosub objet
        case 208 : gosub autre
        case 209 : gosub autre
        case 210 : gosub autre
        case 211 : gosub autre
        case 212 : gosub autre
        case 213 : gosub autre
        case 214 : gosub autre
        case 215 : gosub autre
        case 216 : gosub autre
        case 217 : gosub autre
        case 218 : gosub autre
        case 219 : gosub autre
        case 220 : gosub autre
        case 315 : gosub numero
        case 316 : gosub numero
        case 317 : gosub numero
        case 318 : gosub numero
        case 319 : gosub numero
        case 320 : gosub numero
        case 321 : gosub numero
        case 322 : gosub numero
        case 323 : gosub numero
        case 324 : gosub numero
      end_select
  end_if
timer_on 1
return


' Exemple
incompatible:
  ' Affichage
  cls
  print "Le numéro de ce type d'objet n'est pas détecté!"
return


objet:
  ' Affichage
  cls
  print "Sous programme 1 : Numéro Objet = ";OBJECT_CLICKED
return


numero:
  ' Affichage
  cls
  print "Sous programme 2 : Numéro Objet = ";OBJECT_CLICKED
return


autre:
  ' Affichage
  cls
  print "Sous programme 3 : Numéro Objet = ";OBJECT_CLICKED
return

EDIT : Oups, c'est ON_RIGHT_CLICK que j'ai voulu simuler, corrigé le titre du sujet


Dernière édition par silverman le Sam 11 Avr 2015 - 12:43, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5537
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: clic droit sans DLL(simuler ON_RIGHT_CLICK)   Sam 11 Avr 2015 - 2:35

silverman a écrit:
A tester sans modération  

Donc, je teste sans savoir ce à quoi je m’attendrais !
Le résultat est un bon plantage, on ne peut plus total !
Après, je veux savoir le pourquoi du comment.
Et voici mon diagnostic :

Ligne 141
Code:
 print_target_is 316
L’objet 316 est un scene3d.

Or  la commande PRINT_TARGET_IS ne s’applique qu’à EDIT, MEMO, COMBO, FORM, LIST, PICTURE

d'où l'erreur : Characters are too large or too many. Unable to create font texture.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
papydall

avatar

Nombre de messages : 5537
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: clic droit sans DLL(simuler ON_RIGHT_CLICK)   Sam 11 Avr 2015 - 4:01

Bon, j’ai compris enfin le but du programme.
Maintenant, analysons ensemble :
Code:
objet:
   ' Affichage
   cls
   print "Objet = ";OBJECT_CLICKED
return

numero:
   ' Affichage
   cls
   print "Objet = ";OBJECT_CLICKED
return

autre:
   ' Affichage
   cls
   print "Objet = ";OBJECT_CLICKED
return

Ces trois sous-programmes sont absolument identiques, alors on peut les réduire à un seul !
Et même s'en passer carrément.

Code:

select OBJECT_CLICKED
         case -1 : gosub incompatible
         case 0 : gosub objet
         case 1 : gosub objet
         case 2 : gosub objet
         case 100 : gosub objet
         case 101 : gosub objet
         case 102 : gosub objet
         case 103 : gosub objet
         case 104 : gosub objet
         case 105 : gosub objet
         case 106 : gosub objet
         case 107 : gosub objet
         case 108 : gosub objet
         case 208 : gosub autre
         case 209 : gosub autre
         case 210 : gosub autre
         case 211 : gosub autre
         case 212 : gosub autre
         case 213 : gosub autre
         case 214 : gosub autre
         case 215 : gosub autre
         case 216 : gosub autre
         case 217 : gosub autre
         case 218 : gosub autre
         case 219 : gosub autre
         case 220 : gosub autre
         case 315 : gosub numero
         case 316 : gosub numero
         case 317 : gosub numero
         case 318 : gosub numero
         case 319 : gosub numero
         case 320 : gosub numero
         case 321 : gosub numero
         case 322 : gosub numero
         case 323 : gosub numero
         case 324 : gosub numero
      end_select

Ici, on énumère tous les objets, et quelque soit l’objet, on se branche à l’un des trois sous-programmes qui sont (rappelons-le) identiques.
On peut s’en passer carrément de cette série de CASE.
Personnellement je n’aime pas trop la commande PRINT (et moins encore les LABEL , l’affreuse commande GOTO et un peu moins GOSUB) à quelques cas particuliers près !.
D’ailleurs tous ces PRINT ne seront pas visibles parce que ce qu’elles sont censées afficher sera caché par les différents objets définis dans le programme.

D’une manière générale, au lieu de PRINT, j’utilise personnellement  ALPHA et aussi MESSAGE ; mais chacun est bien sûr, libre de coder comme bon lui semble !

Voici mon résultat final de simplification du code.
Tu peux l'adopter ou non : ce n'est qu'une autre façon de raisonner.

Code:

' Panoramic 0.9.25
'
'
' Emuler ON_CLICK_RIGHT sans DLL
'
'
' Le numéro de l'objet cliqué est contenu dans la variable OBJECT_CLICKED
' sauf pour: OPEN_DIALOG/SAVE_DIALOG/MAIN_MENU/SUB_MENU/SOUND (retourne -1)
'
'
' V1.0
'
' Silverman, avril 2015



' Variables/label nécessaire à la routine
dim scankey,oldscankey,check_object,OBJECT_CLICKED,type_object,maxobj,right_clic
' Attention de ne pas oublier d'ajouter des "case V" dans
' la routine CHECK_RIGHT_CLICK
label CHECK_RIGHT_CLICK
' Tester le clic droit 20 fois par seconde
 timer 1 : timer_interval 1,50 : on_timer 1,CHECK_RIGHT_CLICK


' Le code:

'
' Des objets...
'


main_menu 11   : ' Erreur(traité)
sub_menu 12   : ' Erreur(traité)
parent 12,11
caption 12,"Fichier"


alpha 100
top 100,200 : left 100,0
caption 100,"Scene2d (alpha)"

button 101
top 101,20 : left 101,0
caption 101,"Bouton"

check 102
top 102,60 : left 102,0
caption 102,"Check"

container 103
top 103,90 : left 103,0
caption 103,"Container"

container_option 104   : ' Numéro non détecté pour ce type d'objet
top 104,90 : left 104,190
caption 104,"Container Options"
option 105 : parent 105,104
top 105,24 : left 105,12 : caption 105,"OptionA"
option 106 : parent 106,104
top 106,48 : left 106,12 : caption 106,"OptionB"

combo 107   : ' Numéro non détecté pour ce type d'objet
top 107,23 : left 107,90
text 107,"Combo"

' dlist   : ' objet invisible

edit 108
top 108,23 : left 108,250
text 108,"Edit"

' SECOND FORM : DEBUT
form 208
width 208,640 : height 208,480
top 208,280 : left 208,450

command_target_is 208

grid 209
grid_write 209,1,1,"Grid"
hint 209,"Ceci est un HINT"

hviewer 210   : ' Numéro non détecté pour ce type d'objet
top 210,30 : left 210,380
alpha 211
top 211,10 : left 211,380
caption 211,"Hviewer"

' image 320  : ' objet invisible
' 2d_image_copy 320,0,0,100,100

list 212
top 212,140 : left 212,130
item_add 212,"Liste"

memo 213
top 213,140 : left 213,280
item_add 213,"Memo"

movie 214   : ' Numéro non détecté pour ce type d'objet
color 214,255,255,255
top 214,280 : left 214,0
alpha 215
top 215,260 : left 215,0
caption 215,"Movie"

' open dialog   : ' Erreur(traité)

option 216
top 216,150 : left 216,500
caption 216,"Option"

panel 217
top 217,250 : left 217,130
caption 217,"Panel"

picture 218
top 218,140 : left 218,0
' print_target_is 218
' print "picture"
print_target_is 0

progress_bar 219
top 219,290 : left 219,350
alpha 220
top 220,270 : left 220,350
caption 220,"Progress bar"


' SECOND FORM : FIN
command_target_is 0

' save dialog   : ' Erreur(traité)

scene2d 315 : hint 315,"Scene2D"
top 315,220 : left 315,0

scene3d 316
top 316,10 : left 316,380  : hint 316,"Scene3D"
' print_target_is 316
print "Scene3d"
print_target_is 0

scroll_bar 317   : ' Numéro non détecté pour ce type d'objet
top 317,240 : left 317,240

' sound   : ' Erreur(traité)

spin 318
top 318,300 : left 318,240

' sprite 319   : ' L'objet ne répond pas au clic droit
' sprite_image_load 319,320

track_bar 321   : ' Numéro non détecté pour ce type d'objet
top 321,360 : left 321,240


'
alpha 322
top 322,220 : left 322,240
caption 322,"Scroll bar (alpha)"
'
alpha 323
top 323,280 : left 323,240
caption 323,"Spin (alpha)"
'
alpha 324
top 324,340 : left 324,240
caption 324,"Track bar (alpha)"



END

CHECK_RIGHT_CLICK:

timer_off 1
   ' On boucle jusqu'au numéro d'objet le plus élevé, donc faire attention
   ' a ne pas utiliser des numéro trop grand. L'ideal si le nombre d'objet
   ' ne varie pas, serait de les lister dans un tableau pour pouvoir les
   ' scanner encore plus rapidement.
   ' Non traité : lorsque l'on clique droit sur un objet d'un FORM et que
   ' l'on déclique sur l'autre FORM, le numéro renvoyé n'est pas toujours
   ' correct. Le code n'est pas conçu pour cette éventualité.
   ' (A voir avec avec mouse_x_right_down()).
   '
   '
   ' Pour un maximum de rapidité, on entre dans le IF si et seulement si le
   ' bouton droit de la souris viens juste d'être relâché.
   ' Du coup, le timer ne ralenti pas le code, peu importe le nombre d'objet.
   '
   oldscankey=scankey : scankey=scancode
   ' Clic droit ?
   if scankey=0 and oldscankey=2
      check_object=-1
      maxobj=-1
      OBJECT_CLICKED=-1
      repeat
         ' Début du scan
         check_object=check_object+1
         if object_exists(check_object)=1
            ' Comptage du nb d'objet
            maxobj=maxobj+1
            type_object=object_type(check_object)
            ' MOUSE_RIGHT_UP = erreur si objets de type 12,13,14,17,18
            if type_object>11 and type_object<19
               if type_object>14 and type_object<17
                  ' bin_or pour éviter les "pertes" de clics
                  right_clic=bin_or(mouse_right_up(check_object),mouse_right_down(check_object))
                  if right_clic>0 then OBJECT_CLICKED=check_object
               end_if
            else
               if type_object<>-1
                  ' bin_or pour éviter les "pertes" de clics
                  right_clic=bin_or(mouse_right_up(check_object),mouse_right_down(check_object))
                  if right_clic>0 then OBJECT_CLICKED=check_object
               end_if
            end_if
         end_if
      ' Arret du scan dès qu'un clic droit est détecté ou tous les objets scannés
      until right_clic>0 or maxobj=number_objects

      '
      '
      ' Traitement du clic
      message "Objet = " + str$(OBJECT_CLICKED)

   end_if
timer_on 1
return

Pour conclure :
Ton code comme tu l'as écrit est très bien pour quelqu'un qui vient  de découvrir PANORAMIC depuis peu.
Les remarques que j'ai faites c'est pour te montrer une autre façon de programmer et d'échanger nos points de vue.
Bonne programmation avec Panoramic!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jean Claude

avatar

Nombre de messages : 5032
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: clic droit sans DLL(simuler ON_RIGHT_CLICK)   Sam 11 Avr 2015 - 8:59

J'ai eu droit au même plantage, mais je n'ai pas cherché. J'ai pas le temps actuellement.
Je vois que Silverman, commence à goûter la programmation avec Panoramic Very Happy
Au début, tu vas devoir t'entêter un peu, mais çà viendra.

Les remarques de Papydall sont justes, sauf:
Papydall a écrit:
Personnellement je n’aime pas trop la commande PRINT (et moins encore les LABEL , l’affreuse commande GOTO et un peu moins GOSUB) à quelques cas particuliers près !.

Je ne suis pas d'accord pour LABEL. Ou alors, explique comment tu gères les événements ON_CLICK, ON_CHANGE, et j'en passe, sans utiliser les LABEL(s).

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 466
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: clic droit sans DLL(simuler ON_RIGHT_CLICK)   Sam 11 Avr 2015 - 12:42

Le titre du sujet n'étant pas très clair, j'ai corrigé  Embarassed

@papydall
Le but du programme est écrit en ligne 4 Neutral
Citation :

Ligne 141

Code:
    print_target_is 316


L’objet 316 est un scene3d.
C'est étrange, ça fonctionne parfaitement sur mon PC, même avec la version 0.9.26i5(je suis sous windows XP, ce serait donc un pb d'OS? ). Et le print "Scene3d" s'affiche correctement. J'aurais dû utiliser 3d_text, je vais corriger ça.
La série de case est volontaire(puisqu'on simule ON_RIGHT_CLICK), au départ il n'y avait que 3 objets(c'est pour ça qu'il y a 3 sous-programmes), puis j'en ai ajouté d'autre pour découvrir, et encore d'autre... Smile

@Jean Claude
Citation :

Je vois que Silverman, commence à goûter la programmation avec Panoramic
Au début, tu vas devoir t'entêter un peu, mais çà viendra.
Je confirme, mais si Panoramic réagit différemment en fonction de l'OS, je n'ai pas fini de m'entêter Laughing

@tous
Code édité dans mon premir post, avec ajout de commentaires et suppression de la commande qui créé le plantage.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: clic droit sans DLL(simuler ON_RIGHT_CLICK)   

Revenir en haut Aller en bas
 
clic droit sans DLL(simuler ON_RIGHT_CLICK)
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» comment faire clic droit et mon pseudo apparait
» probleme avec les cellules d'excel sur la mise en forme
» [Résolu] pble multiples avec avira
» Bug suite à la mise à jour 10.0.45.2 du player flash résolu
» Resize et compression automatique pour l'envoi par email

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos projets-
Sauter vers: