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
» I Love You
par papydall Aujourd'hui à 1:15

» mise a jour calculatrice
par joeeee2017 Aujourd'hui à 1:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Hier à 18:49

» [solved] 3D_LINE How to ?
par papydall Hier à 6:51

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

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

» 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

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 | 
 

 Un menu déroulant type "Side Bar"

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2
AuteurMessage
Klaus

avatar

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

MessageSujet: Re: Un menu déroulant type "Side Bar"   Mar 9 Déc 2014 - 16:47

Ta solution avec le panel est géniale, Ygeronimi ! Je l'ai adapté très facilement à mon menu, et voici ce que ça donne:
Code:
' test_menu_deroulant.bas

alpha 1 : top 1,40 : left 1,250 : caption 1,"Un mémo:"
memo 2 : top 2,60 : left 2,250 : width 2,300 : height 2,200

panel 3 : top 3,300 : left 3,270
edit 4 : parent 4,3 : top 4,10 : left 4,10

' activer la ligne suivante pour cacher le menu dans une barre verticale
barre_menu_deroulant(50,220,0,height(0)-100,200,200,200)

nouveau_menu_deroulant(100,5,30,127,127,255)
titre_menu_deroulant(actuel_menu_deroulant%,"Mon menu 1","Arial",16,1,1,0,0,0)
corps_menu_deroulant(actuel_menu_deroulant%,4,191,191,255)
ligne_menu_deroulant(actuel_menu_deroulant%,1,"Première option","Century Gothic",10,1,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,2,"Deuxième option","Century Gothic",10,1,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,3,"Troisième option","Century Gothic",10,1,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,4,"Quatrième option","Century Gothic",10,1,0,0,0,0)

nouveau_menu_deroulant(120,5,60,127,127,255)
titre_menu_deroulant(actuel_menu_deroulant%,"Mon menu 2","Arial",16,0,0,0,0,0)
corps_menu_deroulant(actuel_menu_deroulant%,7,191,191,255)
ligne_menu_deroulant(actuel_menu_deroulant%,1,"Ligne 1","Century Gothic",10,1,1,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,2,"Ligne 2","Arial",10,1,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,3,"Ligne 3","MS Serif",10,0,1,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,4,"Ligne 4","Times New Roman",10,0,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,5,"Ligne 5","Times New Roman",10,1,1,255,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,6,"Ligne 6","Times New Roman",10,1,1,0,255,0)
ligne_menu_deroulant(actuel_menu_deroulant%,7,"Ligne 7","Times New Roman",10,1,1,0,0,255)

nouveau_menu_deroulant(140,5,90,127,127,255)
titre_menu_deroulant(actuel_menu_deroulant%,"Mon menu 3","Arial",16,1,1,0,0,0)
corps_menu_deroulant(actuel_menu_deroulant%,4,191,191,255)
ligne_menu_deroulant(actuel_menu_deroulant%,1,"1ère option","MS Serif",10,1,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,2,"2ème option","MS Serif",10,1,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,3,"3èmeoption","MS Serif",10,1,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,4,"4ème option","MS Serif",10,1,0,0,0,0)

' activer la ligne suivante pour faire apparaître le menu au départ
' gosub click_barre_menu_deroulant

end

' ====================================================================================
' Cette procédure crée la barre verticale qui permet de montrer/cacher le menu entier
' Paramètres:

' ====================================================================================
sub barre_menu_deroulant(no%,x%,y%,h%,mr%,mg%,mb%)
  if label("click_menu_deroulant")=0 : ' est-ce que l'environnement doit être initialisé ?
    if (object_exists(no%)>0) or (object_exists(no%+1)>0) : ' est-ce que les numéros d'objet sont libres ?
      message "Les objets "str$(no%)+" ne sont pas disponibles !'
      exit_sub
    end_if
    dim barre_menu_deroulant%        : ' numéro d'objet de la barre verticale
    dim n_menus_deroulants%          : ' nombre de lignes définies de niveau 1
    dim table_menus_deroulants%(50)  : ' liste des numéros d'objets de niveau 1
    dim actuel_menu_deroulant%       : ' dernier numéro d'objet créé de ligne de niveau 1
    dim i_menus_deroulants%          : ' variable d'usage interne
    dim j_menus_deroulants%          : ' variable d'usage interne
    dim k_menus_deroulants%          : ' variable d'usage interne
    dim f_menus_deroulants%          : ' variable d'usage interne
    dim actuel_menu_deroulant_y%    : ' variable à usage interne
    label click_barre_menu_deroulant : ' clic sur la barre verticale
    label click_menu_deroulant       : ' clic sur une ligne de niveau 1
    label click_menu_deroulant_ligne : ' clic sur une ligne de niveau 2
    n_menus_deroulants% = 0
  end_if
  if barre_menu_deroulant%>0         : ' est-ce que la barre verticale est déjà créée ?
    message "La barre verticale est déjà définie !"
    return
  end_if
  barre_menu_deroulant% = no%        : ' mémoriser le numéro d'objet de la barre verticale
  Panel no% : height no%,height(0)-38 : width no%,230 : top no%,0 :left no%,-220
  color no%,mr%,mg%,mb%               : ' couleur de la barre
  Alpha no%+1 : parent no%+1,barre_menu_deroulant%  : ' pour placer le "<" ou ">"
  top no%+1,height(barre_menu_deroulant%)/2   : ' placer cela au milieu du panel
  left no%+1,width(barre_menu_deroulant%)-10  : ' contre le bord droit
  caption no%+1,">"
  font_size no%+1,12 : font_bold no%
  font_color no%+1,255,0,0
  cursor_point no%+1                          : ' changer le curseur en pointeur
  on_click no%+1,click_barre_menu_deroulant : ' et lier au traitement du clic gauche
end_sub

' ====================================================================================
' Cette procédure crée un nouveau menu déroulant. Elle utilise 2 objets PICTURE.
' Paramètres:
'   no%  = numéro de l'objet de base à utiliser  (no% et no%+1 doivent être libres)
'   x%, y% = position du coin en haut à gauche du menu*
'   mr%,mg%, mb% = couleurs RGB du fond du menu
' ====================================================================================
sub nouveau_menu_deroulant(no%,x%,y%,mr%,mg%,mb%)
  if label("click_menu_deroulant")=0 : ' est-ce que l'environnement doit être initialisé ?
    if (object_exists(no%)+object_exists(no%+1))>0  : ' est-ce que les numéros d'objet sont libres ?
      message "Les objets "str$(no%)+" et/ou "+str$(no%+1)"+" ne sont pas disponibles !'
      exit_sub
    end_if
    dim barre_menu_deroulant%        : ' numéro d'objet de la barre verticale
    dim n_menus_deroulants%          : ' nombre de lignes définies de niveau 1
    dim table_menus_deroulants%(50)  : ' liste des numéros d'objets de niveau 1
    dim actuel_menu_deroulant%       : ' dernier numéro d'objet créé de ligne de niveau 1
    dim i_menus_deroulants%          : ' variable d'usage interne
    dim j_menus_deroulants%          : ' variable d'usage interne
    dim k_menus_deroulants%          : ' variable d'usage interne
    dim f_menus_deroulants%          : ' variable d'usage interne
    label click_barre_menu_deroulant : ' clic sur la barre verticale
    label click_menu_deroulant       : ' clic sur une ligne de niveau 1
    label click_menu_deroulant_ligne : ' clic sur une ligne de niveau 2
    n_menus_deroulants% = 0
  end_if
  n_menus_deroulants% = n_menus_deroulants% + 1        : ' compter cette ligne de niveau 1
  table_menus_deroulants%(n_menus_deroulants%) = no%   : ' mémoriser le numéro d'objet
  actuel_menu_deroulant% = no%                         : ' mémoriser ce numéro pour le niveau 2 à suivre
  picture no%                                          : ' créer le PICTURE
    if barre_menu_deroulant%>0 then parent no%,barre_menu_deroulant%
    top no%,y% : left no%,x% : width no%,200 : height no%,25    : ' position et dimensions
    color no%,mr%,mg%,mb%                              : ' donner la couleur de fond
  on_click no%,click_menu_deroulant                    : ' et lier au traitement du clic gauche
end_sub

' ====================================================================================
' Cette procédure écrit le titre du menu dans un menu existant.
' Paramètres:
'   no% = numéro d'objet de base du menu visé
'   titre$ = texte à afficher
'   font$ = nom de la police
'   sz% = taille de la police
'   sg%, si% = styles de la police (gras, italique): indicateurs 0/1
'   fr%, fg%, fb% = couleurs RGB de la police
' ====================================================================================
sub titre_menu_deroulant(no%,titre$,font$,sz%,sg%,si%,fr%,fg%,fb%)
  font_name no%,font$                  : ' choisir la police
  if sg%<>0 then font_bold no%         : ' passer en gras si demandé
  if si%<>0 then font_italic no%       : ' passer en italique si demandé
  font_size no%,sz%                    : ' installer la taille de la police
  font_color no%,fr%,fg%,fb%           : ' et la couleur de l'écriture
  print_target_is no%                  : ' cibler le PICTURE pour la commande PRINT
  2d_target_is no%                     : ' ainsi que pour les commandes 2D
  ' la ligne suivante utilise la couleur du PICTURE comme couleur de fond pour PRINT
  2d_fill_color color_pixel_red(no%,1,1),color_pixel_green(no%,1,1),color_pixel_blue(no%,1,1)
  print_locate 20,1                    : ' positionner le point de départ
  print titre$                         : ' écrire le titre
end_sub

' ====================================================================================
' Cette procédure prépare le corps du menu pour un certain nombre de lignes.
' Paramètres:
'   no% = numéro d'objet de base du menu visé
'   nlig% = nombre de lignes de détail pour ce menu
'   mr%, mg%, mb% = couleur RBG du fond du corps du menu
' ====================================================================================
sub corps_menu_deroulant(no%,nlig%,mr%,mg%,mb%)
  dim_local no1%                     : ' variable interne pour le PICTURE du sous-menu
  no1% = no% + 1                     : ' son numéro suit celui du PICTURE de niveau 1
  picture no1% : hide no1%           : ' créer le PICTURE et le cacher tout de suite
    if barre_menu_deroulant%>0 then parent no1%,barre_menu_deroulant%
    top no1%,top(no1%-1)+25          : ' positionner juste en-dessous du niveau 1
    left no1%,left(no1%-1)+10        : ' et légèrement à droite (meilleure visibilité)
    width no1%,200 : height no1%,25*nlig%  : ' dimensions en fonction du nombre de lignes
    color no1%,mr%,mg%,mb%           : ' installer la couleur du fond
    on_click no1%,click_menu_deroulant_ligne : ' et lier au traitement du clic gauche
end_sub

' ====================================================================================
' Cette procédure écrit une ligne de détail dans le corps d'un menu
'   no% = numéro d'objet de base du menu visé
'   nlig% = numéro de la lignevisée (1,2, ...)
'   texte$ = texte à afficher
'   font$ = police des lignes de détail
'   sz% = taille de la police
'   sg%,si% = styles de la police (gras, italique): indicateurs 0/1
'   fr%, fg%, fb% = couleurs RGB de la police
' ====================================================================================
sub ligne_menu_deroulant(no%,nlig%,texte$,font$,sz%,sg%,si%,fr%,fg%,fb%)
  dim_local no1%                     : ' variable interne pour le PICTURE du sous-menu
  no1% = no% + 1                     : ' son numéro suit celui du PICTURE de niveau 1
  print_target_is no1%               : ' cibler ce PICTURE pour PRINT
  2d_target_is no1%                  : ' ainsi que pour les commandes 2D
  ' la ligne suivante utilise la couleur du PICTURE comme couleur de fond pour PRINT
  2d_fill_color color_pixel_red(no1%,1,1),color_pixel_green(no1%,1,1),color_pixel_blue(no1%,1,1)
  print_locate 20,(nlig%-1)*25+1     : ' positionner en fonction du numéro de ligne
  font_name no1%,font$               : ' choisir la police
  if sg%<>0 then font_bold no1%      : ' passer en gras si demandé
  if si%<>0 then font_italic no1%    : ' passer en italique si demandé
  font_size no1%,sz%                 : ' installer la taille de la police
  font_color no1%,fr%,fg%,fb%        : ' ainsi que la couleur de l'écriture
  print texte$                       : ' imprimer la ligne
end_sub

' ====================================================================================
' cette procédure ne doit en aucun cas être modifiée !
' ====================================================================================
click_menu_deroulant:
  for i_menus_deroulants%=1 to n_menus_deroulants% : ' boucle sur les menus niveau 1
    if table_menus_deroulants%(i_menus_deroulants%)=number_click : ' trouvé ?
      if hide(number_click+1)=1                    : ' actuellement caché ?
        if i_menus_deroulants%<n_menus_deroulants% : ' pas le dernier niveau 1
          ' décaler tous les menus suivants vers le bas
          for j_menus_deroulants%=i_menus_deroulants%+1 to n_menus_deroulants%
            top table_menus_deroulants%(j_menus_deroulants%), top(table_menus_deroulants%(j_menus_deroulants%)) + height(table_menus_deroulants%(i_menus_deroulants%)+1)
            top table_menus_deroulants%(j_menus_deroulants%)+1, top(table_menus_deroulants%(j_menus_deroulants%)+1) + height(table_menus_deroulants%(i_menus_deroulants%)+1)
          next j_menus_deroulants%
        end_if
        show number_click+1                        : ' montrer le sous-menu
      else                                         : ' actuellement visible !
        if i_menus_deroulants%<n_menus_deroulants% : ' pas le dernier niveau 1
          ' décaler tous les menus suivants vers le haut
          for j_menus_deroulants%=i_menus_deroulants%+1 to n_menus_deroulants%
            top table_menus_deroulants%(j_menus_deroulants%), top(table_menus_deroulants%(j_menus_deroulants%)) - height(table_menus_deroulants%(i_menus_deroulants%)+1)
            top table_menus_deroulants%(j_menus_deroulants%)+1, top(table_menus_deroulants%(j_menus_deroulants%)+1) - height(table_menus_deroulants%(i_menus_deroulants%)+1)
          next j_menus_deroulants%
        end_if
        hide number_click+1                        : ' cacher le sous-menu
      end_if
      return
    end_if
  next i_menus_deroulants%
  return

' ====================================================================================
' Cette routine est appelée lors d'un clic gauche sur la barre verticale
' ====================================================================================
click_barre_menu_deroulant:
  if left(barre_menu_deroulant%)<0          : ' le menu est caché ?
      for i_menus_deroulants%=1 to 220      : ' alors le faire apparaître
        left barre_menu_deroulant%,left(barre_menu_deroulant%)+1
      next i_menus_deroulants%
      caption barre_menu_deroulant%+1,"<"   : ' changer le libellé
  else                                      : ' le menu est visible ?
      for i_menus_deroulants%=1 to 220      : ' alors le faire disparaître
        left barre_menu_deroulant%,left(barre_menu_deroulant%)-1
      next i_menus_deroulants%
      caption barre_menu_deroulant%+1,">"   : ' changer le libellé
  end_if
  return

' ====================================================================================
' cette routine doit être adaptée pour lancer les fonctions de l'application !
' ====================================================================================
click_menu_deroulant_ligne:
  for i_menus_deroulants%=1 to n_menus_deroulants%  : ' boucle sur les menus de niveau 1
    if table_menus_deroulants%(i_menus_deroulants%)=number_click-1 : ' est-ce le menu choisi ?
      actuel_menu_deroulant_y% = mouse_y_left_down(number_click)   : ' récuperer la coordonnée verticale du clic
      actuel_menu_deroulant_y% = int((actuel_menu_deroulant_y%+24)/25) : ' en déduire le numéro de ligne
      ' lancer ici le traitement spécifique à cette ligne pour ce menu
      message "Menu déroulant "+str$(i_menus_deroulants%)+"  ligne "+str$(actuel_menu_deroulant_y%)
      return
    end_if
  next i_menus_deroulants%
  return

Si l'on met la ligne 10 en commentaire, le menu apparaît sans le panel, de façon fixe à l'écran, mais est parfaitement opérationnel.

Encore une fois, Merci pour ta contribution !


Dernière édition par Klaus le Mar 9 Déc 2014 - 21:20, édité 3 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

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

MessageSujet: Re: Un menu déroulant type "Side Bar"   Mar 9 Déc 2014 - 17:24

C'est du tout bon ça. Éventuellement si tu veux, tu peux corriger:
Ligne 156 chacher par cacher
Ligne 192: Cette procédure ne dois => Cette procédure ne doit
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Un menu déroulant type "Side Bar"   Mar 9 Déc 2014 - 17:42

Corrigé Smile Smile Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

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

MessageSujet: re   Mar 9 Déc 2014 - 20:19

As tu vu la version multi-slide ?... Laughing
les panel sont rétrécis lorsqu' ils sont cachés ( ou repliés ).


Dernière édition par ygeronimi le Mar 9 Déc 2014 - 20:46, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Un menu déroulant type "Side Bar"   Mar 9 Déc 2014 - 20:40

Oui, j'ai vu, Ygeronimi. Le concept est d'ailleurs extensible, en choisissant le bord (gauche, droite, haut ou bas) pour le positionnement du volet glissant, ainsi que du nombre de volets par côté. Et, bien sûr, dans ces volets, on peut placer n'importe quoi: des menus bien sûr comme dans mon cas, mais aussi tout autre chose: de l'aide, des "écrans" de saisie etc. C'est un concept puissant et souple que tu as mis sur le tapis ! Encore une fois Bravo !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

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

MessageSujet: Re: Un menu déroulant type "Side Bar"   Mar 9 Déc 2014 - 20:44

@Klaus
Dans SUB barre_menu_deroulant(no%,x%,y%,h%,mr%,mg%,mb%) à partir de le ligne 49, tu as oublié de DIMensioner la variable actuel_menu_deroulant_y%

J’ai donc ajouté
Code:
 dim actuel_menu_deroulant_y%

ygeronimi a écrit:
As tu vu la version milti-slide ?...  
les panel sont rétrécis lorsqu' ils sont cachés ( ou repliés ).

Personnellement, non!


Dernière édition par papydall le Mar 9 Déc 2014 - 20:54, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Yannick

avatar

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

MessageSujet: re   Mar 9 Déc 2014 - 20:45

On peut faire pire mais est ce que je dois oser ?... Laughing


Edit : 
@ Papydall, j' ai corrigé.
et ce post parle du menu pas de l' orthographe... Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Un menu déroulant type "Side Bar"   Mar 9 Déc 2014 - 20:51

Bon, je viens de jeter un œil :  bonne idée, merci ygeronimi.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

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

MessageSujet: Re: Un menu déroulant type "Side Bar"   Mar 9 Déc 2014 - 21:21

Merci, Papydall. Je l'ai corrigé dans mon post sur la page précédente.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

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

MessageSujet: re   Mar 9 Déc 2014 - 22:03

Bon, aller, j' ai osé... Laughing
Code:
dim no%,Obj_Memo%,Obj_Pan%,Obj_Edit%,Pan%(10),Obj_alpha%(10)
dim clck%
label clic

height 0,540 : width 0,700
font_name 0,"arial"

no%=no%+1 : Obj_alpha%(0)=no%
alpha no% : top no%,10 : left no%,15 : caption no%,"Un Mémo :"

no%=no%+1 : Obj_Memo%=no%
Memo no%  : top no%,25 : left no%,15 : height no%,250 : width no%,width(0)-36

no%=no%+1  : Obj_Pan%=no%
Panel no% : top no%,300 : left no%,15 : height no%,150 : width no%,300

no%=no%+1 : Obj_Edit%=no%
Edit no% : parent no%,Obj_Pan% : top no%,5 : left no%,5

Create_slide(3,height(0)-38)
color Pan%(1),200,200,200
color Pan%(2),250,200,200
color Pan%(3),200,250,200
end

sub Create_slide(n%,tf%)
  dim_local x%,
  for x%=1 to n%
      no%=no%+1 : Pan%(x%)=no%
      Panel no% : height no%,tf% : width no%,200 : top no%,0 :left no%,(((n%+1)*10)-(x%*10))-width(no%)
      no%=no%+1 : Obj_alpha%(x%)=no%
      Alpha no% : parent no%,Pan%(x%) : top no%,(height(Pan%(x%))/2)-10 : left no%,width(pan%(x%))-10 :caption no%,">"
      font_size no%,12 :font_bold no% : font_color no%,255,0,0 :cursor_point no% :on_click no%,clic
  next x%
  if variable("t%")=0 then dim t%(n%)
end_sub



clic:
  clck%=number_click
  if clck%=Obj_alpha%(1) :Show_slide_bar_menu(1,3):end_if
  if clck%=Obj_alpha%(2) :Show_slide_bar_menu(2,3):end_if
  if clck%=Obj_alpha%(3) :Show_slide_bar_menu(3,3):end_if
return

Sub Show_slide_bar_menu(p%,n%)
  dim_local i%,x%,y%
  if t%(p%)=0
      t%(p%)=1
      if p%=n%
        for x%=1 to 190
            for y%=1 to n%
              left Pan%(y%),left(Pan%(y%))+1
            next y%
        next x%
      else
        if p%=1
            for x%=1 to 190
              left Pan%(p%),left(Pan%(p%))+1
            next x%
        else
            for x%=1 to 190
              for y%=1 to p%
                  left Pan%(y%),left(Pan%(y%))+1
              next y%
            next x%
        end_if
      end_if
      caption Obj_alpha%(p%),"<"
  else
      t%(p%)=0
      if p%=n%
        for x%=1 to 190
            for y%=1 to n%
              left Pan%(y%),left(Pan%(y%))-1
            next y%
        next x%
      else
        if p%=1
            for x%=1 to 190
              left Pan%(p%),left(Pan%(p%))-1
            next x%
        else
            for x%=1 to 190
              for y%=1 to p%
                  left Pan%(y%),left(Pan%(y%))-1
              next y%
            next x%
        end_if
      end_if
      caption Obj_alpha%(p%),">"
  end_if
End_sub


Dernière édition par ygeronimi le Mar 9 Déc 2014 - 22:12, édité 1 fois (Raison : Petite correction)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Un menu déroulant type "Side Bar"   Mer 10 Déc 2014 - 1:21

Tu as osé et tu as réussis.
Bravo !

Juste pour mon confort visuel personnel :
J’ai modifié la valeur du top en ligne 32 de la SUB Create_slide(n%,tf%)
Code:
 ...  top no%,(height(Pan%(x%))/2)-10+20*x% ...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

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

MessageSujet: Re: Un menu déroulant type "Side Bar"   Mer 10 Déc 2014 - 1:40

C'est super, ton truc, Ygeronimi ! Je pense qu'on est en train d'imaginer une nouvelle technique de présentation en Panoramic qui sera appelée se développer !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Un menu déroulant type "Side Bar"   Mer 10 Déc 2014 - 3:21

Par exemple, comme ceci:
Code:
' test_tiroirs_coulissants.bas

full_space 0

nouveau_tiroir_coulissant(100,0,1,3,200,200,200)
nouveau_tiroir_coulissant(200,0,2,2,180,180,180)
nouveau_tiroir_coulissant(300,0,3,1,160,160,160)
nouveau_tiroir_coulissant(400,0,4,4,140,140,140)


end

sub nouveau_tiroir_coulissant(no%,cible%,cote%,nombre%,R%,G%,B%)
'  no%      = numéro d'objet
'  cible%  = objet contenant les tiroirs (form, panel, ...)
'  cote%    = coté: 1=gauche  2=haut  3=droite  4=bas
'  nombre%  = nombre de panels pour ce côté
'  R%,G%,B3 = couleur de fond
  dim_local i%, w%, h%, no1%, t%, l%, c$
 
  ' configuration initiale de l'environnement des tiroirs
  if label("panel_coulissant_click")=0
    label panel_coulissant_click
    dim table_no_panels_coulissants%(4) : ' numéros d'objet de base
    dim table_nc_panels_coulissants%(4) : ' numéros d'objet de clic
    dim table_nn_panels_coulissants%(4) : ' nombre de tiroirs
    dim table_np_panels_coulissants%(4) : ' parents
    dim click_panels_coulissants%      : ' tiroir cliqué
    dim i_panels_coulissants%          : ' variable interne
    dim j_panels_coulissants%          : ' variable interne
    dim cc_panels_coulissants%          : ' côté cliqué
    dim cn_panels_coulissants%          : ' numéro de tiroir cliqué
       
  end_if
 
  ' test de validité des paramètres
  if (cote%<1) or (cote%>4)
    message "Sélection de côté invalide"
    exit_sub
  end_if
  if (nombre%<1) or (nombre%>10)
    message "Nombre de tiroirs invalide"
    exit_sub
  end_if
  for i%=1 to nombre%*2
    if object_exists(no%+i%-1)=1
      message "Un des objets nécessaires ne peut être créé"
      exit_sub
    end_if
  next i%
  if table_no_panels_coulissants%(cote%)>0
    message "Il y a déjà des tiroirs pour ce côté"
    exit_sub
  end_if

  ' création des tiroirs
  table_no_panels_coulissants%(cote%) = no%    : ' numéros d'objet de base
  table_nc_panels_coulissants%(cote%) = no%+nombre% : ' numéros d'objet de clic
  table_nn_panels_coulissants%(cote%) = nombre% : ' nombre de tiroirs
  table_np_panels_coulissants%(cote%) = cible%  : ' parents

  for i%=1 to nombre%
    select cote%
      case 1
        h% = int((height(cible%)+nombre%-1)/nombre%)
        w% = 230
        t% = (i%-1)*h%
        l% = -220
      case 2
        h% = 230
        w% = int((width(cible%)+nombre%-1)/nombre%)
        t% = -220
        l% = (i%-1)*w%
      case 3
        h%  = int((height(cible%)+nombre%-1)/nombre%)
        w% = 230
        t% = (i%-1)*h%
        l% = width(cible%)-50
      case 4
        h% = 230
        w% = int((width(cible%)+nombre%-1)/nombre%)
        t% = height(cible%)-70
        l% = (i%-1)*w%
    end_select
    no1% = no% + i% - 1
    panel no1%
    color no1%,R%,G%,B%
    if cible%>0 then parent no1%,cible%
    top no1%,t% : left no1%,l%
    width no1%,w% : height no1%,h%
    select cote%
      case 1
        t% = int(h%+1)/2
        l% = 220
        c$ = ">"
      case 2
        t% = 218
        l% = int(w%+1)/2
        c$ = "v"
      case 3
        t% = int(h%+1)/2
        l% = 2
        c$ = "<"
      case 4
        t% = 2
        l% = int(w%+1)/2
        c$ = "^"
    end_select
    alpha no1%+nombre%
    parent no1%+nombre%,no1%
    top no1%+nombre%,t% : left no1%+nombre%,l%
    caption no1%+nombre%,c$
    font_bold no1%+nombre%
    on_click no1%+nombre%,panel_coulissant_click
  next i%
 
end_sub

panel_coulissant_click:
  click_panels_coulissants% = number_click
  for i_panels_coulissants%=1 to 4
    if click_panels_coulissants%>=(table_no_panels_coulissants%(i_panels_coulissants%)+table_nn_panels_coulissants%(i_panels_coulissants%))
      if click_panels_coulissants%<=(table_no_panels_coulissants%(i_panels_coulissants%)+table_nn_panels_coulissants%(i_panels_coulissants%)*2)
        cc_panels_coulissants% = i_panels_coulissants%
        cn_panels_coulissants% = click_panels_coulissants%-(table_no_panels_coulissants%(i_panels_coulissants%)+table_nn_panels_coulissants%(i_panels_coulissants%))+1
message "côté: "+str$(cc_panels_coulissants%)+" tiroir "+str$(cn_panels_coulissants%)
        select cc_panels_coulissants%
          case 1
            cn_panels_coulissants% = cn_panels_coulissants% + table_no_panels_coulissants%(1) - 1
            if left(cn_panels_coulissants%)<0
              for j_panels_coulissants%=1 to 220
                left cn_panels_coulissants%, left(cn_panels_coulissants%) + 1
              next j_panels_coulissants%
              caption cn_panels_coulissants%+table_nn_panels_coulissants%(cc_panels_coulissants%),"<"
            else
              for j_panels_coulissants%=1 to 220
                left cn_panels_coulissants%, left(cn_panels_coulissants%) - 1
              next j_panels_coulissants%
              caption cn_panels_coulissants%+table_nn_panels_coulissants%(cc_panels_coulissants%),">"
            end_if
          case 2
            cn_panels_coulissants% = cn_panels_coulissants% + table_no_panels_coulissants%(2) - 1
            if top(cn_panels_coulissants%)<0
              for j_panels_coulissants%=1 to 220
                top cn_panels_coulissants%, top(cn_panels_coulissants%) + 1
              next j_panels_coulissants%
              caption cn_panels_coulissants%+table_nn_panels_coulissants%(cc_panels_coulissants%),"^"
            else
              for j_panels_coulissants%=1 to 220
                top cn_panels_coulissants%, top(cn_panels_coulissants%) - 1
              next j_panels_coulissants%
              caption cn_panels_coulissants%+table_nn_panels_coulissants%(cc_panels_coulissants%),"v"
            end_if
          case 3
            cn_panels_coulissants% = cn_panels_coulissants% + table_no_panels_coulissants%(3) - 1
            if left(cn_panels_coulissants%)>width(table_np_panels_coulissants%(cc_panels_coulissants%))-200
              for j_panels_coulissants%=1 to 220
                left cn_panels_coulissants%, left(cn_panels_coulissants%) - 1
              next j_panels_coulissants%
              caption cn_panels_coulissants%+table_nn_panels_coulissants%(cc_panels_coulissants%),">"
            else
              for j_panels_coulissants%=1 to 220
                left cn_panels_coulissants%, left(cn_panels_coulissants%) + 1
              next j_panels_coulissants%
              caption cn_panels_coulissants%+table_nn_panels_coulissants%(cc_panels_coulissants%),"<"
            end_if
          case 4
            cn_panels_coulissants% = cn_panels_coulissants% + table_no_panels_coulissants%(4) - 1
            if top(cn_panels_coulissants%)>width(table_np_panels_coulissants%(cc_panels_coulissants%))-200
              for j_panels_coulissants%=1 to 220
                top cn_panels_coulissants%, top(cn_panels_coulissants%) + 1
              next j_panels_coulissants%
              caption cn_panels_coulissants%+table_nn_panels_coulissants%(cc_panels_coulissants%),"v"
            else
              for j_panels_coulissants%=1 to 220
                top cn_panels_coulissants%, top(cn_panels_coulissants%) - 1
              next j_panels_coulissants%
              caption cn_panels_coulissants%+table_nn_panels_coulissants%(cc_panels_coulissants%),"^"
            end_if
        end_select
        return
      end_if
    end_if
  next i_panels_coulissants%
  return

Bon, je pense que le principe des "tiroirs" est clair. Mais je remets ici tout de même l'objet de mon post initial: un menu latéral dynamique qui se déplie ou replie en cliquant sur une ligne de rubrique, et avec la maîtrise des polices, attributs et couleurs pour chaque ligne:
Code:
' test_menu_deroulant.bas

alpha 1 : top 1,40 : left 1,250 : caption 1,"Un mémo:"
memo 2 : top 2,60 : left 2,250 : width 2,300 : height 2,200

panel 3 : top 3,300 : left 3,270
edit 4 : parent 4,3 : top 4,10 : left 4,10

' activer la ligne suivante pour cacher le menu dans une barre verticale
barre_menu_deroulant(50,220,0,height(0)-100,200,200,200)

nouveau_menu_deroulant(100,5,30,127,127,255)
titre_menu_deroulant(actuel_menu_deroulant%,"Mon menu 1","Arial",16,1,1,0,0,0)
corps_menu_deroulant(actuel_menu_deroulant%,4,191,191,255)
ligne_menu_deroulant(actuel_menu_deroulant%,1,"Première option","Century Gothic",10,1,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,2,"Deuxième option","Century Gothic",10,1,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,3,"Troisième option","Century Gothic",10,1,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,4,"Quatrième option","Century Gothic",10,1,0,0,0,0)

nouveau_menu_deroulant(120,5,60,127,127,255)
titre_menu_deroulant(actuel_menu_deroulant%,"Mon menu 2","Arial",16,0,0,0,0,0)
corps_menu_deroulant(actuel_menu_deroulant%,7,191,191,255)
ligne_menu_deroulant(actuel_menu_deroulant%,1,"Ligne 1","Century Gothic",10,1,1,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,2,"Ligne 2","Arial",10,1,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,3,"Ligne 3","MS Serif",10,0,1,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,4,"Ligne 4","Times New Roman",10,0,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,5,"Ligne 5","Times New Roman",10,1,1,255,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,6,"Ligne 6","Times New Roman",10,1,1,0,255,0)
ligne_menu_deroulant(actuel_menu_deroulant%,7,"Ligne 7","Times New Roman",10,1,1,0,0,255)

nouveau_menu_deroulant(140,5,90,127,127,255)
titre_menu_deroulant(actuel_menu_deroulant%,"Mon menu 3","Arial",16,1,1,0,0,0)
corps_menu_deroulant(actuel_menu_deroulant%,4,191,191,255)
ligne_menu_deroulant(actuel_menu_deroulant%,1,"1ère option","MS Serif",10,1,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,2,"2ème option","MS Serif",10,1,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,3,"3èmeoption","MS Serif",10,1,0,0,0,0)
ligne_menu_deroulant(actuel_menu_deroulant%,4,"4ème option","MS Serif",10,1,0,0,0,0)

' activer la ligne suivante pour faire apparaître le menu au départ
' gosub click_barre_menu_deroulant

end

' ====================================================================================
' Cette procédure crée la barre verticale qui permet de montrer/cacher le menu entier
' Paramètres:

' ====================================================================================
sub barre_menu_deroulant(no%,x%,y%,h%,mr%,mg%,mb%)
  if label("click_menu_deroulant")=0 : ' est-ce que l'environnement doit être initialisé ?
    if (object_exists(no%)>0) or (object_exists(no%+1)>0) : ' est-ce que les numéros d'objet sont libres ?
      message "Les objets "str$(no%)+" ne sont pas disponibles !'
      exit_sub
    end_if
    dim barre_menu_deroulant%        : ' numéro d'objet de la barre verticale
    dim n_menus_deroulants%          : ' nombre de lignes définies de niveau 1
    dim table_menus_deroulants%(50)  : ' liste des numéros d'objets de niveau 1
    dim actuel_menu_deroulant%      : ' dernier numéro d'objet créé de ligne de niveau 1
    dim i_menus_deroulants%          : ' variable d'usage interne
    dim j_menus_deroulants%          : ' variable d'usage interne
    dim k_menus_deroulants%          : ' variable d'usage interne
    dim f_menus_deroulants%          : ' variable d'usage interne
    dim actuel_menu_deroulant_y%    : ' variable à usage interne
    label click_barre_menu_deroulant : ' clic sur la barre verticale
    label click_menu_deroulant      : ' clic sur une ligne de niveau 1
    label click_menu_deroulant_ligne : ' clic sur une ligne de niveau 2
    n_menus_deroulants% = 0
  end_if
  if barre_menu_deroulant%>0        : ' est-ce que la barre verticale est déjà créée ?
    message "La barre verticale est déjà définie !"
    return
  end_if
  barre_menu_deroulant% = no%        : ' mémoriser le numéro d'objet de la barre verticale
  Panel no% : height no%,height(0)-38 : width no%,230 : top no%,0 :left no%,-220
  color no%,mr%,mg%,mb%              : ' couleur de la barre
  Alpha no%+1 : parent no%+1,barre_menu_deroulant%  : ' pour placer le "<" ou ">"
  top no%+1,height(barre_menu_deroulant%)/2  : ' placer cela au milieu du panel
  left no%+1,width(barre_menu_deroulant%)-10  : ' contre le bord droit
  caption no%+1,">"
  font_size no%+1,12 : font_bold no%
  font_color no%+1,255,0,0
  cursor_point no%+1                          : ' changer le curseur en pointeur
  on_click no%+1,click_barre_menu_deroulant : ' et lier au traitement du clic gauche
end_sub

' ====================================================================================
' Cette procédure crée un nouveau menu déroulant. Elle utilise 2 objets PICTURE.
' Paramètres:
'  no%  = numéro de l'objet de base à utiliser  (no% et no%+1 doivent être libres)
'  x%, y% = position du coin en haut à gauche du menu*
'  mr%,mg%, mb% = couleurs RGB du fond du menu
' ====================================================================================
sub nouveau_menu_deroulant(no%,x%,y%,mr%,mg%,mb%)
  if label("click_menu_deroulant")=0 : ' est-ce que l'environnement doit être initialisé ?
    if (object_exists(no%)+object_exists(no%+1))>0  : ' est-ce que les numéros d'objet sont libres ?
      message "Les objets "str$(no%)+" et/ou "+str$(no%+1)"+" ne sont pas disponibles !'
      exit_sub
    end_if
    dim barre_menu_deroulant%        : ' numéro d'objet de la barre verticale
    dim n_menus_deroulants%          : ' nombre de lignes définies de niveau 1
    dim table_menus_deroulants%(50)  : ' liste des numéros d'objets de niveau 1
    dim actuel_menu_deroulant%      : ' dernier numéro d'objet créé de ligne de niveau 1
    dim i_menus_deroulants%          : ' variable d'usage interne
    dim j_menus_deroulants%          : ' variable d'usage interne
    dim k_menus_deroulants%          : ' variable d'usage interne
    dim f_menus_deroulants%          : ' variable d'usage interne
    label click_barre_menu_deroulant : ' clic sur la barre verticale
    label click_menu_deroulant      : ' clic sur une ligne de niveau 1
    label click_menu_deroulant_ligne : ' clic sur une ligne de niveau 2
    n_menus_deroulants% = 0
  end_if
  n_menus_deroulants% = n_menus_deroulants% + 1        : ' compter cette ligne de niveau 1
  table_menus_deroulants%(n_menus_deroulants%) = no%  : ' mémoriser le numéro d'objet
  actuel_menu_deroulant% = no%                        : ' mémoriser ce numéro pour le niveau 2 à suivre
  picture no%                                          : ' créer le PICTURE
    if barre_menu_deroulant%>0 then parent no%,barre_menu_deroulant%
    top no%,y% : left no%,x% : width no%,200 : height no%,25    : ' position et dimensions
    color no%,mr%,mg%,mb%                              : ' donner la couleur de fond
  on_click no%,click_menu_deroulant                    : ' et lier au traitement du clic gauche
end_sub

' ====================================================================================
' Cette procédure écrit le titre du menu dans un menu existant.
' Paramètres:
'  no% = numéro d'objet de base du menu visé
'  titre$ = texte à afficher
'  font$ = nom de la police
'  sz% = taille de la police
'  sg%, si% = styles de la police (gras, italique): indicateurs 0/1
'  fr%, fg%, fb% = couleurs RGB de la police
' ====================================================================================
sub titre_menu_deroulant(no%,titre$,font$,sz%,sg%,si%,fr%,fg%,fb%)
  font_name no%,font$                  : ' choisir la police
  if sg%<>0 then font_bold no%        : ' passer en gras si demandé
  if si%<>0 then font_italic no%      : ' passer en italique si demandé
  font_size no%,sz%                    : ' installer la taille de la police
  font_color no%,fr%,fg%,fb%          : ' et la couleur de l'écriture
  print_target_is no%                  : ' cibler le PICTURE pour la commande PRINT
  2d_target_is no%                    : ' ainsi que pour les commandes 2D
  ' la ligne suivante utilise la couleur du PICTURE comme couleur de fond pour PRINT
  2d_fill_color color_pixel_red(no%,1,1),color_pixel_green(no%,1,1),color_pixel_blue(no%,1,1)
  print_locate 20,1                    : ' positionner le point de départ
  print titre$                        : ' écrire le titre
end_sub

' ====================================================================================
' Cette procédure prépare le corps du menu pour un certain nombre de lignes.
' Paramètres:
'  no% = numéro d'objet de base du menu visé
'  nlig% = nombre de lignes de détail pour ce menu
'  mr%, mg%, mb% = couleur RBG du fond du corps du menu
' ====================================================================================
sub corps_menu_deroulant(no%,nlig%,mr%,mg%,mb%)
  dim_local no1%                    : ' variable interne pour le PICTURE du sous-menu
  no1% = no% + 1                    : ' son numéro suit celui du PICTURE de niveau 1
  picture no1% : hide no1%          : ' créer le PICTURE et le cacher tout de suite
    if barre_menu_deroulant%>0 then parent no1%,barre_menu_deroulant%
    top no1%,top(no1%-1)+25          : ' positionner juste en-dessous du niveau 1
    left no1%,left(no1%-1)+10        : ' et légèrement à droite (meilleure visibilité)
    width no1%,200 : height no1%,25*nlig%  : ' dimensions en fonction du nombre de lignes
    color no1%,mr%,mg%,mb%          : ' installer la couleur du fond
    on_click no1%,click_menu_deroulant_ligne : ' et lier au traitement du clic gauche
end_sub

' ====================================================================================
' Cette procédure écrit une ligne de détail dans le corps d'un menu
'  no% = numéro d'objet de base du menu visé
'  nlig% = numéro de la lignevisée (1,2, ...)
'  texte$ = texte à afficher
'  font$ = police des lignes de détail
'  sz% = taille de la police
'  sg%,si% = styles de la police (gras, italique): indicateurs 0/1
'  fr%, fg%, fb% = couleurs RGB de la police
' ====================================================================================
sub ligne_menu_deroulant(no%,nlig%,texte$,font$,sz%,sg%,si%,fr%,fg%,fb%)
  dim_local no1%                    : ' variable interne pour le PICTURE du sous-menu
  no1% = no% + 1                    : ' son numéro suit celui du PICTURE de niveau 1
  print_target_is no1%              : ' cibler ce PICTURE pour PRINT
  2d_target_is no1%                  : ' ainsi que pour les commandes 2D
  ' la ligne suivante utilise la couleur du PICTURE comme couleur de fond pour PRINT
  2d_fill_color color_pixel_red(no1%,1,1),color_pixel_green(no1%,1,1),color_pixel_blue(no1%,1,1)
  print_locate 20,(nlig%-1)*25+1    : ' positionner en fonction du numéro de ligne
  font_name no1%,font$              : ' choisir la police
  if sg%<>0 then font_bold no1%      : ' passer en gras si demandé
  if si%<>0 then font_italic no1%    : ' passer en italique si demandé
  font_size no1%,sz%                : ' installer la taille de la police
  font_color no1%,fr%,fg%,fb%        : ' ainsi que la couleur de l'écriture
  print texte$                      : ' imprimer la ligne
