FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Une liste avec des attributs de texte libres - Page 2 Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Une liste avec des attributs de texte libres - Page 2 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Une liste avec des attributs de texte libres - Page 2 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Une liste avec des attributs de texte libres - Page 2 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Une liste avec des attributs de texte libres - Page 2 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Une liste avec des attributs de texte libres - Page 2 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Une liste avec des attributs de texte libres - Page 2 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Une liste avec des attributs de texte libres - Page 2 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Une liste avec des attributs de texte libres - Page 2 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Une liste avec des attributs de texte libres - Page 2 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Une liste avec des attributs de texte libres - Page 2 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Une liste avec des attributs de texte libres - Page 2 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Une liste avec des attributs de texte libres - Page 2 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Une liste avec des attributs de texte libres - Page 2 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Une liste avec des attributs de texte libres - Page 2 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -55%
Friteuse sans huile – PHILIPS – Airfryer ...
Voir le deal
49.99 €

 

 Une liste avec des attributs de texte libres

Aller en bas 
4 participants
Aller à la page : Précédent  1, 2
AuteurMessage
Invité
Invité




Une liste avec des attributs de texte libres - Page 2 Empty
MessageSujet: Re: Une liste avec des attributs de texte libres   Une liste avec des attributs de texte libres - Page 2 EmptyJeu 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
Revenir en haut Aller en bas
Klaus

Klaus


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

Une liste avec des attributs de texte libres - Page 2 Empty
MessageSujet: Re: Une liste avec des attributs de texte libres   Une liste avec des attributs de texte libres - Page 2 EmptyJeu 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


Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Une liste avec des attributs de texte libres - Page 2 Empty
MessageSujet: Re: Une liste avec des attributs de texte libres   Une liste avec des attributs de texte libres - Page 2 EmptyJeu 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)
Revenir en haut Aller en bas
Klaus

Klaus


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

Une liste avec des attributs de texte libres - Page 2 Empty
MessageSujet: Re: Une liste avec des attributs de texte libres   Une liste avec des attributs de texte libres - Page 2 EmptyJeu 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Une liste avec des attributs de texte libres - Page 2 Empty
MessageSujet: Re: Une liste avec des attributs de texte libres   Une liste avec des attributs de texte libres - Page 2 EmptyJeu 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.
Revenir en haut Aller en bas
Klaus

Klaus


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

Une liste avec des attributs de texte libres - Page 2 Empty
MessageSujet: Re: Une liste avec des attributs de texte libres   Une liste avec des attributs de texte libres - Page 2 EmptyJeu 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Une liste avec des attributs de texte libres - Page 2 Empty
MessageSujet: Re: Une liste avec des attributs de texte libres   Une liste avec des attributs de texte libres - Page 2 EmptyVen 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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Une liste avec des attributs de texte libres - Page 2 Empty
MessageSujet: Re: Une liste avec des attributs de texte libres   Une liste avec des attributs de texte libres - Page 2 EmptyVen 16 Juil 2010 - 0:37

Je regarde çà demain Sleep
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

Une liste avec des attributs de texte libres - Page 2 Empty
MessageSujet: Re: Une liste avec des attributs de texte libres   Une liste avec des attributs de texte libres - Page 2 EmptyVen 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!... Wink
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


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

Une liste avec des attributs de texte libres - Page 2 Empty
MessageSujet: Re: Une liste avec des attributs de texte libres   Une liste avec des attributs de texte libres - Page 2 EmptyVen 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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

Une liste avec des attributs de texte libres - Page 2 Empty
MessageSujet: Re: Une liste avec des attributs de texte libres   Une liste avec des attributs de texte libres - Page 2 EmptyVen 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 !
Laughing

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 !!!
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


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

Une liste avec des attributs de texte libres - Page 2 Empty
MessageSujet: Re: Une liste avec des attributs de texte libres   Une liste avec des attributs de texte libres - Page 2 EmptySam 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Une liste avec des attributs de texte libres - Page 2 Empty
MessageSujet: Re: Une liste avec des attributs de texte libres   Une liste avec des attributs de texte libres - Page 2 EmptySam 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Une liste avec des attributs de texte libres - Page 2 Empty
MessageSujet: Re: Une liste avec des attributs de texte libres   Une liste avec des attributs de texte libres - Page 2 Empty

Revenir en haut Aller en bas
 
Une liste avec des attributs de texte libres
Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2
 Sujets similaires
-
» Liste de contacts avec 2 GLIST synchronisées
» Créer une liste d'articles avec l'objet LIST
» Objet LIST avec attributs graphiques et éléments éditables ?
» Annoter une image avec des bulles de texte
» Album Photos avec liste 0.2

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: