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 |
---|
Invité Invité
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 13:47 | |
| - Citation :
- Soit un l'utilise tel quel et la dimension du picture s'adapte à l'image et on perd le contrôle des lignes
J'ai repris en parti le programme et le contrôle des lignes s'adapte. J'ai rien changé à la structure (j'ai compressé un peu pour diminuer la place ici), seulement rajouté l'image plus haut qui est dans le chemin de f$ et quelques attributs pour l'affichage. J'ai pas perdu le contrôle. Le seul hic, est que avant de faire le 1er clic, j'ai pas encore réussi à afficher les lignes dans le fondu de l'image. Il faut que je clic 1 fois sur 1 ligne, et il reste la 1ère ligne qui n'est pas fondu aussi. Après tout fonctionne normalement. Essayes et apportes su tu veux les modifications. Tu verras que le contrôle est respecté. Normalement c'est ton programme et je ne devrais pas y toucher. - 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% , f$ dlist 10 f$="C:/TESTE/écran.bmp"
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% = 150 : ' 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" for i%=32 to 255:item_add 10,str$(i%)+" : "+chr$(i%)+" "+str$(count(10)+1):next i% ' ************** 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 gosub change_21b mark_on 6 :rem "RAJOUTÉ" 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% file_load 20,f$: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 then gosub attrib_on :print s$ :gosub attrib_off:gosub select_off:return
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,0 : 2d_pen_color 0,0,255:font_color 20,255,0,0 :font_bold 20 ' 2d_rectangle x1%,y1%,x1%+largeur_affichage%,y1%+14 ' *** 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 0,0,0 : 2d_pen_color 255,255,255 : 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
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 file_load 20,f$ 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
Amicalement Pour ce qui est de stretch_on. A éviter, et je ne sais pas ce que toi et les autres en penssez, mais pour moi, il s'agit d'un BUG avec l'affichage du texte.
Dernière édition par cosmos70 le Jeu 15 Juil 2010 - 13:49, édité 1 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 - 13:49 | |
| Pouvoir faire un call monprogramme(par1,par2) ainsi que des directives private_on et private_off pour la déclaration de variables, cela a été demandé depuis longtemps; Jack en a pris note et n'a pas refusé. Alors, il faut espérer et, pourquoi pas, se mettre à plusieurs pour dire à Jack que cela peut nous être utile ainsi qu'à la communauté Panoramic toute entière. Après tout, Jack a promis assez rapidement de faire une commande de remplissage d'un polygone. Peut-être pourrait-il faire quelque chose de similaire pour nous ? EDIT @Cosmos70: Tu as modifié la logique du programme sans le vouloir. D'abord, tu as changé les attributs en ligne 69 de ton programme: le font_color en fin de ligne devrait faire blanc (255,255,255) et tu as ajouté un font_bold qui ne sera pas enlevé. Mais tu as dû modifier autre chose, car en ajoutant des modifs avec f$ dans mon programme, cela marche. Ceci dit: ma remarque faite dans un post précédent reste valable: le picture s'adapte à la taille de l'image: trop grande, elle déforme la liste, et trop petite, elle restraint la partie "affichable" de la picture, tout en gardant la sensibilité au click dans la partie non affichée. Avec Stretch_on, le texte aussi est déformé. Donc, tant que Jack n'a pas séparé l'application du stretch_on sur la partie image de la partie texte, une image de fond NE PEUT PAS ETRE UTILISEE avec ce type de programme qui mélange image et text dans un picture ! Voici ma version avec les modifs f$. Essaie avec des images plus grandes et plus petites que la picture: ATTENTION: Je ne conseille pas cette version ! Voir mon post précédent avec la mention Ceci est la version à jour en bas de la première page ! - 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%, f$ dlist 10 f$="C:/Telechargements/Panoramic et PostIt.jpg"
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 file_load 20,f$:on_click 20,click_liste : return 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 : ' révélation par écriture blanche sur fond bleu 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 : ' enlever écriture blanche sur fond bleu 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 file_load 20,f$ 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
| |
| | | Invité Invité
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 15:08 | |
| Je ne suis pas d'accord du tout pour l'affichage du texte. J'ai adapté le fond du texte avec l'image, et enlevé le rectangle dans la présentation du choix de la ligne, parce que je ne vois pas l'intérêt de mettre une image et qu'il n'y ai pas une sorte de fusion des lettres avec celle-ci. Ça ne marche pas bien maintenant. Il n'y a pas fusion des lettres avec le fond, et c'est ce que j'ai voulu faire. Il est évident que si on met un fond rouge, il faudra des lettre avec 2d_fill_color rouge, etc...
Pour ce qui est de l'image, vu que stretch_on ne va pas, il faut découper une image qui est une dimension plutôt légèrement supérieur au picture. C'est ce que j'ai fait. Est-ce que Jack apportera une correction à stretch_on? En attendant je fais avec.
Ma version fait la fusion du texte avec l'image (à part à l'initialisation), pas la tienne. Ne cherche pas à mettre une image si tu ne fais pas de fusion de texte. Il est évident que l'image doit-être choisi, vu que l'affichage du texte a un fond uni.
Je ne peux rester, ma femme m'appelle pour faire des courses (pas pour autre chose) |
| | | 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 - 17:19 | |
| @Cosmos70: Avcec ta version, je ne vois pas de fusion de texte non plus. Pour cela, il faudrait avoir une commande font_transparent, ce qui n'existe pas en Panoramic, tel que cela existe en Delphi avec l'attribut BrushStyle=bsClear. C'est avec cela que j'imprime du texte sur une image, avec les fonctions d'impression de ma DLL. Mais on n'y a pas accès en Panoramic.
Mais cela rejoint une demande que j'avais déjà faite à Jack: je souhaitais avoir une commande pour définir la couleur "transparent" pour un picture. Ceci permettrait d'avoir une image de fond, fixe, et mon image de pseudo_list posée par dessus, à fond en couleur transparent, et on imprime le texte dessus. Du coup, plus de problème de fusion, plus de problème de stretch, etc. Mais pour le moment, Jack a autre chose à faire, je pense.
Pour ma part, je continue la généralisation de ma version afin de faciliter l'intégration dans un source via INCLUDE. | |
| | | Invité Invité
| Sujet: Re: Une liste avec des attributs de texte libres Jeu 15 Juil 2010 - 18:29 | |
| En haut de la page, la copie d'écran a été faite avec ton programme et ton image. C'est tout à fait exact qu'il n'y a pas de fusion d'écran, mais avoues que fill_color employé et le fond d'image, tu ne fais pas de différence. Pour l'instant (ENFIN EST DU SUPERFLU C'EST VRAI POUR L'INSTANT) pour que le procédé marche, il faut avoir une image qui soit compatible avec le résultat souhaité. Moi, chez moi, avec mon ordi de m...., avec l'image que j'ai mise, et les modifications que j'ai apporté, avoue que pourrait croire à une fusion, et lorsque j'emploi le mot fusion, je me comprend. Je ne prétend pas qu'elle existe, mais dans le cas présent cela fonctionne. La version que tu as mises depuis ne colle absolument pas avec la photo. Maintenant si tu en a mises une autre, je ne peux rien dire, vu que je ne vois pas le résultat. Peut-être que je m'exprime mal, je n'ai pas fait le même apprentissage de la vie que vous. Je ne vais pas parler de moi, seulement dire que les études m'ont étés interdites (fin de la parenthèse). Mais il faut aussi parfois lire entre les lignes, sur ce que je poste.
Je ne suis pas complètement idiot non plus, sinon je ne programmerai pas. Je sais parfaitement qu'il n'y a pas de possibilité de fusion, sauf si le facteur temps pour l'affichage ne compte pas, et ici ça compte. Je dis cela parce que j'ai déjà avec ce basic fait l'essai de fusionner du texte sur un picture. Il faut fonctionner un peu comme on là fait ensemble et avec JL35, pour centrer du texte, en se servant d'un picture d'essai.
STOP! j'arrête là. Le résultat n'apportera plus grand chose à ce qu'on a voulu faire, et tu as réussi. C'est déjà bien. Quant à moi, je n'ai nul besoin d'une image avec une liste dessus. Je voulais seulement dire que avec une image qui a des paramètres convenables pour le picture, le contrôle des lignes n'était pas perdu. Je l'ai constaté avec ton prg légèrement modifié, et contrôlé, et tu as pu voir que mes contrôles ont permis de voir quelques erreurs, et te dire cela: le contrôle de lignes (sur une image stretch_off) était toujours valable. Je ne vais pas mettre dix photos d'écran pour le prouver. Ton programme est bon. Point final
Si tu veux je peux perdre la boule. Alors enfants de la patrie i e, le jour de gloire est arrivé. Gloire à toi Oh.... Pour le reste je vous laisse la parole. |
| | | 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 - 20:44 | |
| Pour faire avancer le Schmilblick, je suis en train de produire une version à inclure par #INCLUDE de sorte à l'utiliser facilement. Ce sera prêt prochainement. Voici un avant-goût: - Code:
-
label GLIST_create, GLIST_attributs dim GLIST_params$
' object 20, affichage 8 lignes, largeur 400 pixels, placement en (160,90) GLIST_params$ = "Create|N=20|A=8|W=400|T=160|L=90|" gosub GLIST_create : ' créer la liste GLIST_params$ = "Attributs|1=255,0,0|2=G0,0,255|3=255,255,0|" gosub GLIST_attributs : ' définir les attributs graphiques
C'est l'idée ne Nardo26 que j'applique, et je prends bien soin à préfixer TOUTES les variables internes par "GLIST_" de sorte à éviter les conflits. | |
| | | 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 Ven 16 Juil 2010 - 0:26 | |
| Voici la version utilisable avec #INCLUDE. Le mode d'intégration est documenté dans le source. Il y a 3 parties: 1 ligne à insérer au début du programme d'application, le programme d'application lui-même (ici, un programme de démo), et le module à inclure à la fin du programme application par #INCLUDE "GLIST.bas". Attention: dans le programme de démo, il y a un fichier GLIST.txt qui est chargé initialement, pour la démo. Il suffit de prendre n'importe quel texte et de l'adapter au fur et à mesure avec les marquages graphiques. Note: ce programme sera prochainement mis à disposition sur mon site !Ligne à insérer au début du programme: - Code:
-
' ===================== ligne à insérer au début du programme label Glist_function : dim GLIST_params$ ' ===================== fin d'insertion au début du programme
Programme d'application (démo): - Code:
-
' ===================== application (ici, programme de démo) label click_1, click_2, click_3, click_4, click_5
' object 20, affichage 8 lignes, largeur 400 pixels, placement en (160,90) GLIST_params$ = "Create|N=20|A=8|W=400|T=160|L=90|" gosub GLIST_function : ' créer la liste GLIST_params$ = "Attributs|1=255,0,0|2=G0,0,255|3=255,255,0|" gosub GLIST_function : ' créer les attributs GLIST_params$ = "Revelation|4|" gosub GLIST_function : ' choisir la révélation GLIST_params$ = "Load|C:\Telechargements\glist.txt|" gosub GLIST_function : ' charger un fichier GLIST_params$ = "Item_add|1***************2|" gosub GLIST_function : ' ajouter une ligne à la fin
button 1 : top 1,10 : left 1,150 : width 1,100 : caption 1,"supprimer 3" : on_click 1,click_1 button 2 : top 2,40 : left 2,150 : width 2,100 : caption 2,"Inserer avant 5" : on_click 2,click_2 button 3 : top 3,10 : left 3,270 : width 3,100 : caption 3,"N. choisi ?" : on_click 3,click_3 button 4 : top 4,40 : left 4,270 : width 4,100 : caption 4,"N. total ?" : on_click 4,click_4 button 5 : top 5,70 : left 5,150 : width 5,100 : caption 5,"lire 7" : on_click 5,click_5
end
click_1: GLIST_params$ = "Item_delete|3|" gosub GLIST_function return
click_2: GLIST_params$ = "Item_insert|5|3===========4|" gosub GLIST_function return
click_3: GLIST_params$ = "Selected|" gosub GLIST_function message GLIST_params$ return click_4: GLIST_params$ = "Total|" gosub GLIST_function message GLIST_params$ return click_5: GLIST_params$ = "Item_read|7|" gosub GLIST_function message GLIST_params$ return
' ============== fin application (ici, programme de démo) #INCLUDE "GLIST.bas"
Module GLIST.bas à inclure par #INCLUDE GLIST.bas à la fin du programme application: - Code:
-
'=============== dipatching des fonctions ===================================================== GLIST_function: if left$(GLIST_params$,7)="Create|" label GLIST_create, GLIST_attributs, GLIST_revelation, GLIST_file_load, GLIST_clear label GLIST_add, GLIST_delete, GLIST_insert, GLIST_selected, GLIST_total, GLIST_read goto GLIST_create end_if if left$(GLIST_params$,10)="Attributs|" then goto GLIST_attributs if left$(GLIST_params$,11)="Revelation|" then goto GLIST_revelation if left$(GLIST_params$,5)="Load|" then goto GLIST_file_load if left$(GLIST_params$,6)="Clear|" then goto GLIST_clear if left$(GLIST_params$,9)="Item_add|" then goto GLIST_add if left$(GLIST_params$,12)="Item_delete|" then goto GLIST_delete if left$(GLIST_params$,12)="Item_insert|" then goto GLIST_insert if left$(GLIST_params$,9)="Selected|" then goto GLIST_selected if left$(GLIST_params$,6)="Total|" then goto GLIST_total if left$(GLIST_params$,10)="Item_read|" then goto GLIST_read dim GLIST_err% GLIST_err% = message_error_OK("GLIST: commande invalide") return
'=============== création des objets ========================================================== ' syntaxe: GLIST_params$ = "Create|N=20|A=8|W=400|T=160|L=90|" GLIST_create: label GLIST_create_err1, GLIST_change, GLIST_changea, GLIST_changeb, GLIST_click_liste label GLIST_fin2, GLIST_print_line, GLIST_select_on, GLIST_select_off, GLIST_attrib_on label GLIST_attrib_off dim GLIST_numero_objet%, GLIST_lignes_affichage%, GLIST_largeur_affichage% dim GLIST_top_affichage%, GLIST_left_affichage%, GLIST_hauteur_affichage% dim GLIST_ligne_selection%, GLIST_mode_selection%, GLIST_ligne_choisie% dim GLIST_nombre_dans_liste% dim GLIST_font_attributs%(9,3) : ' (,0)=flag "gras" (,1)=R (,2)=G, (,3)=B dim GLIST_font_attributs_n% dim GLIST_i%, GLIST_n%, GLIST_s$, GLIST_v%, GLIST_v$, GLIST_j%, GLIST_nr%, GLIST_code% dim GLIST_xx%, GLIST_yy%, GLIST_x1%, GLIST_y1% GLIST_numero_objet% = 100 : GLIST_lignes_affichage% = 10 : GLIST_largeur_affichage% = 100 GLIST_top_affichage% = 0 : GLIST_left_affichage% = 0 :: GLIST_font_attributs_n% = 0 if right$(GLIST_params$,1)<>"|" GLIST_i% = message_error_OK("GLIST: parametres Create invalides") return end_if GLIST_i% = instr(GLIST_params$,"|N=") if GLIST_i%>0 GLIST_s$ = right$(GLIST_params$,len(GLIST_params$)-GLIST_i%-2) GLIST_i% = instr(GLIST_s$,"|") if GLIST_i%>0 GLIST_s$ = left$(GLIST_s$,GLIST_i%-1) if numeric(GLIST_s$)=1 GLIST_n% = val(GLIST_s$) on_error_goto GLIST_create_err1 dlist GLIST_n% dlist GLIST_n% + 1 dlist GLIST_n% + 2 off_error_goto GLIST_numero_objet% = GLIST_n% delete GLIST_numero_objet% + 2 delete GLIST_numero_objet% + 1 picture GLIST_numero_objet% + 1 scroll_bar GLIST_numero_objet% + 2 print_target_is GLIST_numero_objet%+1 2d_target_is GLIST_numero_objet%+1 on_click GLIST_numero_objet%+1,GLIST_click_liste vertical GLIST_numero_objet%+2 min GLIST_numero_objet%+2,1 max GLIST_numero_objet%+2,1 on_change GLIST_numero_objet%+2,GLIST_change end_if end_if end_if GLIST_i% = instr(GLIST_params$,"|A=") if GLIST_i%>0 GLIST_s$ = right$(GLIST_params$,len(GLIST_params$)-GLIST_i%-2) GLIST_i% = instr(GLIST_s$,"|") if GLIST_i%>0 GLIST_s$ = left$(GLIST_s$,GLIST_i%-1) if numeric(GLIST_s$)=1 GLIST_n% = val(GLIST_s$) if GLIST_n%>0 then GLIST_lignes_affichage% = GLIST_n% end_if end_if end_if GLIST_hauteur_affichage% = GLIST_lignes_affichage%*14 : ' hauteur de l'affichage du picture et de la scroll_bar height GLIST_numero_objet%+1,GLIST_hauteur_affichage% height GLIST_numero_objet%+2,GLIST_hauteur_affichage% GLIST_i% = instr(GLIST_params$,"|L=") if GLIST_i%>0 GLIST_s$ = right$(GLIST_params$,len(GLIST_params$)-GLIST_i%-2) GLIST_i% = instr(GLIST_s$,"|") if GLIST_i%>0 GLIST_s$ = left$(GLIST_s$,GLIST_i%-1) if numeric(GLIST_s$)=1 GLIST_n% = val(GLIST_s$) if GLIST_n%>0 then GLIST_left_affichage% = GLIST_n% end_if end_if end_if GLIST_i% = instr(GLIST_params$,"|T=") if GLIST_i%>0 GLIST_s$ = right$(GLIST_params$,len(GLIST_params$)-GLIST_i%-2) GLIST_i% = instr(GLIST_s$,"|") if GLIST_i%>0 GLIST_s$ = left$(GLIST_s$,GLIST_i%-1) if numeric(GLIST_s$)=1 GLIST_n% = val(GLIST_s$) if GLIST_n%>0 then GLIST_top_affichage% = GLIST_n% end_if end_if end_if top GLIST_numero_objet%+1,GLIST_top_affichage% top GLIST_numero_objet%+2,GLIST_top_affichage% GLIST_i% = instr(GLIST_params$,"|W=") if GLIST_i%>0 GLIST_s$ = right$(GLIST_params$,len(GLIST_params$)-GLIST_i%-2) GLIST_i% = instr(GLIST_s$,"|") if GLIST_i%>0 GLIST_s$ = left$(GLIST_s$,GLIST_i%-1) if numeric(GLIST_s$)=1 GLIST_n% = val(GLIST_s$) if GLIST_n%>0 then GLIST_largeur_affichage% = GLIST_n% end_if end_if end_if width GLIST_numero_objet%+1,GLIST_largeur_affichage% left GLIST_numero_objet%+1,GLIST_left_affichage% left GLIST_numero_objet%+2,GLIST_left_affichage% + GLIST_largeur_affichage% + 4 return GLIST_create_err1: off_error_goto GLIST_i% = message_error_ok("GLIST: problème avec numéro d'objet " + str$(GLIST_numero_objet%)) return
'=============== création des attributs ========================================================== ' Syntaxe: GLIST_params$ = "Attributs|1=255,0,0|2=G0,0,255|3=255,255,0|" GLIST_attributs: if right$(GLIST_params$,1)<>"|" GLIST_i% = message_error_OK("GLIST: parametres Attributs invalides") return end_if for GLIST_n%=1 to 9 GLIST_i% = instr(GLIST_params$,"|"+str$(GLIST_n%)+"=") if GLIST_i%>0 GLIST_s$ = right$(GLIST_params$,len(GLIST_params$)-GLIST_i%-2) GLIST_i% = instr(GLIST_s$,"|") if GLIST_i%>0 GLIST_s$ = left$(GLIST_s$,GLIST_i%-1) + "," if GLIST_n%>GLIST_font_attributs_n% then GLIST_font_attributs_n% = GLIST_n% if left$(GLIST_s$,1)="G" GLIST_font_attributs%(GLIST_n%,0) = 1 GLIST_s$ = right$(GLIST_s$,len(GLIST_s$)-1) else GLIST_font_attributs%(GLIST_n%,0) = 0 end_if for GLIST_j%=1 to 3 GLIST_i% = instr(GLIST_s$,",") if GLIST_i%>0 GLIST_v$ = left$(GLIST_s$,GLIST_i%) if numeric(GLIST_v$)=1 GLIST_v% = val(GLIST_v$) if G(LIST_v%<0) or (GLIST_v%>255) GLIST_i% = message_error_OK("GLIST: parametres Attributs invalides") return end_if GLIST_font_attributs%(GLIST_n%,GLIST_j%) = GLIST_v% end_if end_if next GLIST_j% end_if end_if next GLIST_n% return
'=============== chargement d'un fichier ================================================= ' Syntaxe: GLIST_params$ = "Load|C:\Telechargements\glist.txt|" GLIST_file_load: if right$(GLIST_params$,1)<>"|" GLIST_i% = message_error_OK("GLIST: parametres Load invalides") return end_if GLIST_s$ = mid$(GLIST_params$,6,len(GLIST_params$)-6) if file_exists(GLIST_s$)=0 GLIST_i% = message_error_OK("GLIST: fichier Load introuvable: "+GLIST_s$) return end_if clear GLIST_numero_objet% file_load GLIST_numero_objet%,GLIST_s$ GLIST_nombre_dans_liste% = count(GLIST_numero_objet%) max GLIST_numero_objet%+2,GLIST_nombre_dans_liste% - GLIST_lignes_affichage%+1 GLIST_nr% = 1 gosub GLIST_changeb return
'=============== choix de la méthode de révélation ============================================== ' Syntaxe: GLIST_params$ = "Revelation|4|" GLIST_revelation: if right$(GLIST_params$,1)<>"|" GLIST_i% = message_error_OK("GLIST: parametres Revelation invalides") return end_if GLIST_s$ = mid$(GLIST_params$,12,len(GLIST_params$)-12) if numeric(GLIST_s$)=1 GLIST_v% = val(GLIST_s$) if (GLIST_v%>=0) and GLIST_v%<=4 GLIST_mode_selection% = GLIST_v% return end_if end_if GLIST_i% = message_error_OK("GLIST: parametres Revelation invalides") return
'=============== effacement de toute la liste ===================================================== ' Syntaxe: GLIST_params$ = "Clear|" GLIST_clear: clear GLIST_numero_objet% 2d_clear position GLIST_numero_objet%+2 = 1 max GLIST_numero_objet%+2,1 GLIST_nombre_dans_liste% = 0 GLIST_ligne_selection% = 0 return
'=============== ajouter un enregistrement ===================================================== ' Syntaxe: GLIST_params$ = "Item_add|nouvelle ligne|" GLIST_add: if right$(GLIST_params$,1)<>"|" GLIST_i% = message_error_OK("GLIST: parametres Item_add invalides") return end_if GLIST_s$ = mid$(GLIST_params$,10,len(GLIST_params$)-10) item_add GLIST_numero_objet%,GLIST_s$ GLIST_nombre_dans_liste% = count(GLIST_numero_objet%) GLIST_n% = GLIST_nombre_dans_liste% - GLIST_lignes_affichage%+1 if GLIST_n%<1 then GLIST_n% = GLIST_nombre_dans_liste% max GLIST_numero_objet%+2,GLIST_n% return
'=============== supprimer un enregistrement ===================================================== ' Syntaxe: GLIST_params$ = "Item_delete|12|" GLIST_delete: if right$(GLIST_params$,1)<>"|" GLIST_i% = message_error_OK("GLIST: parametres Item_delete invalides") return end_if GLIST_s$ = mid$(GLIST_params$,13,len(GLIST_params$)-13) if numeric(GLIST_s$)=1 GLIST_v% = val(GLIST_s$) if (GLIST_v%>0) and (GLIST_v%<=count(GLIST_numero_objet%)) item_delete GLIST_numero_objet%,GLIST_v% if GLIST_v%=GLIST_ligne_choisie% then GLIST_ligne_choisie% = 0 if GLIST_v%<GLIST_ligne_choisie% then GLIST_ligne_choisie% = GLIST_ligne_choisie% - 1 if GLIST_v%<GLIST_nr%+GLIST_lignes_affichage% if GLIST_v%>=GLIST_nr% if GLIST_nr%=GLIST_nombre_dans_liste% then GLIST_nr% = GLIST_nr% - 1 if GLIST_nr%>0 gosub GLIST_changeb else 2d_clear end_if end_if end_if GLIST_nombre_dans_liste% = count(GLIST_numero_objet%) GLIST_n% = GLIST_nombre_dans_liste% - GLIST_lignes_affichage%+1 if GLIST_n%<1 then GLIST_n% = GLIST_nombre_dans_liste% max GLIST_numero_objet%+2,GLIST_n% return end_if end_if GLIST_i% = message_error_OK("GLIST: parametres Item_delete invalides") return
'=============== insérer un enregistrement ===================================================== ' Syntaxe: GLIST_params$ = "Item_insert|12|nouveau_texte|" GLIST_insert: if right$(GLIST_params$,1)<>"|" GLIST_i% = message_error_OK("GLIST: parametres Item_insert invalides") return end_if GLIST_s$ = right$(GLIST_params$,len(GLIST_params$)-12) GLIST_i% = instr(GLIST_s$,"|") if GLIST_i%=0 GLIST_i% = message_error_OK("GLIST: parametres Item_insert invalides") return end_if GLIST_v$ = left$(GLIST_s$,GLIST_i%-1) if numeric(GLIST_v$)=0 GLIST_i% = message_error_OK("GLIST: parametres Item_insert invalides") return end_if GLIST_v% = val(GLIST_v$) if GLIST_v%<1 or GLIST_v%>GLIST_nombre_dans_liste% GLIST_i% = message_error_OK("GLIST: parametres Item_insert invalides") return end_if GLIST_s$ = mid$(GLIST_s$,GLIST_i%+1,len(GLIST_s$)-GLIST_i%-1) item_insert GLIST_numero_objet%,GLIST_v%,GLIST_s$ if GLIST_v%<=GLIST_ligne_choisie% then GLIST_ligne_choisie% = GLIST_ligne_choisie% + 1 if GLIST_v%<GLIST_nr%+GLIST_lignes_affichage% then gosub GLIST_changeb return
'=============== retourner le numéro d'enregistrement sélectionné ================================= ' Syntaxe: GLIST_params$ = "Selected|" GLIST_selected: GLIST_params$ = str$(GLIST_ligne_choisie%) return
'=============== retourner le nombre d'enregistrements au total =================================== ' Syntaxe: GLIST_params$ = "Total|" GLIST_total: GLIST_params$ = str$(GLIST_nombre_dans_liste%) return '=============== lire un enregistrement ===================================================== ' Syntaxe: GLIST_params$ = "Item_read|12|" GLIST_read: if right$(GLIST_params$,1)<>"|" GLIST_i% = message_error_OK("GLIST: parametres Item_delete invalides") return end_if GLIST_s$ = mid$(GLIST_params$,11,len(GLIST_params$)-11) if numeric(GLIST_s$)=1 GLIST_v% = val(GLIST_s$) if (GLIST_v%>0) and (GLIST_v%<=count(GLIST_numero_objet%)) GLIST_params$ = item_read$(GLIST_numero_objet%,GLIST_v%) return end_if end_if GLIST_i% = message_error_OK("GLIST: parametres Item_delete invalides") return
'=============== routines internes de service ===================================================== GLIST_print_line: if GLIST_ligne_selection%=1 then gosub GLIST_select_on GLIST_n% = instr(GLIST_s$,"|") GLIST_code% = 0 if GLIST_n%>0 then GLIST_code% = val(left$(GLIST_s$,GLIST_n%-1)) GLIST_s$ = right$(GLIST_s$,len(GLIST_s$)-GLIST_n%) : GLIST_n% = instr(GLIST_s$,"[") if GLIST_n%=0 gosub GLIST_attrib_on : print GLIST_s$ : gosub GLIST_attrib_off : gosub GLIST_select_off return end_if if GLIST_n%>1 print left$(GLIST_s$,GLIST_n%-1); : GLIST_s$ = right$(GLIST_s$,len(GLIST_s$)-GLIST_n%) : gosub GLIST_attrib_on : GLIST_n% = instr(GLIST_s$,"]") print left$(GLIST_s$,GLIST_n%-1); : gosub GLIST_attrib_off : if GLIST_n%<len(GLIST_s$) then print right$(GLIST_s$,len(GLIST_s$)-GLIST_n%-1); end_if gosub GLIST_select_off : print return
GLIST_select_on: select GLIST_mode_selection% case 0 : ' rien à faire dans ce cas case 1: print "=> "; : ' révéler par une flèche case 2: font_bold GLIST_numero_objet%+1 : ' révéler par le gras case 3: font_underline GLIST_numero_objet%+1 : ' révéler par le sousligné case 4 : ' révélation par écriture blanche sur fond bleu GLIST_x1% = 0 : GLIST_y1% = (GLIST_i%-1)*14 : 2d_fill_color 0,0,255 : 2d_pen_color 0,0,255 2d_rectangle GLIST_x1%,GLIST_y1%,GLIST_x1%+GLIST_largeur_affichage%,GLIST_y1%+14 : font_color GLIST_numero_objet%+1,255,255,255 ' *** ici, d'autres modes de révélation de la ligne sélectionnée peuvent être définis end_select return
GLIST_select_off: select GLIST_mode_selection% case 0 : ' rien à faire dans ce cas case 1 : ' rien à faire dans ce cas case 2: font_bold_off GLIST_numero_objet%+1 : ' enlever le gras case 3: font_underline_off GLIST_numero_objet%+1 : ' enlever le sousligné case 4 : ' enlever écriture blanche sur fond bleu 2d_fill_color 255,255,255 : 2d_pen_color 255,255,255 : font_color GLIST_numero_objet%+1,0,0,0 ' *** ici, d'autres modes de révélation de la ligne sélectionnée peuvent être définis end_select return
GLIST_attrib_on: select GLIST_code% case 1 font_color GLIST_numero_objet%+1,255,0,0 case 2 font_color GLIST_numero_objet%+1,0,0,255 : font_bold GLIST_numero_objet%+1 end_select return
' annuler tous les attributs ' ************* annuler ici tous les nouveaux attributs créés GLIST_attrib_off: font_color GLIST_numero_objet%+1,0,0,0 if (GLIST_ligne_selection%=0) or (GLIST_mode_selection%<>2) then font_bold_off GLIST_numero_objet%+1 return
' gestion de la scroll_bar GLIST_change: GLIST_nr% = position(GLIST_numero_objet%+2) GLIST_changeb: 2d_clear GLIST_changea: print_locate 0,0 for GLIST_i%=1 to GLIST_lignes_affichage% GLIST_s$ = item_read$(GLIST_numero_objet%,GLIST_nr%+GLIST_i%-1) : GLIST_ligne_selection% = 0 on_error_goto GLIST_fin2 if GLIST_nr%+GLIST_i%-1=GLIST_ligne_choisie% then GLIST_ligne_selection% = 1 off_error_goto gosub GLIST_print_line next GLIST_i% GLIST_fin2: off_error_goto return
GLIST_click_liste: GLIST_xx% = mouse_x_left_down(GLIST_numero_objet%+1) GLIST_yy% = mouse_y_left_down(GLIST_numero_objet%+1) GLIST_ligne_choisie% = GLIST_nr% + int((GLIST_yy%+13)/14) - 1 gosub GLIST_changeb ' *********** ici, ajouter le traitement pour la sélection d'une ligne ! message "ligne "+str$(GLIST_ligne_choisie%) return
Dernière édition par Klaus le Ven 16 Juil 2010 - 9:15, édité 3 fois | |
| | | 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 Ven 16 Juil 2010 - 0:37 | |
| Je regarde çà demain | |
| | | 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 Ven 16 Juil 2010 - 9:22 | |
| Bonjour Klaus, Tout d'abord Bravo ! C'est exactement comme cela que je voyais la chose... Je viens de lancer le test : - Au moment de la création de la liste, on précise A=8 donc la liste PEUT afficher 8 éléments(au max sans scrollbar) , cela ne veut pas dire qu'elle contient les 8 éléments... Le truc c'est que si on ne la remplit pas avec 8 item (via Load|toto.txt) , le programme plante... Je suis en train de regarder pourquoi... Dans GList.bas Entre la procedure GLIST_function et GLIST_create il y a des restes d'un essai que tu as du faire.... Oups ! je n'avais pas vu que tu avais édité ton prog... je relance le test... Si tu supprime des items, on se retrouve avec un 'List index out of bounds(7)'... tiens cela me rappelle quelque chose!... | |
| | | 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 Ven 16 Juil 2010 - 10:49 | |
| Je remets une nouvelle version en ligne qui permet de créer jusqu'à 20 listes de ce type ! Je vais ensuite regarder les anomalies que tu signales. EDIT Les anomalies que tu as constatées, sont corrigées dans la version présente "multi-listes". Le programme de démo utilise 2 listes, le module GLIST.bas permet jusqu'à 20 listes de ce type (sachant qu'il faut 3 numéros d'objets successifs libres pour chaque liste). Ligne au début du programme application: - Code:
-
' ===================== application (ici, programme de démo) label click_1, click_2, click_3, click_4, click_5, click_6, click_7, click_8, click_9
' object 20, affichage 8 lignes, largeur 400 pixels, placement en (140,90) GLIST_params$ = "Create|N=20|A=8|W=400|T=140|L=90|" gosub GLIST_function : ' créer la liste GLIST_params$ = "Attributs|1=255,0,0|2=G0,0,255|3=255,255,0|" gosub GLIST_function : ' créer les attributs GLIST_params$ = "Revelation|4|" gosub GLIST_function : ' choisir la révélation GLIST_params$ = "Load|C:\Telechargements\glist.txt|" gosub GLIST_function : ' charger un fichier GLIST_params$ = "Item_add|1***************2|" gosub GLIST_function : ' ajouter une ligne à la fin
' object 30, affichage 8 lignes, largeur 300 pixels, placement en (300,90) GLIST_params$ = "Create|N=30|A=5|W=300|T=300|L=90|" gosub GLIST_function : ' créer la liste GLIST_params$ = "Attributs|1=0,0,255|2=G255,0,0|3=255,255,0|" gosub GLIST_function : ' créer les attributs GLIST_params$ = "Revelation|4|" gosub GLIST_function : ' choisir la révélation GLIST_params$ = "Load|C:\Telechargements\glist.txt|" gosub GLIST_function : ' charger un fichier GLIST_params$ = "Item_add|1***************2|" gosub GLIST_function : ' ajouter une ligne à la fin
button 1 : top 1,10 : left 1,150 : width 1,100 : caption 1,"supprimer 3" : on_click 1,click_1 button 2 : top 2,40 : left 2,150 : width 2,100 : caption 2,"Inserer avant 5" : on_click 2,click_2 button 3 : top 3,10 : left 3,270 : width 3,100 : caption 3,"N. choisi ?" : on_click 3,click_3 button 4 : top 4,40 : left 4,270 : width 4,100 : caption 4,"N. total ?" : on_click 4,click_4 button 5 : top 5,70 : left 5,150 : width 5,100 : caption 5,"lire 7" : on_click 5,click_5 button 6 : top 6,10 : left 6,390 : width 6,100 : caption 6,"Liste 1" : on_click 6,click_6 button 7 : top 7,40 : left 7,390 : width 7,100 : caption 7,"Liste 2" : on_click 7,click_7 button 8 : top 8,100 : left 8,150 : width 8,100 : caption 8,"Chosir 3" : on_click 8,click_8 button 9 : top 9,100 : left 9,270 : width 9,100 : caption 9,"Position 22" : on_click 9,click_9
end
click_1: GLIST_params$ = "Item_delete|3|" gosub GLIST_function return
click_2: GLIST_params$ = "Item_insert|5|3===========4|" gosub GLIST_function return
click_3: GLIST_params$ = "Selected|" gosub GLIST_function message GLIST_params$ return click_4: GLIST_params$ = "Total|" gosub GLIST_function message GLIST_params$ return click_5: GLIST_params$ = "Item_read|7|" gosub GLIST_function message GLIST_params$ return
click_6: GLIST_params$ = "Target_is|20|" gosub GLIST_function return
click_7: GLIST_params$ = "Target_is|30|" gosub GLIST_function return click_8: GLIST_params$ = "Item_select|3|" gosub GLIST_function return click_9: GLIST_params$ = "Item_display|22|" gosub GLIST_function return
#INCLUDE "GLIST.bas"
' ============== fin application (ici, programme de démo)
Module INCLUDE (GLIST.bas): - Code:
-
' ############################# ici, le #INCLUDE GLIST.bas contenant tout ce qui suit ######### ' ============================================================================================== ' Gestion de pseudo-listes avec attributs grahiques (GLIST) ' Auteur: Klaus ' Idée originale: Nardo26 ' Développé à l'aides des critiques constructives et précieuses de Cosmos70 et Nardo26 ' ===================== ligne à insérer au début du programme ' label Glist_function, GLIST_err : dim GLIST_params$ ' ===================== fin d'insertion au début du programme
' =============== dipatching des fonctions ===================================================== GLIST_function: on_error_goto GLIST_err label GLIST_create off_error_goto if left$(GLIST_params$,7)="Create|" label GLIST_attributs, GLIST_revelation, GLIST_file_load, GLIST_clear label GLIST_add, GLIST_delete, GLIST_insert, GLIST_selected, GLIST_total, GLIST_read label GLIST_target, GLIST_select, GLIST_display label GLIST_create_err1, GLIST_change, GLIST_changea, GLIST_changeb, GLIST_click_liste label GLIST_fin2, GLIST_print_line, GLIST_select_on, GLIST_select_off, GLIST_attrib_on label GLIST_attrib_off dim GLIST_numero_objet%, GLIST_lignes_affichage%(20), GLIST_largeur_affichage%(20) dim GLIST_top_affichage%(20), GLIST_left_affichage%(20), GLIST_hauteur_affichage%(20) dim GLIST_ligne_selection%(20), GLIST_mode_selection%(20), GLIST_ligne_choisie%(20) dim GLIST_nombre_dans_liste%(20) dim GLIST_font_attributs%(200,3) : ' 200=10*20 (,0)=flag "gras" (,1)=R (,2)=G, (,3)=B dim GLIST_font_attributs_n%(20) dim GLIST_i%, GLIST_n%, GLIST_s$, GLIST_v%, GLIST_v$, GLIST_j%, GLIST_nr%(20), GLIST_code% dim GLIST_xx%, GLIST_yy%, GLIST_x1%, GLIST_y1%, GLIST_max% dim GLIST_n_listes%, GLIST_liste_listes%(20), GLIST_index%, GLIST_scroll%(20) GLIST_n_listes% = 0 : GLIST_index% = 0 end_if GLIST_err: off_error_goto if right$(GLIST_params$,1)<>"|" then GLIST_params$ = GLIST_params$ + "|" if left$(GLIST_params$,7)="Create|" then goto GLIST_create if left$(GLIST_params$,10)="Attributs|" then goto GLIST_attributs if left$(GLIST_params$,11)="Revelation|" then goto GLIST_revelation if left$(GLIST_params$,5)="Load|" then goto GLIST_file_load if left$(GLIST_params$,6)="Clear|" then goto GLIST_clear if left$(GLIST_params$,9)="Item_add|" then goto GLIST_add if left$(GLIST_params$,12)="Item_delete|" then goto GLIST_delete if left$(GLIST_params$,12)="Item_insert|" then goto GLIST_insert if left$(GLIST_params$,9)="Selected|" then goto GLIST_selected if left$(GLIST_params$,6)="Total|" then goto GLIST_total if left$(GLIST_params$,10)="Item_read|" then goto GLIST_read if left$(GLIST_params$,10)="Target_is|" then goto GLIST_target if left$(GLIST_params$,12)="Item_select|" then goto GLIST_select if left$(GLIST_params$,13)="Item_display|" then goto GLIST_display dim GLIST_err% GLIST_err% = message_error_OK("GLIST: commande invalide") return
'=============== création des objets ========================================================== ' syntaxe: GLIST_params$ = "Create|N=20|A=8|W=400|T=160|L=90|" GLIST_create: if GLIST_n_listes%=20 GLIST_i% = message_error_OK("GLIST: trop d'objets GLIST") return end_if GLIST_i% = instr(GLIST_params$,"|N=") if GLIST_i%>0 GLIST_s$ = right$(GLIST_params$,len(GLIST_params$)-GLIST_i%-2) GLIST_i% = instr(GLIST_s$,"|") if GLIST_i%>0 GLIST_s$ = left$(GLIST_s$,GLIST_i%-1) if numeric(GLIST_s$)=1 GLIST_n% = val(GLIST_s$) on_error_goto GLIST_create_err1 dlist GLIST_n% dlist GLIST_n% + 1 dlist GLIST_n% + 2 off_error_goto GLIST_numero_objet% = GLIST_n% delete GLIST_numero_objet% + 2 delete GLIST_numero_objet% + 1 picture GLIST_numero_objet% + 1 scroll_bar GLIST_numero_objet% + 2 print_target_is GLIST_numero_objet%+1 2d_target_is GLIST_numero_objet%+1 on_click GLIST_numero_objet%+1,GLIST_click_liste vertical GLIST_numero_objet%+2 min GLIST_numero_objet%+2,1 max GLIST_numero_objet%+2,1 on_change GLIST_numero_objet%+2,GLIST_change GLIST_n_listes% = GLIST_n_listes% + 1 GLIST_index% = GLIST_n_listes% GLIST_liste_listes%(GLIST_n_listes%) = GLIST_numero_objet% GLIST_scroll%(GLIST_n_listes%) = 1 end_if end_if end_if GLIST_i% = instr(GLIST_params$,"|A=") if GLIST_i%>0 GLIST_s$ = right$(GLIST_params$,len(GLIST_params$)-GLIST_i%-2) GLIST_i% = instr(GLIST_s$,"|") if GLIST_i%>0 GLIST_s$ = left$(GLIST_s$,GLIST_i%-1) if numeric(GLIST_s$)=1 GLIST_n% = val(GLIST_s$) if GLIST_n%>0 then GLIST_lignes_affichage%(GLIST_index%) = GLIST_n% end_if end_if end_if GLIST_hauteur_affichage%(GLIST_index%) = GLIST_lignes_affichage%(GLIST_index%)*14 : ' hauteur de l'affichage du picture et de la scroll_bar height GLIST_numero_objet%+1,GLIST_hauteur_affichage%(GLIST_index%) height GLIST_numero_objet%+2,GLIST_hauteur_affichage%(GLIST_index%) GLIST_i% = instr(GLIST_params$,"|L=") if GLIST_i%>0 GLIST_s$ = right$(GLIST_params$,len(GLIST_params$)-GLIST_i%-2) GLIST_i% = instr(GLIST_s$,"|") if GLIST_i%>0 GLIST_s$ = left$(GLIST_s$,GLIST_i%-1) if numeric(GLIST_s$)=1 GLIST_n% = val(GLIST_s$) if GLIST_n%>0 then GLIST_left_affichage%(GLIST_index%) = GLIST_n% end_if end_if end_if GLIST_i% = instr(GLIST_params$,"|T=") if GLIST_i%>0 GLIST_s$ = right$(GLIST_params$,len(GLIST_params$)-GLIST_i%-2) GLIST_i% = instr(GLIST_s$,"|") if GLIST_i%>0 GLIST_s$ = left$(GLIST_s$,GLIST_i%-1) if numeric(GLIST_s$)=1 GLIST_n% = val(GLIST_s$) if GLIST_n%>0 then GLIST_top_affichage%(GLIST_index%) = GLIST_n% end_if end_if end_if top GLIST_numero_objet%+1,GLIST_top_affichage%(GLIST_index%) top GLIST_numero_objet%+2,GLIST_top_affichage%(GLIST_index%) GLIST_i% = instr(GLIST_params$,"|W=") if GLIST_i%>0 GLIST_s$ = right$(GLIST_params$,len(GLIST_params$)-GLIST_i%-2) GLIST_i% = instr(GLIST_s$,"|") if GLIST_i%>0 GLIST_s$ = left$(GLIST_s$,GLIST_i%-1) if numeric(GLIST_s$)=1 GLIST_n% = val(GLIST_s$) if GLIST_n%>0 then GLIST_largeur_affichage%(GLIST_index%) = GLIST_n% end_if end_if end_if width GLIST_numero_objet%+1,GLIST_largeur_affichage%(GLIST_index%) left GLIST_numero_objet%+1,GLIST_left_affichage%(GLIST_index%) left GLIST_numero_objet%+2,GLIST_left_affichage%(GLIST_index%) + GLIST_largeur_affichage%(GLIST_index%) + 4 return GLIST_create_err1: off_error_goto GLIST_i% = message_error_ok("GLIST: problème avec numéro d'objet " + str$(GLIST_numero_objet%)) return
'=============== création des attributs ========================================================== ' Syntaxe: GLIST_params$ = "Attributs|1=255,0,0|2=G0,0,255|3=255,255,0|" GLIST_attributs: for GLIST_n%=1 to 9 GLIST_i% = instr(GLIST_params$,"|"+str$(GLIST_n%)+"=") if GLIST_i%>0 GLIST_s$ = right$(GLIST_params$,len(GLIST_params$)-GLIST_i%-2) GLIST_i% = instr(GLIST_s$,"|") if GLIST_i%>0 GLIST_s$ = left$(GLIST_s$,GLIST_i%-1) + "," if GLIST_n%>GLIST_font_attributs_n%(GLIST_index%) then GLIST_font_attributs_n%(GLIST_index%) = GLIST_n% if left$(GLIST_s$,1)="G" GLIST_font_attributs%((GLIST_index%-1)*10+GLIST_n%,0) = 1 GLIST_s$ = right$(GLIST_s$,len(GLIST_s$)-1) else GLIST_font_attributs%((GLIST_index%-1)*10+GLIST_n%,0) = 0 end_if for GLIST_j%=1 to 3 GLIST_i% = instr(GLIST_s$,",") if GLIST_i%>0 GLIST_v$ = left$(GLIST_s$,GLIST_i%-1) GLIST_s$ = right$(GLIST_s$,len(GLIST_s$)-GLIST_i%) if numeric(GLIST_v$)=1 GLIST_v% = val(GLIST_v$) if (GLIST_v%<0) or (GLIST_v%>255) GLIST_i% = message_error_OK("GLIST: parametres Attributs invalides") return end_if GLIST_font_attributs%((GLIST_index%-1)*10+GLIST_n%,GLIST_j%) = GLIST_v% end_if end_if next GLIST_j% end_if end_if next GLIST_n% return
'=============== chargement d'un fichier ================================================= ' Syntaxe: GLIST_params$ = "Load|C:\Telechargements\glist.txt|" GLIST_file_load: GLIST_s$ = mid$(GLIST_params$,6,len(GLIST_params$)-6) if file_exists(GLIST_s$)=0 GLIST_i% = message_error_OK("GLIST: fichier Load introuvable: "+GLIST_s$) return end_if clear GLIST_numero_objet% file_load GLIST_numero_objet%,GLIST_s$ GLIST_nombre_dans_liste%(GLIST_index%) = count(GLIST_numero_objet%) GLIST_n% = GLIST_nombre_dans_liste%(GLIST_index%) - GLIST_lignes_affichage%(GLIST_index%)+1 if GLIST_nombre_dans_liste%(GLIST_index%)<GLIST_lignes_affichage%(GLIST_index%) then GLIST_n% = 1 max GLIST_numero_objet%+2,GLIST_n% GLIST_nr%(GLIST_index%) = 1 gosub GLIST_changeb return
'=============== choix de la méthode de révélation ============================================== ' Syntaxe: GLIST_params$ = "Revelation|4|" GLIST_revelation: GLIST_s$ = mid$(GLIST_params$,12,len(GLIST_params$)-12) if numeric(GLIST_s$)=1 GLIST_v% = val(GLIST_s$) if (GLIST_v%>=0) and GLIST_v%<=4 GLIST_mode_selection%(GLIST_index%) = GLIST_v% return end_if end_if GLIST_i% = message_error_OK("GLIST: parametres Revelation invalides") return
'=============== effacement de toute la liste ===================================================== ' Syntaxe: GLIST_params$ = "Clear|" GLIST_clear: clear GLIST_numero_objet% 2d_clear position GLIST_numero_objet%+2 = 1 max GLIST_numero_objet%+2,1 GLIST_nombre_dans_liste%(GLIST_index%) = 0 GLIST_ligne_selection%(GLIST_index%) = 0 return
'=============== ajouter un enregistrement ===================================================== ' Syntaxe: GLIST_params$ = "Item_add|nouvelle ligne|" GLIST_add: GLIST_s$ = mid$(GLIST_params$,10,len(GLIST_params$)-10) item_add GLIST_numero_objet%,GLIST_s$ GLIST_nombre_dans_liste%(GLIST_index%) = count(GLIST_numero_objet%) ' GLIST_n% = GLIST_nombre_dans_liste%(GLIST_index%) - GLIST_lignes_affichage%(GLIST_index%)+1 ' if GLIST_n%<1 then GLIST_n% = GLIST_nombre_dans_liste%(GLIST_index%) ' max GLIST_numero_objet%+2,GLIST_n% GLIST_n% = GLIST_nombre_dans_liste%(GLIST_index%) - GLIST_lignes_affichage%(GLIST_index%)+1 if GLIST_nombre_dans_liste%(GLIST_index%)<GLIST_lignes_affichage%(GLIST_index%) then GLIST_n% = 1 max GLIST_numero_objet%+2,GLIST_n% if (GLIST_nombre_dans_liste%(GLIST_index%)-GLIST_nr%(GLIST_index%))<GLIST_lignes_affichage%(GLIST_index%) then gosub GLIST_changeb return
'=============== supprimer un enregistrement ===================================================== ' Syntaxe: GLIST_params$ = "Item_delete|12|" GLIST_delete: GLIST_s$ = mid$(GLIST_params$,13,len(GLIST_params$)-13) if numeric(GLIST_s$)=1 GLIST_v% = val(GLIST_s$) if (GLIST_v%>0) and (GLIST_v%<=count(GLIST_numero_objet%)) item_delete GLIST_numero_objet%,GLIST_v% GLIST_nombre_dans_liste%(GLIST_index%) = count(GLIST_numero_objet%) if GLIST_nombre_dans_liste%(GLIST_index%)=0 2d_clear GLIST_ligne_choisie%(GLIST_index%) = 0 max GLIST_numero_objet%+2,1 return end_if ' réactiver la ligne suivante si la suppression de la ligne sélectionnée doit annuler la sélection ! ' if GLIST_v%=GLIST_ligne_choisie%(GLIST_index%) then GLIST_ligne_choisie%(GLIST_index%) = 0 if GLIST_v%<GLIST_ligne_choisie%(GLIST_index%) then GLIST_ligne_choisie%(GLIST_index%) = GLIST_ligne_choisie%(GLIST_index%) - 1 if GLIST_v%<GLIST_nr%(GLIST_index%)+GLIST_lignes_affichage%(GLIST_index%) if GLIST_v%>=GLIST_nr%(GLIST_index%) if GLIST_nr%(GLIST_index%)>0 gosub GLIST_changeb else 2d_clear end_if end_if end_if GLIST_n% = GLIST_nombre_dans_liste%(GLIST_index%) - GLIST_lignes_affichage%(GLIST_index%)+1 if GLIST_nombre_dans_liste%(GLIST_index%)<GLIST_lignes_affichage%(GLIST_index%) then GLIST_n% = 1 max GLIST_numero_objet%+2,GLIST_n% return end_if end_if GLIST_i% = message_error_OK("GLIST: parametres Item_delete invalides") return
'=============== insérer un enregistrement ===================================================== ' Syntaxe: GLIST_params$ = "Item_insert|12|nouveau_texte|" GLIST_insert: GLIST_s$ = right$(GLIST_params$,len(GLIST_params$)-12) GLIST_i% = instr(GLIST_s$,"|") if GLIST_i%=0 GLIST_i% = message_error_OK("GLIST: parametres Item_insert invalides") return end_if GLIST_v$ = left$(GLIST_s$,GLIST_i%-1) if numeric(GLIST_v$)=0 GLIST_i% = message_error_OK("GLIST: parametres Item_insert invalides") return end_if GLIST_v% = val(GLIST_v$) if GLIST_v%<1 or GLIST_v%>GLIST_nombre_dans_liste%(GLIST_index%) GLIST_i% = message_error_OK("GLIST: parametres Item_insert invalides") return end_if GLIST_s$ = mid$(GLIST_s$,GLIST_i%+1,len(GLIST_s$)-GLIST_i%-1) item_insert GLIST_numero_objet%,GLIST_v%,GLIST_s$ GLIST_nombre_dans_liste%(GLIST_index%) = GLIST_nombre_dans_liste%(GLIST_index%) + 1 if GLIST_v%<=GLIST_ligne_choisie%(GLIST_index%) then GLIST_ligne_choisie%(GLIST_index%) = GLIST_ligne_choisie%(GLIST_index%) + 1 GLIST_n% = GLIST_nombre_dans_liste%(GLIST_index%) - GLIST_lignes_affichage%(GLIST_index%)+1 if GLIST_nombre_dans_liste%(GLIST_index%)<GLIST_lignes_affichage%(GLIST_index%) then GLIST_n% = 1 max GLIST_numero_objet%+2,GLIST_n% if GLIST_v%<GLIST_nr%(GLIST_index%)+GLIST_lignes_affichage%(GLIST_index%) then gosub GLIST_changeb return
'=============== retourner le numéro d'enregistrement sélectionné ================================= ' Syntaxe: GLIST_params$ = "Selected|" GLIST_selected: GLIST_params$ = str$(GLIST_ligne_choisie%(GLIST_index%)) return
'=============== retourner le nombre d'enregistrements au total =================================== ' Syntaxe: GLIST_params$ = "Total|" GLIST_total: GLIST_params$ = str$(GLIST_nombre_dans_liste%(GLIST_index%)) return
'=============== lire un enregistrement ===================================================== ' Syntaxe: GLIST_params$ = "Item_read|12|" GLIST_read: GLIST_s$ = mid$(GLIST_params$,11,len(GLIST_params$)-11) if numeric(GLIST_s$)=1 GLIST_v% = val(GLIST_s$) if (GLIST_v%>0) and (GLIST_v%<=count(GLIST_numero_objet%)) GLIST_params$ = item_read$(GLIST_numero_objet%,GLIST_v%) return end_if end_if GLIST_i% = message_error_OK("GLIST: parametres Item_delete invalides") return
'=============== cibler une autre GLIST ===================================================== 'Syntage: GLIST_params$ = "Target_is|20[" GLIST_target: GLIST_s$ = mid$(GLIST_params$,11,len(GLIST_params$)-11) if numeric(GLIST_s$)=1 GLIST_v% = val(GLIST_s$) for GLIST_i%=1 to GLIST_n_listes% if GLIST_liste_listes%(GLIST_i%)=GLIST_v% GLIST_index% = GLIST_i% GLIST_numero_objet% = GLIST_liste_listes%(GLIST_index%) 2d_target_is GLIST_numero_objet% + 1 print_target_is GLIST_numero_objet% + 1 return end_if next GLIST_i% end_if GLIST_i% = message_error_OK("GLIST: parametres Item_delete invalides") return
'=============== selectionner un enregistrement ===================================================== ' Syntaxe: GLIST_params$ = "Item_select|12|" GLIST_select: if right$(GLIST_params$,1)<>"|" GLIST_i% = message_error_OK("GLIST: parametres Item_select invalides") return end_if GLIST_s$ = mid$(GLIST_params$,13,len(GLIST_params$)-13) if numeric(GLIST_s$)=1 GLIST_v% = val(GLIST_s$) if (GLIST_v%>0) and (GLIST_v%<=count(GLIST_numero_objet%)) GLIST_ligne_choisie%(GLIST_index%) = GLIST_v% if GLIST_v%>GLIST_nr%(GLIST_index%) then gosub GLIST_changeb end_if return end_if GLIST_i% = message_error_OK("GLIST: parametres Item_delete invalides") return
'=============== safficher à partir d'un enregistrement ============================================== ' Syntaxe: GLIST_params$ = "Item_display|12|" GLIST_display: GLIST_s$ = mid$(GLIST_params$,14,len(GLIST_params$)-14) if numeric(GLIST_s$)=1 GLIST_v% = val(GLIST_s$) if (GLIST_v%>0) and (GLIST_v%<=count(GLIST_numero_objet%)) GLIST_nr%(GLIST_index%) = GLIST_v% position GLIST_numero_objet%+2,GLIST_v% gosub GLIST_changeb return end_if end_if GLIST_i% = message_error_OK("GLIST: parametres Item_display invalides") return
'=============== routines internes de service ===================================================== GLIST_print_line: if GLIST_ligne_selection%(GLIST_index%)=1 then gosub GLIST_select_on GLIST_n% = instr(GLIST_s$,"|") GLIST_code% = 0 if GLIST_n%>0 then GLIST_code% = val(left$(GLIST_s$,GLIST_n%-1)) GLIST_s$ = right$(GLIST_s$,len(GLIST_s$)-GLIST_n%) : GLIST_n% = instr(GLIST_s$,"[") if GLIST_n%=0 gosub GLIST_attrib_on : print GLIST_s$ : gosub GLIST_attrib_off : gosub GLIST_select_off return end_if if GLIST_n%>1 print left$(GLIST_s$,GLIST_n%-1); : GLIST_s$ = right$(GLIST_s$,len(GLIST_s$)-GLIST_n%) : gosub GLIST_attrib_on : GLIST_n% = instr(GLIST_s$,"]") print left$(GLIST_s$,GLIST_n%-1); : gosub GLIST_attrib_off : if GLIST_n%<len(GLIST_s$) then print right$(GLIST_s$,len(GLIST_s$)-GLIST_n%-1); end_if gosub GLIST_select_off : print return
GLIST_select_on: select GLIST_mode_selection%(GLIST_index%) case 0 : ' rien à faire dans ce cas case 1: print "=> "; : ' révéler par une flèche case 2: font_bold GLIST_numero_objet%+1 : ' révéler par le gras case 3: font_underline GLIST_numero_objet%+1 : ' révéler par le sousligné case 4 : ' révélation par écriture blanche sur fond bleu GLIST_x1% = 0 : GLIST_y1% = (GLIST_i%-1)*14 : 2d_fill_color 0,0,255 : 2d_pen_color 0,0,255 2d_rectangle GLIST_x1%,GLIST_y1%,GLIST_x1%+GLIST_largeur_affichage%(GLIST_index%),GLIST_y1%+14 : font_color GLIST_numero_objet%+1,255,255,255 ' *** ici, d'autres modes de révélation de la ligne sélectionnée peuvent être définis end_select return
GLIST_select_off: select GLIST_mode_selection%(GLIST_index%) case 0 : ' rien à faire dans ce cas case 1 : ' rien à faire dans ce cas case 2: font_bold_off GLIST_numero_objet%+1 : ' enlever le gras case 3: font_underline_off GLIST_numero_objet%+1 : ' enlever le sousligné case 4 : ' enlever écriture blanche sur fond bleu 2d_fill_color 255,255,255 : 2d_pen_color 255,255,255 : font_color GLIST_numero_objet%+1,0,0,0 ' *** ici, d'autres modes de révélation de la ligne sélectionnée peuvent être définis end_select return
' ************* forcer les attributs GLIST_attrib_on: if GLIST_ligne_selection%(GLIST_index%)=0 font_color GLIST_numero_objet%+1,GLIST_font_attributs%((GLIST_index%-1)*10+GLIST_code%,1),GLIST_font_attributs%((GLIST_index%-1)*10+GLIST_code%,2),GLIST_font_attributs%((GLIST_index%-1)*10+GLIST_code%,3) if GLIST_font_attributs%((GLIST_index%-1)*10+GLIST_code%,0)=1 then font_bold GLIST_numero_objet%+1 end_if return
' annuler tous les attributs ' ************* annuler ici tous les nouveaux attributs créés GLIST_attrib_off: if GLIST_ligne_selection%(GLIST_index%)=0 font_color GLIST_numero_objet%+1,0,0,0 font_bold_off GLIST_numero_objet%+1 end_if return
' ************* changement des ascenseurs ' gestion de la scroll_bar GLIST_change: for GLIST_i%=1 to GLIST_n_listes% if position(GLIST_liste_listes%(GLIST_i%)+2)<>GLIST_scroll%(GLIST_i%) GLIST_index% = GLIST_i% GLIST_numero_objet% = GLIST_liste_listes%(GLIST_index%) GLIST_scroll%(GLIST_index%) = position(GLIST_numero_objet%+2) 2d_target_is GLIST_numero_objet%+1 print_target_is GLIST_numero_objet%+1 GLIST_nr%(GLIST_index%) = position(GLIST_numero_objet%+2) exit_for end_if next GLIST_i% GLIST_changeb: 2d_clear GLIST_changea: print_locate 0,0 GLIST_max% = GLIST_lignes_affichage%(GLIST_index%) if GLIST_nombre_dans_liste%(GLIST_index%)<GLIST_max% then GLIST_max% = GLIST_nombre_dans_liste%(GLIST_index%) for GLIST_i%=1 to GLIST_max% GLIST_s$ = item_read$(GLIST_numero_objet%,GLIST_nr%(GLIST_index%)+GLIST_i%-1) : GLIST_ligne_selection%(GLIST_index%) = 0 on_error_goto GLIST_fin2 if GLIST_nr%(GLIST_index%)+GLIST_i%-1=GLIST_ligne_choisie%(GLIST_index%) then GLIST_ligne_selection%(GLIST_index%) = 1 off_error_goto gosub GLIST_print_line next GLIST_i% GLIST_fin2: off_error_goto return
GLIST_click_liste: for GLIST_i%=1 to GLIST_n_listes% if clicked(GLIST_liste_listes%(GLIST_i%)+1)=1 GLIST_index% = GLIST_i% GLIST_numero_objet% = GLIST_liste_listes%(GLIST_index%) 2d_target_is GLIST_numero_objet%+1 print_target_is GLIST_numero_objet%+1 GLIST_xx% = mouse_x_left_down(GLIST_numero_objet%+1) GLIST_yy% = mouse_y_left_down(GLIST_numero_objet%+1) GLIST_v% = GLIST_nr%(GLIST_index%) + int((GLIST_yy%+13)/14) - 1 if GLIST_v%>GLIST_nombre_dans_liste%(GLIST_index%) then return GLIST_ligne_choisie%(GLIST_index%) = GLIST_v% gosub GLIST_changeb message "Liste "+str$(GLIST_index%)+" ligne "+str$(GLIST_ligne_choisie%(GLIST_index%)) return end_if next GLIST_i% return
Dernière édition par Klaus le Sam 17 Juil 2010 - 1:28, édité 4 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 Ven 16 Juil 2010 - 14:34 | |
| C'est monstrueux ce que tu nous fait Klaus ! Tu pisses du code comme moi je pisse de la bière ! Il y a un truc qui me chiffonne, dans le programme de test, j'ai rajouté un bouton 8 qui me permet de vérifier la gestion des indices et du scroolbar. - Code:
-
label click_8 button 8 : top 8,70 : left 8,270 : width 8,100 : caption 8,"Sup selected" : on_click 8,click_8
click_8: GLIST_params$ = "Selected|" gosub GLIST_function GLIST_params$ = "Item_delete|"+GLIST_params$+"|" gosub GLIST_function return
[Parenthèse] D'ailleurs pour compléter click_8, j'aurais bien aimer avoir une fonction qui me permet de sélectionner par défaut un item Ou alors avoir le comportement du Item_delete suivant : - je sélectionne la 1re ligne, je la supprime : l'item est viré, le 2eme item prend la place du 1er et se retrouve a son tout par défaut sélectionné. Je ne sais pas si je suis assez clair dans mes explications. [/Parenthèse] Bon pour en revenir au problème d'indice : si je m'amuse à supprimer un à un les items d'une liste, à la fin quand il n'en reste que 2, si je clique sur supprimer à nouveau, la liste se vide d'un coup et le programme plante avec le message : (52) Not correct String Expression : Function Call With Negative or Zero Value. Line : 552 Qui correspond dans mon cas à la ligne : - Code:
-
GLIST_s$ = item_read$(GLIST_numero_objet%,GLIST_nr%(GLIST_index%)+GLIST_i%-1) : GLIST_ligne_selection%(GLIST_index%) = 0 qui se trouve dans GLIST_changea Je sais, cela commence à devenir compliqué le truc !!! | |
| | | 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 Sam 17 Juil 2010 - 0:01 | |
| OK, je regarde ce bug - ce sera corrigé. Quant aux fonctionnalités, ce n'est pas encore complet. Je travaille en particulier sur une fonction Item_select (qui manque pour les list de Panoramic) pour permettre justement de se positionner sur un item particulier, par programme.
Dans la foulée, j'aurai la sélection d'une autre ligne si la ligne sélectionnée a été supprimée, ce qui devrait satisfaire ta demande qui au demeurant était parfaitement claire.
EDIT
Je viens de remettre une nouvelle version en ligne, avec les modifications suivantes: - correction du bug en suppression signalé par Nardo26 - maintien de la sélection de ligne même en cas de suppression de la ligne sélectionnée (cette possibilité peut être désactivée en enlevant le "'" de commentaire devant une ligne dans le sous_programme GLIST_delete - nouvelle fonction Item_select permettant de forcer la sélection d'une ligne précise.
Je rajouterai plus tard une fonction qui permettra de positionner l'affichage à une ligne donnée.
EDIT
La fonction Item_display a été ajoutée. Elle permet de positionner la fenêtre d'affichage à la ligne spécifiée (Exactement ce que l'on souhaiterait pour un list de Panoramic).
Remarque et astuce: à la vue de cette dernière fonction, je me dis que le problème de synchronisation de deux listes, en attendant que Jack trouve le temps de faire quelque chose, peut être résolu par deux dlist à la place des list et deux picture comme dans GLIST, avec une fonction similaire de positionnement. Lorsque je verrai plus clair avec GLIST (je suis en train de faire une documentation exhaustive), je ferai, sur le même modèle, un PLIST (P pour positionnement) qui permettra cela. Si cela peut intéresser certains d'entre vous, je le ferai en parallèle.
| |
| | | 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 Sam 17 Juil 2010 - 11:23 | |
| Dernier post dans ce sujet: j'ai mis GLIST en ligne sur mon site, et j'ai ouvert un fil de discussion à ce sujet dans forum dans la rubrique "Le site de Klaus". C'est à cet endroit que continueront les échanges concernant ce programme. | |
| | | 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
| |
| |
| |