end_sub

' ====================================================================================
' cette procédure ne doit en aucun cas être modifiée !
' ====================================================================================
click_menu_deroulant:
  for i_menus_deroulants%=1 to n_menus_deroulants% : ' boucle sur les menus niveau 1
    if table_menus_deroulants%(i_menus_deroulants%)=number_click : ' trouvé ?
      if hide(number_click+1)=1                    : ' actuellement caché ?
        if i_menus_deroulants%<n_menus_deroulants% : ' pas le dernier niveau 1
          ' décaler tous les menus suivants vers le bas
          for j_menus_deroulants%=i_menus_deroulants%+1 to n_menus_deroulants%
            top table_menus_deroulants%(j_menus_deroulants%), top(table_menus_deroulants%(j_menus_deroulants%)) + height(table_menus_deroulants%(i_menus_deroulants%)+1)
            top table_menus_deroulants%(j_menus_deroulants%)+1, top(table_menus_deroulants%(j_menus_deroulants%)+1) + height(table_menus_deroulants%(i_menus_deroulants%)+1)
          next j_menus_deroulants%
        end_if
        show number_click+1                        : ' montrer le sous-menu
      else                                        : ' actuellement visible !
        if i_menus_deroulants%<n_menus_deroulants% : ' pas le dernier niveau 1
          ' décaler tous les menus suivants vers le haut
          for j_menus_deroulants%=i_menus_deroulants%+1 to n_menus_deroulants%
            top table_menus_deroulants%(j_menus_deroulants%), top(table_menus_deroulants%(j_menus_deroulants%)) - height(table_menus_deroulants%(i_menus_deroulants%)+1)
            top table_menus_deroulants%(j_menus_deroulants%)+1, top(table_menus_deroulants%(j_menus_deroulants%)+1) - height(table_menus_deroulants%(i_menus_deroulants%)+1)
          next j_menus_deroulants%
        end_if
        hide number_click+1                        : ' cacher le sous-menu
      end_if
      return
    end_if
  next i_menus_deroulants%
  return

' ====================================================================================
' Cette routine est appelée lors d'un clic gauche sur la barre verticale
' ====================================================================================
click_barre_menu_deroulant:
  if left(barre_menu_deroulant%)<0          : ' le menu est caché ?
      for i_menus_deroulants%=1 to 220      : ' alors le faire apparaître
        left barre_menu_deroulant%,left(barre_menu_deroulant%)+1
      next i_menus_deroulants%
      caption barre_menu_deroulant%+1,"<"  : ' changer le libellé
  else                                      : ' le menu est visible ?
      for i_menus_deroulants%=1 to 220      : ' alors le faire disparaître
        left barre_menu_deroulant%,left(barre_menu_deroulant%)-1
      next i_menus_deroulants%
      caption barre_menu_deroulant%+1,">"  : ' changer le libellé
  end_if
  return

' ====================================================================================
' cette routine doit être adaptée pour lancer les fonctions de l'application !
' ====================================================================================
click_menu_deroulant_ligne:
  for i_menus_deroulants%=1 to n_menus_deroulants%  : ' boucle sur les menus de niveau 1
    if table_menus_deroulants%(i_menus_deroulants%)=number_click-1 : ' est-ce le menu choisi ?
      actuel_menu_deroulant_y% = mouse_y_left_down(number_click)  : ' récuperer la coordonnée verticale du clic
      actuel_menu_deroulant_y% = int((actuel_menu_deroulant_y%+24)/25) : ' en déduire le numéro de ligne
      ' lancer ici le traitement spécifique à cette ligne pour ce menu
      message "Menu déroulant "+str$(i_menus_deroulants%)+"  ligne "+str$(actuel_menu_deroulant_y%)
      return
    end_if
  next i_menus_deroulants%
  return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

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

MessageSujet: Re: Un menu déroulant type "Side Bar"   Mer 10 Déc 2014 - 3:33

On peut en faire un jeu, non?  
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

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

MessageSujet: Re: Un menu déroulant type "Side Bar"   Mer 10 Déc 2014 - 3:51

et pour que les tiroirs prennent moins de place, le top serait d'avoir des onglets les uns en dessous des autres avec leur nom et les attributs (couleur par exemple) liés à ce tiroir
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Mer 10 Déc 2014 - 5:35

@ Jicehel,

Tu peux adapter les codes pour arriver à cela.
Au lieu de faire un déplacement sur la position "left", tu le fait sur la position "top"
En plus tu peux avoir des tiroirs verticaux dans un tiroir latéral et inversement...
Tu peux remplacer le Alpha de la flèche ">" par un picture qui contient un pictogramme...
Tu peux avoir une série de "picture" avec des pictogrammes et cacher complètement les "Panel" qui se montrent sur le clic d' un
"picture"...

Il est un peu dommage de ne pas pouvoir adapter un alpha 
à la vertical mais cela viendra peut être un jour... Wink

Bref les possibilités sont nombreuses...

Tu peux aussi faire un petit diaporama avec "sprite" en guise de menu principal qui sur un clic développe un "Panel"...

En gros, tu peux reproduire les effets des objets utilisés dans des pages web en Panoramic. Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: Un menu déroulant type "Side Bar"   Mer 10 Déc 2014 - 12:24

Woui Wink Ca aura une bonne tete
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Un menu déroulant type "Side Bar"   

Revenir en haut Aller en bas
 
Un menu déroulant type "Side Bar"
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2
 Sujets similaires
-
» menu déroulant et opacité
» [résolu]Problème menu déroulant avec Chrome
» Menu déroulant avec un bouton
» Procédure d'utilisation des sound dans TC ™ Gold 7.0 E1
» Comment écrire juste en dessous un menu déroulant???

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: