Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Un menu déroulant type "Side Bar" | |
| | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un menu déroulant type "Side Bar" Mar 9 Déc 2014 - 14: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 - 19:20, édité 3 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un menu déroulant type "Side Bar" Mar 9 Déc 2014 - 15: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 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un menu déroulant type "Side Bar" Mar 9 Déc 2014 - 15:42 | |
| | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 9 Déc 2014 - 18:19 | |
| As tu vu la version multi-slide ?... 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 - 18:46, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un menu déroulant type "Side Bar" Mar 9 Déc 2014 - 18: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 ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Un menu déroulant type "Side Bar" Mar 9 Déc 2014 - 18: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 - 18:54, édité 1 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 9 Déc 2014 - 18:45 | |
| On peut faire pire mais est ce que je dois oser ?... Edit : @ Papydall, j' ai corrigé. et ce post parle du menu pas de l' orthographe... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Un menu déroulant type "Side Bar" Mar 9 Déc 2014 - 18:51 | |
| Bon, je viens de jeter un œil : bonne idée, merci ygeronimi. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un menu déroulant type "Side Bar" Mar 9 Déc 2014 - 19:21 | |
| Merci, Papydall. Je l'ai corrigé dans mon post sur la page précédente. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 9 Déc 2014 - 20:03 | |
| Bon, aller, j' ai osé... - 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 - 20:12, édité 1 fois (Raison : Petite correction) | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Un menu déroulant type "Side Bar" Mar 9 Déc 2014 - 23: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% ... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un menu déroulant type "Side Bar" Mar 9 Déc 2014 - 23: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 ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un menu déroulant type "Side Bar" Mer 10 Déc 2014 - 1: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
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Un menu déroulant type "Side Bar" Mer 10 Déc 2014 - 1:33 | |
| | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un menu déroulant type "Side Bar" Mer 10 Déc 2014 - 1: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 | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 10 Déc 2014 - 3: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... 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. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un menu déroulant type "Side Bar" Mer 10 Déc 2014 - 10:24 | |
| Woui Ca aura une bonne tete | |
| | | Contenu sponsorisé
| Sujet: Re: Un menu déroulant type "Side Bar" | |
| |
| | | | Un menu déroulant type "Side Bar" | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |