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 |
|
|
| Une liste avec des attributs de texte libres | |
| | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Une liste avec des attributs de texte libres Mer 14 Juil 2010 - 18:01 | |
| Suite à une question de Nardo26 dans le sujet "Un post-it sur le bureau", j'ai trouvé une solution au problème qu'il a soulevé: on ne peut pas changer les attributs de texte dans un list, pour une ligne ou une portion de texte. En effet, les commandes font_color, font_bold etc agissent globalement au niveau de la list et pas ponctuellement pour une commande item_add. J'ai donc choisi de simuler le fonctionnement d'un objet list avec une dlist assurant la fonctionnalité de gestion de liste, un picture pour assurer la partie affichage, et une scroll-bar pour assurer le défilement de l'affichage dans la liste. J'ai rendu cela paramétrable en matière de taille de l'affichage de la liste et de son positionnement. Le programme montré ci-après et suffisamment commenté; il faut cependant charger la dlist selon ses besoins, en donnant également le nombre d'enregistrements de la dlist dans la variable nombre_dans_liste%. Un click dans la liste permet de récupérer le numéro de ligne, non pas relatif à l'écran, mais par rapport à la position de la ligne affichée dans la dlist, soit le numéro absolu de la ligne J'ai aussi trouvé une solution au problème d'effacement du picture. Dans les premières versions de ce programme, je supprimais le picture pour le recréer. Très lourd, mais c'était indispensable car la commande clear ne s'applique pas à un picture. Solution trouvée: immédiatement après la création et le dimensionnement du picture, je le sauvegarde par file_save, et au moment de l'effacer, je le recharge par file_load. Effect identique à une commande clear. Ce petit fichier KGFlistattributs.bmp prend 175 ko. Voici le source: - Code:
-
label attrib_on, attrib_off, print_line, change_21, fin2, click_liste, create_picture, change_21a
dim nombre_dans_liste%, hauteur_affichage%, lignes_affichage%, largeur_affichage%, dim top_affichage%, left_affichage%, ligne_choisie% dim i%, s$, n%, code%, nr%, xx%, yy% dlist 10
' ************** la ligne suivante est à configurer lignes_affichage% = 8 : ' une ligne prend 14 pixels largeur_affichage% = 400 : ' largeur de la partie affichage de la liste top_affichage% = 30 : ' le "top" de la partie affichage left_affichage% = 90 : ' le "left" de la partie affichage item_add 10,"aaaaaaaaaa" item_add 10,"1|bbbbb [rouge] bbbbb" item_add 10,"2|ccccc [bleu gras] cccc" item_add 10,"a 1111111111" item_add 10,"b 1111111111" item_add 10,"c 1111111111" item_add 10,"d 1111111111" item_add 10,"e 1111111111" item_add 10,"f 1111111111" item_add 10,"g 1111111111" item_add 10,"h 1111111111" item_add 10,"i 1111111111" item_add 10,"j 1111111111" item_add 10,"k 1111111111" item_add 10,"l 1111111111" item_add 10,"m 1111111111" item_add 10,"n 1111111111" item_add 10,"o 1111111111" item_add 10,"p 1111111111" item_add 10,"q 1111111111" nombre_dans_liste% = 20 : ' cette variable est à charger selon le contenu de la dlist ' ************** fin de la zone configurable
' ************** paramètres calculés hauteur_affichage% = lignes_affichage%*14 : ' hauteur de l'affichage du picture et de la scroll_bar
' ************** constructions des éléments simulant une liste gosub create_picture ' donc, la première ligne du picture varie de la ligne 1 à la ligne lignes_affichage de la dlist scroll_bar 21 vertical 21 left 21,left_affichage% + largeur_affichage% + 4 top 21,top_affichage% height 21,hauteur_affichage% min 21,1 max 21,nombre_dans_liste% - lignes_affichage%+1 on_change 21,change_21
nr% = 1 : gosub change_21a : ' affichage initial end
create_picture: picture 20 print_target_is 20 width 20,largeur_affichage% height 20,hauteur_affichage% file_save 20,"kgflistattributs.bmp" premiere_fois% = 0 top 20,top_affichage% left 20,left_affichage% on_click 20,click_liste return
print_line: n% = instr(s$,"|") code% = 0 if n%>0 then code% = val(left$(s$,n%-1)) s$ = right$(s$,len(s$)-n%) n% = instr(s$,"[") if n%=0 gosub attrib_on print s$ gosub attrib_off return end_if if n%>1 print left$(s$,n%-1); s$ = right$(s$,len(s$)-n%) gosub attrib_on n% = instr(s$,"]") print left$(s$,n%-1); gosub attrib_off if n%<len(s$) then print right$(s$,len(s$)-n%-1); end_if print return attrib_on: select code% case 1 font_color 20,255,0,0 case 2 font_color 20,0,0,255 font_bold 20 end_select return
' annuler tous les attributs ' ************* annuler ici tous les nouveaux attributs créés attrib_off: font_color 20,0,0,0 font_bold_off 20 return
' gestion de la scroll_bar change_21: nr% = position(21) file_load 20,"kgflistattributs.bmp" : ' pour effacer le picture ! change_21a: print_locate 0,0 on_error_goto fin2 for i%=1 to lignes_affichage% s$ = item_read$(10,nr%+i%-1) gosub print_line next i% fin2: off_error_goto return click_liste: xx% = mouse_x_left_down(20) yy% = mouse_y_left_down(20) ligne_choisie% = nr% + int((yy%+13)/14) - 1 ' *********** ici, ajouter le traitement pour la sélection d'une ligne ! message "ligne "+str$(ligne_choisie%) return
Dernière édition par Klaus le Mer 14 Juil 2010 - 21:05, édité 2 fois | |
| | | Invité Invité
| Sujet: Re: Une liste avec des attributs de texte libres Mer 14 Juil 2010 - 19:02 | |
| D'avance je m'excuse Klaus! Dans une bande, il y a toujours un salaud. Je me proclame à l'instant et pour un temps limité: salaud du forum. J'ai modifié légèrement ton programme pour voir la suite: - Code:
-
label attrib_on, attrib_off, print_line, change_21, fin2, click_liste, create_picture, change_21a
dim nombre_dans_liste%, hauteur_affichage%, lignes_affichage%, largeur_affichage%, dim top_affichage%, left_affichage%, ligne_choisie% dim i%, s$, n%, code%, nr%, xx%, yy% dim a% , premiere_fois% list 10: left 10,450:height 10,450:width 10,230 width 0,700 ' ************** la ligne suivante est à configurer lignes_affichage% = 8 : ' une ligne prend 14 pixels largeur_affichage% = 400 : ' largeur de la partie affichage de la liste top_affichage% = 30 : ' le "top" de la partie affichage left_affichage% = 10 : ' le "left" de la partie affichage item_add 10,"aaaaaaaaaa" item_add 10,"1|bbbbb [rouge] bbbbb" item_add 10,"2|ccccc [bleu gras] cccc" item_add 10,"a 1111111111" item_add 10,"b 1111111111" item_add 10,"c 1111111111" item_add 10,"d 1111111111" item_add 10,"e 1111111111" item_add 10,"f 1111111111" item_add 10,"g 1111111111" item_add 10,"h 1111111111" item_add 10,"i 1111111111" item_add 10,"j 1111111111" item_add 10,"k 1111111111" item_add 10,"l 1111111111" item_add 10,"m 1111111111" item_add 10,"n 1111111111" item_add 10,"o 1111111111" item_add 10,"p 1111111111" item_add 10,"q 1111111111" for a%=32 to 255:item_add 10,str$(a%)+" : "+chr$(a%)+" - "+str$(count(10)+1):next a% nombre_dans_liste% = count(10):message "la liste est de "+str$(count(10))+" éléments" : ' cette variable est à charger selon le contenu de la dlist ' ************** fin de la zone configurable
' ************** paramètres calculés hauteur_affichage% = lignes_affichage%*14 : ' hauteur de l'affichage du picture et de la scroll_bar
' ************** constructions des éléments simulant une liste gosub create_picture ' donc, la première ligne du picture varie de la ligne 1 à la ligne lignes_affichage de la dlist scroll_bar 21 vertical 21 left 21,left_affichage% + largeur_affichage% + 4 top 21,top_affichage% height 21,hauteur_affichage% min 21,1 max 21,10 on_change 21,change_21
nr% = 1 : gosub change_21a : ' affichage initial end
create_picture: picture 20 print_target_is 20 width 20,largeur_affichage% height 20,hauteur_affichage% file_save 20,"kgflistattributs.bmp" premiere_fois% = 0 top 20,top_affichage% left 20,left_affichage% on_click 20,click_liste return
print_line: n% = instr(s$,"|") code% = 0 if n%>0 then code% = val(left$(s$,n%-1)) s$ = right$(s$,len(s$)-n%) n% = instr(s$,"[") if n%=0 gosub attrib_on print s$ gosub attrib_off return end_if if n%>1 print left$(s$,n%-1); s$ = right$(s$,len(s$)-n%) gosub attrib_on n% = instr(s$,"]") print left$(s$,n%-1); gosub attrib_off if n%<len(s$) then print right$(s$,len(s$)-n%-1); end_if print return
attrib_on: select code% case 1 font_color 20,255,0,0 case 2 font_color 20,0,0,255 font_bold 20 end_select return
' annuler tous les attributs ' ************* annuler ici tous les nouveaux attributs créés attrib_off: font_color 20,0,0,0 font_bold_off 20 return
' gestion de la scroll_bar change_21: nr% = position(21) if nr%>(nombre_dans_liste%-lignes_affichage%) position 21,nombre_dans_liste%-lignes_affichage%+1 return end_if file_load 20,"kgflistattributs.bmp" : ' pour effacer le picture ! change_21a: print_locate 0,0 on_error_goto fin2 for i%=1 to lignes_affichage% s$ = item_read$(10,nr%+i%-1) gosub print_line next i% fin2: off_error_goto return
click_liste: xx% = mouse_x_left_down(20) yy% = mouse_y_left_down(20) ligne_choisie% = nr% + int((yy%+13)/14) - 1 ' *********** ici, ajouter le traitement pour la sélection d'une ligne ! message "ligne "+str$(ligne_choisie%) return
Je veux voir ce que j'ai rajouté, et en cliquant sur n'importe quelle ligne, le bon élément. signature: le Salaud du forum (cette histoire me fait rire) |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une liste avec des attributs de texte libres Mer 14 Juil 2010 - 19:21 | |
| Merci pour ton test. J'ai remarqué, grâce à toi, que j'ai omis de paramétrer la commande max pour la sroll_bar. Voci, en ligne 50 de ta version (en ligne 49 de la mienne), la modification à apporter: - Code:
-
max 21,nombre_dans_liste% - lignes_affichage%+1
J'ai intégré cette modif dans le programme publié ci-dessus. Et ainsi, ma liste simulée ira jusqu'au bout, et le click sur n'importe quelle ligne renvoie bien le bon numéro. Pour les autres Panoramiciens, je précise que pour "voir" la totalité de ce qui doit s'afficher dans le cadre de gauche, c'est-à-dire dans mon picture 20, Cosmos70 a transformé ma dlist 10 en list 10 (avec les commandes de dimensions et placement). C'est utile pour tester, et c'est ainsi que j'ai testé, mais pour l'utiliser en vrai, il faut bien sûr remettre la ligne 7 en dlist ! | |
| | | Invité Invité
| Sujet: Re: Une liste avec des attributs de texte libres Mer 14 Juil 2010 - 19:34 | |
| Je viens d'apporter la correction. Une chose ne va pas. si je clique sur la dernière ligne, j'ai bien 244 comme numéro, mais l'élément en rapport ne correspond pas à la liste. Quel salaud je suis! |
| | | Invité Invité
| Sujet: Re: Une liste avec des attributs de texte libres Mer 14 Juil 2010 - 20:40 | |
| C'est un mauvais calcul du scroll_bar. Si au lieu de déplacer l'ascenseur, on clique sur les flèches de celui-ci, on descend jusqu'au 243 ème élément (sur 244)
A noter: la grande idée de ton programme est d'avoir utilisé un scroll_bar à part, alors que moi, j'augmentais la hauteur du picture pour avoir l'ascenseur.
Mais je ne pourrais pas utiliser ce système, il faut à chaque fois réécrire les lignes depuis le haut du picture, et moi avec les multiples cellules et les multiples attributs (couleur fond et lettres de chaque cellule, fonte différente,hauteur différente, gras, italique... pour chacune des cellules, le temps de calcul est trop long et pas exploitable). il faudrait descendre/monter par palier. Hors sujet ici. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une liste avec des attributs de texte libres Mer 14 Juil 2010 - 21:04 | |
| Tu as raison: les lignes 112 à 115 dans ta version (lignes 111 à 114 dans ma version) sont obsolètes et doivent être supprimées. Je l'ai fait dans ma version postée ci-dessus. Désolé pour ce résidu d'avant l'utilisation de la commande max en ligne 50 de ta version (49 de la mienne). | |
| | | Invité Invité
| Sujet: Re: Une liste avec des attributs de texte libres Mer 14 Juil 2010 - 21:31 | |
| Là tu as réussi, tout est correct, il n'y a plus pour un item, montrer en inverse ou autre la ligne clickée. Bon travail. Le salaud du forum laisse sa place à qui veut la prendre. Alors qui?. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une liste avec des attributs de texte libres Mer 14 Juil 2010 - 21:58 | |
| Qu'à cela ne tienne: voici ma version avec le marquage de la ligne sélectionnée, et la tienne par la suite: Version de Klaus: - Code:
-
label attrib_on, attrib_off, print_line, change_21, fin2, click_liste, create_picture label change_21a, change_21b
dim nombre_dans_liste%, hauteur_affichage%, lignes_affichage%, largeur_affichage%, dim top_affichage%, left_affichage%, ligne_choisie%, ligne_selection% dim i%, s$, n%, code%, nr%, xx%, yy% dim premiere_fois% dlist 10
' ************** la ligne suivante est à configurer lignes_affichage% = 8 : ' une ligne prend 14 pixels largeur_affichage% = 400 : ' largeur de la partie affichage de la liste top_affichage% = 30 : ' le "top" de la partie affichage left_affichage% = 90 : ' le "left" de la partie affichage item_add 10,"aaaaaaaaaa" item_add 10,"1|bbbbb [rouge] bbbbb" item_add 10,"2|ccccc [bleu gras] cccc" item_add 10,"a 1111111111" item_add 10,"b 1111111111" item_add 10,"c 1111111111" item_add 10,"d 1111111111" item_add 10,"e 1111111111" item_add 10,"f 1111111111" item_add 10,"g 1111111111" item_add 10,"h 1111111111" item_add 10,"i 1111111111" item_add 10,"j 1111111111" item_add 10,"k 1111111111" item_add 10,"l 1111111111" item_add 10,"m 1111111111" item_add 10,"n 1111111111" item_add 10,"o 1111111111" item_add 10,"p 1111111111" item_add 10,"q 1111111111" nombre_dans_liste% = 20 : ' cette variable est à charger selon le contenu de la dlist ' ************** fin de la zone configurable
' ************** paramètres calculés hauteur_affichage% = lignes_affichage%*14 : ' hauteur de l'affichage du picture et de la scroll_bar
' ************** constructions des éléments simulant une liste gosub create_picture ' donc, la première ligne du picture varie de la ligne 1 à la ligne lignes_affichage de la dlist scroll_bar 21 vertical 21 left 21,left_affichage% + largeur_affichage% + 4 top 21,top_affichage% height 21,hauteur_affichage% min 21,1 max 21,nombre_dans_liste% - lignes_affichage%+1 on_change 21,change_21
nr% = 1 : gosub change_21a : ' affichage initial end
create_picture: picture 20 print_target_is 20 width 20,largeur_affichage% height 20,hauteur_affichage% file_save 20,"kgflistattributs.bmp" premiere_fois% = 0 top 20,top_affichage% left 20,left_affichage% on_click 20,click_liste return
print_line: if ligne_selection%=1 then print "=> "; n% = instr(s$,"|") code% = 0 if n%>0 then code% = val(left$(s$,n%-1)) s$ = right$(s$,len(s$)-n%) n% = instr(s$,"[") if n%=0 gosub attrib_on print s$ gosub attrib_off return end_if if n%>1 print left$(s$,n%-1); s$ = right$(s$,len(s$)-n%) gosub attrib_on n% = instr(s$,"]") print left$(s$,n%-1); gosub attrib_off if n%<len(s$) then print right$(s$,len(s$)-n%-1); end_if print return attrib_on: select code% case 1 font_color 20,255,0,0 case 2 font_color 20,0,0,255 font_bold 20 end_select return
' annuler tous les attributs ' ************* annuler ici tous les nouveaux attributs créés attrib_off: font_color 20,0,0,0 font_bold_off 20 return
' gestion de la scroll_bar change_21: nr% = position(21) change_21b: file_load 20,"kgflistattributs.bmp" : ' pour effacer le picture change_21a: print_locate 0,0 on_error_goto fin2 for i%=1 to lignes_affichage% s$ = item_read$(10,nr%+i%-1) ligne_selection% = 0 if nr%+i%-1=ligne_choisie% then ligne_selection% = 1 gosub print_line next i% fin2: off_error_goto return click_liste: xx% = mouse_x_left_down(20) yy% = mouse_y_left_down(20) ligne_choisie% = nr% + int((yy%+13)/14) - 1 gosub change_21b ' *********** ici, ajouter le traitement pour la sélection d'une ligne ! message "ligne "+str$(ligne_choisie%) return Version de Cosmos70: - Code:
-
label attrib_on, attrib_off, print_line, change_21, fin2, click_liste, create_picture label change_21a, change_21b
dim nombre_dans_liste%, hauteur_affichage%, lignes_affichage%, largeur_affichage%, dim top_affichage%, left_affichage%, ligne_choisie%, ligne_selection% dim i%, s$, n%, code%, nr%, xx%, yy% dim a% , premiere_fois% list 10: left 10,450:height 10,450:width 10,230 width 0,700 ' ************** la ligne suivante est à configurer lignes_affichage% = 8 : ' une ligne prend 14 pixels largeur_affichage% = 400 : ' largeur de la partie affichage de la liste top_affichage% = 30 : ' le "top" de la partie affichage left_affichage% = 10 : ' le "left" de la partie affichage item_add 10,"aaaaaaaaaa" item_add 10,"1|bbbbb [rouge] bbbbb" item_add 10,"2|ccccc [bleu gras] cccc" item_add 10,"a 1111111111" item_add 10,"b 1111111111" item_add 10,"c 1111111111" item_add 10,"d 1111111111" item_add 10,"e 1111111111" item_add 10,"f 1111111111" item_add 10,"g 1111111111" item_add 10,"h 1111111111" item_add 10,"i 1111111111" item_add 10,"j 1111111111" item_add 10,"k 1111111111" item_add 10,"l 1111111111" item_add 10,"m 1111111111" item_add 10,"n 1111111111" item_add 10,"o 1111111111" item_add 10,"p 1111111111" item_add 10,"q 1111111111" for a%=32 to 255:item_add 10,str$(a%)+" : "+chr$(a%)+" - "+str$(count(10)+1):next a% nombre_dans_liste% = count(10):message "la liste est de "+str$(count(10))+" éléments" : ' cette variable est à charger selon le contenu de la dlist ' ************** fin de la zone configurable
' ************** paramètres calculés hauteur_affichage% = lignes_affichage%*14 : ' hauteur de l'affichage du picture et de la scroll_bar
' ************** constructions des éléments simulant une liste gosub create_picture ' donc, la première ligne du picture varie de la ligne 1 à la ligne lignes_affichage de la dlist scroll_bar 21 vertical 21 left 21,left_affichage% + largeur_affichage% + 4 top 21,top_affichage% height 21,hauteur_affichage% min 21,1 max 21,nombre_dans_liste% - lignes_affichage%+1 on_change 21,change_21
nr% = 1 : gosub change_21a : ' affichage initial end
create_picture: picture 20 print_target_is 20 width 20,largeur_affichage% height 20,hauteur_affichage% file_save 20,"kgflistattributs.bmp" premiere_fois% = 0 top 20,top_affichage% left 20,left_affichage% on_click 20,click_liste return
print_line: if ligne_selection%=1 then print "=> "; n% = instr(s$,"|") code% = 0 if n%>0 then code% = val(left$(s$,n%-1)) s$ = right$(s$,len(s$)-n%) n% = instr(s$,"[") if n%=0 gosub attrib_on print s$ gosub attrib_off return end_if if n%>1 print left$(s$,n%-1); s$ = right$(s$,len(s$)-n%) gosub attrib_on n% = instr(s$,"]") print left$(s$,n%-1); gosub attrib_off if n%<len(s$) then print right$(s$,len(s$)-n%-1); end_if print return
attrib_on: select code% case 1 font_color 20,255,0,0 case 2 font_color 20,0,0,255 font_bold 20 end_select return
' annuler tous les attributs ' ************* annuler ici tous les nouveaux attributs créés attrib_off: font_color 20,0,0,0 font_bold_off 20 return
' gestion de la scroll_bar change_21: nr% = position(21) change_21b: file_load 20,"kgflistattributs.bmp" : ' pour effacer le picture ! change_21a: print_locate 0,0 on_error_goto fin2 for i%=1 to lignes_affichage% ligne_selection% = 0 if nr%+i%-1=ligne_choisie% then ligne_selection% = 1 s$ = item_read$(10,nr%+i%-1) gosub print_line next i% fin2: off_error_goto return
click_liste: xx% = mouse_x_left_down(20) yy% = mouse_y_left_down(20) ligne_choisie% = nr% + int((yy%+13)/14) - 1 gosub change_21b ' *********** ici, ajouter le traitement pour la sélection d'une ligne ! message "ligne "+str$(ligne_choisie%) return
| |
| | | Invité Invité
| Sujet: Re: Une liste avec des attributs de texte libres Mer 14 Juil 2010 - 22:02 | |
| Très bien, mais la mienne était juste pour contrôler ton programme, et je crois que j'ai eu raison. Cette version n'a plus lieu d'être.
Je constate que tu n'as pas utilisé les attribut de couleurs. C'était le souhait de Nardo je crois. Toujours est-il que les lignes sont écritent
Une seule remarque: tu as utilisé file save et file load pour effacer le picture. Tu sais que 2d_clear fait la même chose. je rajoute parce que tu dois pas avoir l'habitude avec Panoramic de faire du 2d, qu'il y a avant 2d_target_is N, pour le cas que tu aurais eu un problème. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une liste avec des attributs de texte libres Mer 14 Juil 2010 - 22:52 | |
| Merci pour ton encouragement. Il est vrai que ta critique constructive m'a aidé à finir cette version. Tel que c'est réalisé, je peux utiliser n'importe quel attribut pour marquer la ligne sélectionnée. Ce qui ne marche pas, c'est l'écriture sur un FOND d'une autre couleur. Dommage. J'ai réservé les attributs couleur (ou autre font_name, font_bold etc pour relever tout ou partie d'une ligne, ce qui est un exploit pour un objet de type liste. Mais j'ai ajouté une variable mode_selection% que l'on peut positionner pour révéler la ligne sélectionnée, soit par la flèche, soit par l'écriture en gras, soit par l'écriture en souligné. On peut imaginer d'autres modes: c'est documentgé dans le source. J'ai ajouté un sélecteur de mode de révélation dans le programme de démo que voici: - Code:
-
label attrib_on, attrib_off, print_line, change_21, fin2, click_liste, create_picture label rev_0, rev_1, rev_2, rev_3 label change_21a, change_21b, select_on, select_off, choix_revelation
dim nombre_dans_liste%, hauteur_affichage%, lignes_affichage%, largeur_affichage%, dim top_affichage%, left_affichage%, ligne_choisie%, ligne_selection%, mode_selection% dim i%, s$, n%, code%, nr%, xx%, yy% dim premiere_fois% dlist 10
gosub choix_revelation
' ************** la ligne suivante est à configurer lignes_affichage% = 8 : ' une ligne prend 14 pixels largeur_affichage% = 400 : ' largeur de la partie affichage de la liste top_affichage% = 120 : ' le "top" de la partie affichage left_affichage% = 90 : ' le "left" de la partie affichage ' mode_selection% = 0 : ' ligne sélectionnée n'est pas relevée ' mode_selection% = 1 : ' ligne sélectionnée est relevée par "=> " ' mode_selection% = 2 : ' ligne sélectionnée est relevée par font_bold ' mode_selection% = 3 : ' ligne selectionnée est relevée par fon_underline ' **** ici, d'autres modes de révélation de la ligne sélectionnée peuvent être définis item_add 10,"aaaaaaaaaa" item_add 10,"1|bbbbb [rouge] bbbbb" item_add 10,"2|ccccc [bleu gras] cccc" item_add 10,"a 1111111111" item_add 10,"b 1111111111" item_add 10,"c 1111111111" item_add 10,"d 1111111111" item_add 10,"e 1111111111" item_add 10,"f 1111111111" item_add 10,"g 1111111111" item_add 10,"h 1111111111" item_add 10,"i 1111111111" item_add 10,"j 1111111111" item_add 10,"k 1111111111" item_add 10,"l 1111111111" item_add 10,"m 1111111111" item_add 10,"n 1111111111" item_add 10,"o 1111111111" item_add 10,"p 1111111111" item_add 10,"q 1111111111" ' ************** fin de la zone configurable
' ************** paramètres calculés nombre_dans_liste% = count(10) : ' on prend le nombre de lignes dans la liste hauteur_affichage% = lignes_affichage%*14 : ' hauteur de l'affichage du picture et de la scroll_bar
' ************** constructions des éléments simulant une liste gosub create_picture ' donc, la première ligne du picture varie de la ligne 1 à la ligne lignes_affichage de la dlist scroll_bar 21 vertical 21 left 21,left_affichage% + largeur_affichage% + 4 top 21,top_affichage% height 21,hauteur_affichage% min 21,1 max 21,nombre_dans_liste% - lignes_affichage%+1 on_change 21,change_21
nr% = 1 : gosub change_21a : ' affichage initial end
create_picture: picture 20 print_target_is 20 width 20,largeur_affichage% height 20,hauteur_affichage% file_save 20,"kgflistattributs.bmp" premiere_fois% = 0 top 20,top_affichage% left 20,left_affichage% on_click 20,click_liste return
print_line: if ligne_selection%=1 then gosub select_on n% = instr(s$,"|") code% = 0 if n%>0 then code% = val(left$(s$,n%-1)) s$ = right$(s$,len(s$)-n%) n% = instr(s$,"[") if n%=0 gosub attrib_on print s$ gosub attrib_off gosub select_off return end_if if n%>1 print left$(s$,n%-1); s$ = right$(s$,len(s$)-n%) gosub attrib_on n% = instr(s$,"]") print left$(s$,n%-1); gosub attrib_off if n%<len(s$) then print right$(s$,len(s$)-n%-1); end_if gosub select_off print return select_on: select mode_selection% case 0: ' rien à faire dans ce cas case 1: print "=> "; : ' révéler par une flèche case 2: font_bold 20 : ' révéler par le gras case 3: font_underline 20 : ' révéler par le sousligné ' *** ici, d'autres modes de révélation de la ligne sélectionnée peuvent être définis end_select return select_off: select mode_selection% case 0: ' rien à faire dans ce cas case 1: ' rien à faire dans ce cas case 2: font_bold_off 20 : ' enlever le gras case 3: font_underline_off 20 : ' enlever le sousligné ' *** ici, d'autres modes de révélation de la ligne sélectionnée peuvent être définis end_select return attrib_on: select code% case 1 font_color 20,255,0,0 case 2 font_color 20,0,0,255 font_bold 20 end_select return
' annuler tous les attributs ' ************* annuler ici tous les nouveaux attributs créés attrib_off: font_color 20,0,0,0 if (ligne_selection%=0) or (mode_selection%<>2) then font_bold_off 20 return
' gestion de la scroll_bar change_21: nr% = position(21) change_21b: file_load 20,"kgflistattributs.bmp" : ' pour effacer le picture change_21a: print_locate 0,0 on_error_goto fin2 for i%=1 to lignes_affichage% s$ = item_read$(10,nr%+i%-1) ligne_selection% = 0 if nr%+i%-1=ligne_choisie% then ligne_selection% = 1 gosub print_line next i% fin2: off_error_goto return click_liste: xx% = mouse_x_left_down(20) yy% = mouse_y_left_down(20) ligne_choisie% = nr% + int((yy%+13)/14) - 1 gosub change_21b ' *********** ici, ajouter le traitement pour la sélection d'une ligne ! message "ligne "+str$(ligne_choisie%) return ' choisir le mode de révélation des lignes délectionnées choix_revelation: container_option 1 : top 1,10 : left 1,10 : height 1,100 caption 1,"Révélation de ligne sélectionnée" option 2 : parent 2,1 : caption 2,".../..." : top 2,20 : left 2,10 : on_click 2,rev_0 option 3 : parent 3,1 : caption 3,"par flèche =>" : top 3,40 : left 3,10 : on_click 3,rev_1 option 4 : parent 4,1 : caption 4,"par écriture en gras" : top 4,60 : left 4,10 : on_click 4,rev_2 option 5 : parent 5,1 : caption 5,"par écriture soulignée" : top 5,80 : left 5,10 : on_click 5,rev_3 return rev_0: mode_selection% = 0 : return rev_1: mode_selection% = 1 : return rev_2: mode_selection% = 2 : return rev_3: mode_selection% = 3 : return
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une liste avec des attributs de texte libres Mer 14 Juil 2010 - 23:07 | |
| Très intéressant tout ça, à garder sous le coude. Merci à vous deux. | |
| | | Invité Invité
| Sujet: Re: Une liste avec des attributs de texte libres Mer 14 Juil 2010 - 23:35 | |
| Pourquoi tu dis que tu ne peux pas afficher sur un fond d'une autre couleur? Que veux-tu faire?
Je viens d'essayer. Pour imprimer une ligne en fond de couleur: 2d_fill_color r,g,b si tu connais parfaitement les coordonnées de la ligne sélectionnée: tu rajoutes: 2d_pen_color r,g,b même valeur que 2d_fill_color et 2d_rectangle ensuite tu écris après avoir mis la couleur sur la fonte: font_color N,r,g,b
Autre chose: pour que ton programme soit parfait: enlève moi ce FILE_SAVE et FILE_LOAD. utilise simplement 2d_clear, ça suffit pour effacer le picture. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 0:39 | |
| Encore une fois, merci pour ta critique constructive. J'ai encore appris quelque chose. Et j'ai appliqué tes deux conseils, voici le résultat: Ceci est la version à jour ! - Code:
-
label attrib_on, attrib_off, print_line, change_21, fin2, click_liste, create_picture label rev_0, rev_1, rev_2, rev_3, rev_4 label change_21a, change_21b, select_on, select_off, choix_revelation
dim nombre_dans_liste%, hauteur_affichage%, lignes_affichage%, largeur_affichage%, dim top_affichage%, left_affichage%, ligne_choisie%, ligne_selection%, mode_selection% dim i%, s$, n%, code%, nr%, xx%, yy%, x1%, y1% dim premiere_fois% dlist 10
gosub choix_revelation : ' pour la démo ! normalement, voir lignes 17 à 21 !
' ************** la ligne suivante est à configurer lignes_affichage% = 8 : ' une ligne prend 14 pixels largeur_affichage% = 400 : ' largeur de la partie affichage de la liste top_affichage% = 150 : ' le "top" de la partie affichage left_affichage% = 90 : ' le "left" de la partie affichage ' mode_selection% = 0 : ' ligne sélectionnée n'est pas relevée ' mode_selection% = 1 : ' ligne sélectionnée est relevée par "=> " ' mode_selection% = 2 : ' ligne sélectionnée est relevée par font_bold ' mode_selection% = 3 : ' ligne selectionnée est relevée par fon_underline ' mode_selection% = 4 : ' ligne sélectionnée écrite en blanc sur fond bleu ' **** ici, d'autres modes de révélation de la ligne sélectionnée peuvent être définis item_add 10,"aaaaaaaaaa" item_add 10,"1|bbbbb [rouge] bbbbb" item_add 10,"2|ccccc [bleu gras] cccc" item_add 10,"a 1111111111" item_add 10,"b 1111111111" item_add 10,"c 1111111111" item_add 10,"d 1111111111" item_add 10,"e 1111111111" item_add 10,"f 1111111111" item_add 10,"g 1111111111" item_add 10,"h 1111111111" item_add 10,"i 1111111111" item_add 10,"j 1111111111" item_add 10,"k 1111111111" item_add 10,"l 1111111111" item_add 10,"m 1111111111" item_add 10,"n 1111111111" item_add 10,"o 1111111111" item_add 10,"p 1111111111" item_add 10,"q 1111111111" ' ************** fin de la zone configurable
' ************** paramètres calculés nombre_dans_liste% = count(10) : ' on prend le nombre de lignes dans la liste hauteur_affichage% = lignes_affichage%*14 : ' hauteur de l'affichage du picture et de la scroll_bar
' ************** constructions des éléments simulant une liste gosub create_picture ' donc, la première ligne du picture varie de la ligne 1 à la ligne lignes_affichage de la dlist scroll_bar 21 vertical 21 left 21,left_affichage% + largeur_affichage% + 4 top 21,top_affichage% height 21,hauteur_affichage% min 21,1 max 21,nombre_dans_liste% - lignes_affichage%+1 on_change 21,change_21
nr% = 1 : gosub change_21a : ' affichage initial end
create_picture: picture 20 print_target_is 20 2d_target_is 20 width 20,largeur_affichage% height 20,hauteur_affichage% top 20,top_affichage% left 20,left_affichage% on_click 20,click_liste return
print_line: if ligne_selection%=1 then gosub select_on n% = instr(s$,"|") code% = 0 if n%>0 then code% = val(left$(s$,n%-1)) s$ = right$(s$,len(s$)-n%) n% = instr(s$,"[") if n%=0 gosub attrib_on print s$ gosub attrib_off gosub select_off return end_if if n%>1 print left$(s$,n%-1); s$ = right$(s$,len(s$)-n%) gosub attrib_on n% = instr(s$,"]") print left$(s$,n%-1); gosub attrib_off if n%<len(s$) then print right$(s$,len(s$)-n%-1); end_if gosub select_off print return select_on: select mode_selection% case 0: ' rien à faire dans ce cas case 1: print "=> "; : ' révéler par une flèche case 2: font_bold 20 : ' révéler par le gras case 3: font_underline 20 : ' révéler par le sousligné case 4 x1% = 0 : y1% = (i%-1)*14 2d_fill_color 0,0,255 : 2d_pen_color 0,0,255 2d_rectangle x1%,y1%,x1%+largeur_affichage%,y1%+14 font_color 20,255,255,255 ' *** ici, d'autres modes de révélation de la ligne sélectionnée peuvent être définis end_select return select_off: select mode_selection% case 0: ' rien à faire dans ce cas case 1: ' rien à faire dans ce cas case 2: font_bold_off 20 : ' enlever le gras case 3: font_underline_off 20 : ' enlever le sousligné case 4 2d_fill_color 255,255,255 : 2d_pen_color 255,255,255 : font_color 20,0,0,0 ' *** ici, d'autres modes de révélation de la ligne sélectionnée peuvent être définis end_select return attrib_on: select code% case 1 font_color 20,255,0,0 case 2 font_color 20,0,0,255 font_bold 20 end_select return
' annuler tous les attributs ' ************* annuler ici tous les nouveaux attributs créés attrib_off: font_color 20,0,0,0 if (ligne_selection%=0) or (mode_selection%<>2) then font_bold_off 20 return
' gestion de la scroll_bar change_21: nr% = position(21) change_21b: 2d_clear change_21a: print_locate 0,0 on_error_goto fin2 for i%=1 to lignes_affichage% s$ = item_read$(10,nr%+i%-1) ligne_selection% = 0 if nr%+i%-1=ligne_choisie% then ligne_selection% = 1 gosub print_line next i% fin2: off_error_goto return click_liste: xx% = mouse_x_left_down(20) yy% = mouse_y_left_down(20) ligne_choisie% = nr% + int((yy%+13)/14) - 1 gosub change_21b ' *********** ici, ajouter le traitement pour la sélection d'une ligne ! message "ligne "+str$(ligne_choisie%) return ' choisir le mode de révélation des lignes délectionnées choix_revelation: container_option 1 : top 1,10 : left 1,10 : height 1,120 : width 1,200 caption 1,"Révélation de ligne sélectionnée" option 2 : parent 2,1 : caption 2,".../..." : top 2,20 : left 2,10 : on_click 2,rev_0 option 3 : parent 3,1 : caption 3,"par flèche =>" : top 3,40 : left 3,10 : on_click 3,rev_1 option 4 : parent 4,1 : caption 4,"par écriture en gras" : top 4,60 : left 4,10 : on_click 4,rev_2 option 5 : parent 5,1 : caption 5,"par écriture soulignée" : top 5,80 : left 5,10 : on_click 5,rev_3 option 6 : parent 6,1 : caption 6,"par écriture blanche sur fond bleu" : width 6,180 : top 6,100 : left 6,10 : on_click 6,rev_4 return rev_0: mode_selection% = 0 : return rev_1: mode_selection% = 1 : return rev_2: mode_selection% = 2 : return rev_3: mode_selection% = 3 : return rev_4: mode_selection% = 4 : return
Dernière édition par Klaus le Jeu 15 Juil 2010 - 10:31, édité 2 fois | |
| | | Invité Invité
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 3:00 | |
| Bravo! Maintenant la parole est à Nardo! Bonne nuit!
Je viens de voir un résidu qui ne sert à rien. La variable: premiere_fois% |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 9:34 | |
| Tu as encore une fois raison - je l'enlève !
| |
| | | Invité Invité
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 9:35 | |
| Puisqu'on est dans le PLUS de Panoramic, je me disais qu'il serait chouette de rajouter un fond de couleur dans la liste je veux dire picture: 9a marche (la ligne écrite en rouge), sauf que j'ai pas réussi de le faire à l'initialisation (avant 1er clic) De toute façon c'est du superflu! image de base pour celui qui veux s'amuser: |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 9:53 | |
| Les flammes de l'enfer... Je dis un GRAND BRAVO à KLAUS et à COSMOS70 pour cette demonstraion que l'on pourrait appelé "Comment tansformer un PICTURE en LIST" En regardant le sujet pas à pas, on voit la progression et cet échange montre que l'on peut coder à plusieurs par le biais du forum. J'ai réussi, en lisant le sujet ce matin, à comprendre presque tout. (Un peu larger avant de comprendre ce qu'on entendait par révélation) RE BRAVO, c'est du grand art.
Dernière édition par Jean Claude le Jeu 15 Juil 2010 - 13:24, édité 2 fois | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 10:52 | |
| Bravo ! Super boulot les gars!
Vraiment, c'est tip-top !
Quand je vois le travail qui a été réalisé suite à une petite remarque qui a été lancée "comme ça" dans un post, cela m'interpelle : Je pense que pour des fonctions comme celle-ci, il serait intéressant d'avoir une rubrique spéciale dans le forum (en prévision d'une éventuelle gestion de plugins...)
Cela serait vraiment dommage, pour tous, de réinventer à chaque fois la roue alors que des gens se sont déjà creuser la tête (pour être poli) pour créer une nouvelle fonctionnalité dans panoramic...
Je vais bientôt partir en vacances donc je n'aurais pas beaucoup de temps à consacrer à Panoramic, mais dès mon retour (dans une petite semaine), j'essayerai de normaliser tout ça de manière à pouvoir l'utiliser par la suite à l'aide d'include...
Mon plan serait de : (ce ne sont que des suggestions, vous me direz ce que vous en pensez)
- Avoir un appel de fonction d'ordre général: Create_GList (ou un autre nom c'est un exemple) avec une chaine de paramètre d'initialisation genre GList_init$ avec dedans: "N:n°Id|W:width%|H:height%|T:top%|L:left%|R:revelation%"
- Avoir des sous-fonctions permettant de manipuler les différents éléments:
-GList_Add :ajout d'un item[/list] chaine de paramétrage : GList_pAdd$ contenant le texte + attribut - GList_Sup : suppression d'un item variable de paramétrage : GList_pSup% contenant le n° de la ligne à supprimer - Autres.... à définir en fct des besoins.
- Une procédure de traitement GList_Traite dont le nom sera défini en dur (car appelée par ex en ligne 171) qu'on laissera le soin à l'utilisateur d'écrire...
Qu'en pensez vous ?
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 11:02 | |
| Il faudrait aussi prévoir une fonction de définition d'attribut car ceux que j'ai prévus (écrire en rouge ou en bleu gras) ne sont que des exemples)...
C'est effectivement un cas d'école pour un plug_in. Réaliser cela par un module INCLUDE avec forcément des variables pour passer les infos sera assez lourd et contraignant. J'attends impatiemment la possibilité de faire des inlcude - j'ai d'autres éléments en réserve que j'aimerais bien mettre à disposition sous cette forme. C'est un petit appel du pied à Jack... | |
| | | Invité Invité
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 11:09 | |
| Je ne vais pas répondre à cela maintenant. Je ne suis pas expert, et j'ai besoin de comprendre. Mon intervention à l'instant est une remarque sur les images précédentes. Je croyais que la chose avait été corrigée. Si j'utilise Stretch_on pour l'image, le texte qu'on applique ensuite est "stretcher" comme l'image, et cela me parait être une erreur, même un BUG. Si je mets une image que j'adapte au dimension du picture, c'est pour que celle-ci serve de fond. A partir de là, je conçois mal que le texte est des proportions modifiées en fonction de l'image. Pour moi: 1er temps, je mets une image que j'adapte. 2ème temps, j'écris sur le Picture, et je veux que cela soit conforme aux paramètres du texte. ça me parait logique.
J'avais oublié de le noter tout-à l'heure. |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 11:21 | |
| Pour répondre à Klaus : Oui je suis bien d'accord avec toi, c'est un peu lourd l'utilisation de variables pour des paramètres, mais à défaut de plugins...(un autre appel du pied ) on peut toujours prévoir à l'avance, et écrire les progs dans cette optique...
Pour les attributs, je suis resté volontairement dans le vague mais bien entendu il va falloir définir une syntaxe...
Je me répète : vraiment du super boulot !
| |
| | | Invité Invité
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 12:22 | |
| Je me suis dit qu'il faudrait que je fasse une mise au point, après les félicitations de plusieurs d'entre-vous.
Le programme a été fait par Klaus, et ma participation est vraiment mineur. Voir quelques erreurs n'est pas un sujet de félicitation pour moi. Je connaissais le problème, pour avoir essayé avec mon prg sur les cellules, mais si la tache est similaire, il y a le facteur temps qui m'empêche de faire la même chose. Il y a trop de paramètres sur les attributs à chaque cellule pour que la même chose soit applicable. On ne va pas attendre 5/10 secondes ou plus pour que le texte soit réécrit à chaque descente de lignes. Donc bravo Klaus! J'ai seulement vu que tu avais quelques lacunes avec la 2D Panoramic, car à ma connaissance, tu n'avais que très peu exploité ces fonctions.
Pour ce qui est des Plugins, je n'y connais pas grand chose. C'est vous les spécialistes. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 12:32 | |
| @Cosmos70: J'avais essayé l'histoire de l'image de fond, mais cela pose problème. Soit un l'utilise tel quel et la dimension du picture s'adapte à l'image et on perd le contrôle des lignes, soit on met stretch_on, mais cela s'applique partout, même sur le texte envoyé ultérieurement par print. Donc, aussi tentant que cela soit, j'ai renoncé pour le moment à utiliser une image de fond.
EDIT: tu as raison, je m'y connais mal el 2d, et encore moins en 3d. Mais je vais m'y mettre, c'est promis. J'ai bien compris l'intérêt !
@Nardo26: je suis bien d'accord avec toi, et j'adapte le programme dans ce sens, progressivement. A bien y réfléchr, je pense qu'un plug-in ne conviendrait peut-être pas. Un plug-in sera certainement réalisé par un module dans un langage externe comme Delphi pour être lié à l'éditeur d'une manière à définir et pour être intégré dans le *.exe au moment de la création de l'exe.
Mais il y a un moment déjà, Jack nous avait promis une commande CALL avec des paramètres formels pour le passage de paramêtres (Tu te souviens, Jack ? Tu avais dit que cela serait possible même sans avoir un compilateur à double passe). Ce serait la solution idéale pour des modules réalisés en Panoramic. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 13:23 | |
| - Citation :
- Je me suis dit qu'il faudrait que je fasse une mise au point, après les félicitations de plusieurs d'entre-vous.
Le programme a été fait par Klaus, et ma participation est vraiment mineur. Voir quelques erreurs n'est pas un sujet de félicitation pour moi.
Je suis d'accord avec toi Cosmos, j'ai voulu simplement souligné que vous avez eu tous les deux un échange fructueux et que j'en ai bien profité. @Klaus, milles excuses car j'ai ajouté un S à ton nom ( je rectifie de suite) ET RE BRAVO | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 13:37 | |
| @Jean-Claude : +1 C'est ce que j'aime bien dans les forums panoramic: l'entre-aide ! L'échange d'idées, il n'y a que ça de vrai. Cela permet de suivre le cheminement d'une réflexion, d'apprendre et d'apporter chacun sa petite pierre à l'édifice.
@Klaus: Il est vrai que la notion de plug-in n'a pas vraiment de sens pour des routines en panoramic par contre si on pouvait faire des appels à celles-ci avec des paramètres... cela serait vraiment un plus !!! idem pour la notion de variables locales...
| |
| | | Contenu sponsorisé
| Sujet: Re: Une liste avec des attributs de texte libres | |
| |
| | | | Une liste avec des attributs de texte libres | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |