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 navale SM
Un menu contextuel [résolu] - Page 2 Emptypar jjn4 Aujourd'hui à 17:39

» Une calculatrice en une ligne de programme
Un menu contextuel [résolu] - Page 2 Emptypar jean_debord Aujourd'hui à 8:01

» Gestion d'un système client-serveur.
Un menu contextuel [résolu] - Page 2 Emptypar Pedro Hier à 19:31

» Les maths du crocodile
Un menu contextuel [résolu] - Page 2 Emptypar jean_debord Hier à 10:37

» Naissance de Crocodile Basic
Un menu contextuel [résolu] - Page 2 Emptypar jean_debord Hier à 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Un menu contextuel [résolu] - Page 2 Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
Un menu contextuel [résolu] - Page 2 Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Un menu contextuel [résolu] - Page 2 Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Un menu contextuel [résolu] - Page 2 Emptypar papydall Dim 21 Avr 2024 - 23:30

» Form
Un menu contextuel [résolu] - Page 2 Emptypar leclode Dim 21 Avr 2024 - 18:09

» trop de fichiers en cours
Un menu contextuel [résolu] - Page 2 Emptypar Marc Dim 21 Avr 2024 - 2:41

» 2D_fill_color(résolu)
Un menu contextuel [résolu] - Page 2 Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Un menu contextuel [résolu] - Page 2 Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
Un menu contextuel [résolu] - Page 2 Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Un menu contextuel [résolu] - Page 2 Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
-45%
Le deal à ne pas rater :
WHIRLPOOL OWFC3C26X – Lave-vaisselle pose libre 14 couverts – ...
339 € 622 €
Voir le deal

 

 Un menu contextuel [résolu]

Aller en bas 
+2
papydall
Minibug
6 participants
Aller à la page : Précédent  1, 2
AuteurMessage
papydall

papydall


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

Un menu contextuel [résolu] - Page 2 Empty
MessageSujet: Re: Un menu contextuel [résolu]   Un menu contextuel [résolu] - Page 2 EmptySam 27 Aoû 2016 - 22:16

Salut tout le monde.
Toutes ces idées, tous ces codes, toutes ces remarques, etc. sont bons (bonnes), mais je ne vois pas (bien que j’eusse chaussé mes lunettes  Cool ) le lien entre le sujet « Un menu contextuel (sans bizarrerie) » et la rubrique « Un bug dans PANORAMIC ? »  tongue
N’est-il pas mieux que ce soit dans « Vos sources, vos utilitaires à partager » ou bien dans « Présentation et bavardage » ?

ça va, OK, je sors …
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Un menu contextuel [résolu] - Page 2 Empty
MessageSujet: Re: Un menu contextuel [résolu]   Un menu contextuel [résolu] - Page 2 EmptyDim 28 Aoû 2016 - 0:08

bonsoir Papydall !

Comme tu l'as constaté dans les premiers posts ou tu as d'ailleurs participé, il y avait un dysfonctionnement dans le programme. Depuis celui-ci est corrigé.

Voila le pourquoi du comment !
Maintenant si tu sors... tu sais pourquoi. lol! lol! lol!
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
silverman

silverman


Nombre de messages : 968
Age : 51
Localisation : Picardie
Date d'inscription : 18/03/2015

Un menu contextuel [résolu] - Page 2 Empty
MessageSujet: Re: Un menu contextuel [résolu]   Un menu contextuel [résolu] - Page 2 EmptyLun 29 Aoû 2016 - 13:01

Je sais qu'il y a la dll de Klaus, mais le challenge était de le faire en panoramic pur.
En voici la version final que je vais intégrer au menu contextuel:
Code:
dim souris0X% , souris0Y% , souris101X% , souris101Y%
dim oldsouris0X% , oldsouris0Y% , oldsouris101X% , oldsouris101Y%
dim mov1% , dans_le_menu%
dim testa% , testb% , testc% , testd% , teste% , otestf% , testf%

dim cpt%
dim debug%

label menu2 , menu1


full_space 0

panel 101 : top 101,500 : left 101,900  : on_click 101,menu1


' debug
form 999 : top 999,35 : left 999,1500 : WIDTH 999,400 : height 999,400
'
for debug%=1000 to 1012
alpha debug% : top debug%,(debug%-1000)*20 : left debug%,5 : parent debug%,999
next debug%
'
picture 2010 : parent 2010,999 : left 2010,200 :2d_target_is 2010 : ' picture qui indique si on est dans le panel par changement de couleur

'
TIMER 15 : timer_interval 15,50 : ON_TIMER 15,menu2
END

menu2:
timer_off 15

  souris0X%=MOUSE_X_POSITION(0) : souris0Y%=MOUSE_Y_POSITION(0)
  souris101X%=MOUSE_X_POSITION(101) : souris101Y%=MOUSE_Y_POSITION(101)


  if (((souris0X%-oldsouris0X%)>=0) and (souris0X%<=left(101)))
    testa%=1
  else
    testa%=0
  end_if

  if (((souris0X%-oldsouris0X%)<=0) and (souris0X%>=(left(101)+width(101))))
    testb%=2
  else
    testb%=0
  end_if

  if (((souris0Y%-oldsouris0Y%)>=0) and (souris0Y%<=top(101)))
    testc%=4
  else
    testc%=0
  end_if

  if (((souris0Y%-oldsouris0Y%)<=0) and (souris0Y%>=(top(101)+height(101))))
    testd%=8
  else
    testd%=0
  end_if

  ' utile seulement dans le cas ou l'on deplace le panel sous la souris
  if (souris0X%>left(101)) and (souris0X%<(left(101)+width(101))) and (souris0Y%>top(101)) and  (souris0Y%<(top(101)+height(101)))
    teste%=16
  else
    teste%=0
  end_if

  testf%=testa%+testb%+testc%+testd%+teste%


  IF ( oldsouris101X% <> souris101X% ) OR ( oldsouris101Y% <> souris101Y% )
      dans_le_menu% = 1
      mov1%=1
  END_IF


  if testf%<>otestf%
      if mov1%=0 or testf%=0
        dans_le_menu% = 0
      end_if
  end_if


  if dans_le_menu% = 1
      color 2010 , 0 , 255 , 0
  else
      color 2010 , 255 , 0 , 0
  end_if


  '
  oldsouris0X% = souris0X% : oldsouris0Y% = souris0Y%
  oldsouris101X% = souris101X% : oldsouris101Y% = souris101Y%
  mov1%=0
  otestf%=testf%
timer_on 15
return

menu1:
  cpt%=cpt%+1
  caption 0,"panel 101 cliqué "+str$(cpt%)+" fois"
  to_foreground 999
return
Ce n'est pas idéal, car ça marche que si le form 0 est vide.


Dernière édition par silverman le Mar 30 Aoû 2016 - 11:56, édité 1 fois
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Un menu contextuel [résolu] - Page 2 Empty
MessageSujet: Re: Un menu contextuel [résolu]   Un menu contextuel [résolu] - Page 2 EmptyLun 29 Aoû 2016 - 20:04

Wait and see... Wink
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
silverman

silverman


Nombre de messages : 968
Age : 51
Localisation : Picardie
Date d'inscription : 18/03/2015

Un menu contextuel [résolu] - Page 2 Empty
MessageSujet: Re: Un menu contextuel [résolu]   Un menu contextuel [résolu] - Page 2 EmptyMar 30 Aoû 2016 - 21:37

Voilà!
Code:
' panoramic 0927i8 / windows XP
'
' menu contextuel
'
'
'
' Silverman , août 2016



' Sans dll, on ne peut pas facilement détecter si un objet qui contient des objets est survolé, ni les numéros d'objets survolés.
'
' Pour cela, la technique employé consiste à superposer 3 objets:
' 1 pour pour détecter le click et la position de la souris(objet caché)
' 1 pour afficher les objets du menu
' 1 pour détecter le numéro des objets(zonage; objet caché)




DATA "Ouvrir fichier" , "Sauvegarder fichier" , "_" , "Fermer fichier" ,"_" ,"Quitter"
DATA "eod"

LABEL menu1 , menu2 , null_menu

dim souris0X% , souris0Y% , souris101X% , souris101Y%
dim oldsouris0X% , oldsouris0Y% , oldsouris101X% , oldsouris101Y%
dim dans_le_menu% , vers_le_panel% , old_vers_le_panel% , force_mouvement%
dim click% , ne_pas_montrer% , ticks_start , pos% , oldpos% , hilite%
DIM nb% , t$ , increment% , objet_valid%
dim context%

full_space 0

context%=97 :' objet context%+1 et context%+2 réservés !!!
panel context%+1 : hide context%+1 : width context%+1,185 : height context%+1,4+(6*20) :' hauteur pour 6 objets de 20 pixels de haut
ON_CLICK context%+1,null_menu :' détecte le click et la position de la souris
'
PANEL context% : parent context%,context%+1 : full_space context% : COLOR context%,240,240,240 : inactive context% :' affiche les objets
picture context%+2 : parent context%+2,context%+1 : full_space context%+2 : inactive context%+2 :' detecte le numéro des objets(zonage)
'
' fabrique le menu contextuel
2d_target_is context%+2
READ t$ : nb%=context%+2
repeat
   nb%=nb%+1
   increment%=increment%+1
   ALPHA nb% : PARENT nb%,context% : FONT_COLOR nb%,0,0,0 : LEFT nb%,5 : TOP nb%,(1+increment%)*20-36 : CAPTION nb%,t$
   FONT_SIZE nb%,9 : FONT_NAME nb%,"Segoe UI"
   ON_CLICK nb%,menu1 :'
   '
   IF t$="_"
      FONT_COLOR nb%,200,200,200 : TOP nb%,(1+increment%)*20-41 : WHILE TEXT_WIDTH(t$,nb%)<WIDTH(context%)-10 : t$=t$+"_" : END_WHILE : CAPTION nb%,t$ : inactive nb%
      objet_valid%=0
   ELSE
      WHILE TEXT_WIDTH(t$,nb%)<WIDTH(context%)-10 : t$=t$+" " : CAPTION nb%,t$ : END_WHILE
      objet_valid%=1
   END_IF
   '
   ' fabrique les zones de click
   2d_fill_color bin_and(nb%,255),bin_and(nb%,65280)/256,objet_valid% : 2d_pen_color bin_and(nb%,255),bin_and(nb%,65280)/256,objet_valid% :' transforme les numéros d'objet en code couleur
   2d_rectangle 5 , 0+(increment%-1)*20 , width(context%+2)-3 , 0-0+(increment%*20)
   '
   READ t$
until lower$(t$)="eod"

CAPTION 0,"Clic de droite sur cette fenêtre pour afficher le menu contextuel..."


TIMER 15 : ON_TIMER 15,menu2
timer_interval 15,50 :' 20 fois par seconde


END
' ##############################################################################

menu1:
TIMER_OFF 15

   click%=number_click
   ' 1ère ligne = context%+3 = 100
   IF click%=100 : ouvrir_fichier() : end_if
   IF click%=101 : sauvegarder_fichier() : end_if
   IF click%=103 : fermer_fichier() : end_if
   IF click%=105 : TERMINATE : end_if

TIMER_ON 15
RETURN



menu2:
TIMER_OFF 15
   ' test de la souris pour déterminer si elle est dans le panel
   souris0X%=MOUSE_X_POSITION(0) : souris0Y%=MOUSE_Y_POSITION(0)
   '
   if show(context%+1)=0
      dans_le_menu% = 0
   else
      '
      souris101X%=MOUSE_X_POSITION(context%+1) : souris101Y%=MOUSE_Y_POSITION(context%+1)
      '
      ' dans le cas ou l'on fait apparaitre le panel sous la souris:
      if (souris0X%>left(context%+1)) and (souris0X%<(left(context%+1)+width(context%+1))) and (souris0Y%>top(context%+1)) and  (souris0Y%<(top(context%+1)+height(context%+1))) :' par defaut, serait-on dans le panel?
         vers_le_panel%=1 :' on vient de cliquer droit, donc on est dedans
      else
         if (((souris0X%-oldsouris0X%)>=0) and (souris0X%<=left(context%+1))) or (((souris0X%-oldsouris0X%)<=0) and (souris0X%>=(left(context%+1)+width(context%+1)))) or (((souris0Y%-oldsouris0Y%)>=0) and (souris0Y%<=top(context%+1))) or (((souris0Y%-oldsouris0Y%)<=0) and (souris0Y%>=(top(context%+1)+height(context%+1)))) :' ou bien s'en approche t-on?
            vers_le_panel%=1 :' oui, on s'en approche(c'est aussi l'état par défaut de la souris si elle ne bouge pas)
         else
            vers_le_panel%=0 :' non, on s'en éloigne
         end_if
      end_if
      '
      IF ( oldsouris101X% <> souris101X% ) OR ( oldsouris101Y% <> souris101Y% ) :' y a t-il un mouvement sur le panel?
         dans_le_menu% = 1 :' oui, alors par défaut, on est dans le menu
      END_IF
      '
      if vers_le_panel%<>old_vers_le_panel% :' y a t-il eu un mouvement en dehors du panel?
         if vers_le_panel%=0 :' si on s'éloigne
            dans_le_menu% = 0 :' c'est qu'on est en dehors
         end_if
      end_if
   end_if



   ' action si dans le panel
   if dans_le_menu% = 1
      ne_pas_montrer%=0
      objet_valid% = color_pixel_blue( context%+2,mouse_x_position(context%+1),mouse_y_position(context%+1) )
      '
      if objet_valid%=1 :' est-ce un numéro d'objet valide?
         pos%=color_pixel_red(context%+2,mouse_x_position(context%+1),mouse_y_position(context%+1))+(color_pixel_green(context%+2,mouse_x_position(context%+1),mouse_y_position(context%+1))*256) :' oui, retrouve le
         '
         if oldpos%<>pos% or hilite%=0 :' allume le surlignage
            hilite%=1
            if oldpos%=0 then oldpos%=pos% :' au 1er click droit, oldpos% peut être égal à 0 SI objet_valid% = 0 !!
            COLOR oldpos%,240,240,240 : font_color oldpos%,0,0,0
            COLOR pos%,49,106,197 : font_color pos%,255,255,255
            oldpos%=pos%
         end_if
      else :' le numero d'objet est invalide
         '
         if hilite%=1 :' éteint le surlignage
            hilite%=0
            COLOR pos%,240,240,240 : font_color pos%,0,0,0
         end_if
      end_if
   else :' on est pas dans le menu
      '
      if hilite%=1 :' éteint le surlignage
         hilite%=0
         COLOR pos%,240,240,240 : font_color pos%,0,0,0
      end_if
      '
      if ne_pas_montrer%=0 :' démarre un chronomètre
         ticks_start=NUMBER_TICKS
         ne_pas_montrer%=1
      end_if
      '
      if NUMBER_TICKS>(ticks_start+500) :' le temps d'affichage est dépassé, cache le menu
         if show(context%+1)=1 : hide context%+1 : end_if
      end_if
   end_if



   ' le click droit
   IF MOUSE_RIGHT_DOWN(0)=1
      force_mouvement%=1-force_mouvement% :' forcer un mouvement du panel pour rafraichir les coordonnées de la souris(celles sur le panel)
      '
      if (souris0X%+width(context%+1)) >= width(0) :' ne pas dépasser la largeur du form 0
         left context%+1,width(0)-width(context%+1)-10+force_mouvement%
      else
         LEFT context%+1,MOUSE_X_RIGHT_DOWN(0)-10+force_mouvement%
      end_if
      '
      if (souris0Y%+height(context%+1)+35) >= height(0) :' ne pas dépasser la hauteur du form 0
         top context%+1,height(0)-height(context%+1)-35+force_mouvement%
      else
         TOP context%+1,MOUSE_Y_RIGHT_DOWN(0)-10+force_mouvement%
      end_if
      '
      SHOW context%+1
      pause 20 :' laisser passer du temps pour que la souris puisse correctement détecter le panel
      objet_valid% = color_pixel_blue( context%+2,mouse_x_position(context%+1),mouse_y_position(context%+1) ) :' est-ce un numéro d'objet valide?
      '
      if objet_valid% = 1 :' si ce qui est sous la souris peut être surligné, alors...
         pos%=color_pixel_red(context%+2,mouse_x_position(context%+1),mouse_y_position(context%+1))+(color_pixel_green(context%+2,mouse_x_position(context%+1),mouse_y_position(context%+1))*256) :' retrouve le numéro d'objet sous la souris
         if oldpos%=0 then oldpos%=pos%
         COLOR oldpos%,240,240,240 : font_color oldpos%,0,0,0 :' éteint l'ancien surlignage
         COLOR pos%,49,106,197 : font_color pos%,255,255,255 :' surligne ce qui est sous la souris
         oldpos%=pos%
      end_if
   end_if



   ' met à jour les variables
   oldsouris0X% = souris0X% : oldsouris0Y% = souris0Y%
   oldsouris101X% = souris101X% : oldsouris101Y% = souris101Y%
   old_vers_le_panel%=vers_le_panel%
TIMER_ON 15
RETURN



null_menu:
   if objet_valid%=1 :' est-ce un numéro d'objet valide?
      trigger_click pos% :' on simule un click en envoyant le numéro caché sous la souris, dans la variable système NUMBER_CLICK
      HIDE context%+1
   end_if
return





SUB ouvrir_fichier()
   CAPTION 0,"Ouvrir fichier"
END_SUB

SUB sauvegarder_fichier()
   CAPTION 0,"Sauvegarder fichier"
END_SUB

SUB fermer_fichier()
   CAPTION 0,"Fermer fichier"
END_SUB
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Un menu contextuel [résolu] - Page 2 Empty
MessageSujet: Re: Un menu contextuel [résolu]   Un menu contextuel [résolu] - Page 2 EmptyMar 30 Aoû 2016 - 22:46

Bravo Silverman, c'est un beau défi !

J'y avais aussi pensé mais je trouve cela trop encombrant dans un programme pour un simple menu...
Mais le principal est là, c'est possible en Panoramic pure et c'est le principal !

Encore Bravo ! cheers
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Contenu sponsorisé





Un menu contextuel [résolu] - Page 2 Empty
MessageSujet: Re: Un menu contextuel [résolu]   Un menu contextuel [résolu] - Page 2 Empty

Revenir en haut Aller en bas
 
Un menu contextuel [résolu]
Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2
 Sujets similaires
-
» Menu personalisé avec icones et menu contextuel
» Menu contextuel
» Menu Contextuel - Click de droite
» Créer un EXE depuis le menu contextuel de Windows
» Récupérer nom fichier sur clic droit menu contextuel Windows

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Un problème avec PANORAMIC?-
Sauter vers: