| Mai 2012 | | 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 | 31 | | | | Calendrier |
|
| | | Nouveau pseudo-objet TAB utilisable par #INCLUDE | |
| |
| Auteur | Message |
|---|
Klaus

Nombre de messages: 2284 Age: 63 Localisation: Ile de France Date d'inscription: 29/12/2009
 | Sujet: Nouveau pseudo-objet TAB utilisable par #INCLUDE Jeu 12 Aoû 2010 - 23:40 | |
| J'ai fait un pseudo-objet TAB permettant de créer une "page" avec des onglets. Plusieurs objets de ce type peuvent co-habiter, chaque objet peu recevoir jusqu'à 20 onglets, et on peut affecter des objets Panoramic à chaque onglet. Les onglets sont cliquables et affichent les objets Panoramic correspondants.
Ce module est réalisé entièrement en Panoramic, sur le modèle des GLIST, et est utilisable très simplement par #INCLUDE. Une documentation complète et un programme de démo sont joints à la distribution. |
|  | | Nardo26

Nombre de messages: 1344 Age: 43 Localisation: Valence Date d'inscription: 02/07/2010
 | Sujet: Re: Nouveau pseudo-objet TAB utilisable par #INCLUDE Ven 13 Aoû 2010 - 8:04 | |
| Bravo Klaus !!! t'es le Voila une nouvelle fonctionnalité qui manquait vraiment !! Super boulot ! Une petite précision pour ceux qui veulent s'y atteler : cela fonctionne uniquement sur la version 0.9.20i2 du 30 juillet. Klaus, un petit détail... Dans tab.bas à la ligne 159, le message d'erreur n'est pas correct... tu rêves des GLIST maintenant ?  |
|  | | Klaus

Nombre de messages: 2284 Age: 63 Localisation: Ile de France Date d'inscription: 29/12/2009
 | Sujet: Re: Nouveau pseudo-objet TAB utilisable par #INCLUDE Ven 13 Aoû 2010 - 8:46 | |
| Merci, ça me va droit au coeur !
J'ai corrigé la référence à GLIST - un oubli après un copier-coller. Il est vrai que pendant un moment, je "pensais" GLIST... |
|  | | Klaus

Nombre de messages: 2284 Age: 63 Localisation: Ile de France Date d'inscription: 29/12/2009
 | Sujet: Re: Nouveau pseudo-objet TAB utilisable par #INCLUDE Ven 13 Aoû 2010 - 9:08 | |
| Nouvelle fonction pour les objets TAB: Tab_select permet de sélectioner par programme un onglet d'un objet TAB comme si l'on avait cliqué dessus. Cela manquait... |
|  | | Nardo26

Nombre de messages: 1344 Age: 43 Localisation: Valence Date d'inscription: 02/07/2010
 | Sujet: Re: Nouveau pseudo-objet TAB utilisable par #INCLUDE Ven 13 Aoû 2010 - 9:16 | |
| Regarde si avec ce bout de code tu pourrais pas faire quelque chose : Je pense que cela te simplifierai la vie... | Code: | label TAB_SearchParam dim TAB_par$(10,1)
dim TAB_params$,TAB_i%,TAB_j%,TAB_error_mode%,TAB_err% dim i,indice
TAB_params$ = "Create|N=20|H=200|W=400|T=40|L=90|O=5|" TAB_error_mode%=1 gosub TAB_SearchParam
if TAB_err%=0 print TAB_params$ print " fonction :";TAB_par$(0,0) print " nb paramètres:";TAB_par$(0,1) for i=1 to val(TAB_par$(0,1)) print " parametre n°:";i;"=";TAB_par$(i,0);" valeur:";val(TAB_par$(i,1)) next i end_if
end
TAB_SearchParam: for TAB_i%=0 to 10:TAB_par$(TAB_i%,0)="":TAB_par$(TAB_i%,1)="":next TAB_i% TAB_err%=0 TAB_par$(0,1)="0" for TAB_i%=1 to len(TAB_params$) if mid$(TAB_params$,TAB_i%,1)="|" TAB_par$(0,1)=str$(val(TAB_par$(0,1))+1) TAB_j%=0 if numeric(TAB_par$(val(TAB_par$(0,1))-1,1))=0 TAB_params$ = "TAB: valeur non numerique pour paramètre"+chr$(10)+chr$(13)+chr$(34)+TAB_par$(val(TAB_par$(0,1))-1,0)+chr$(34) if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$) return end_if else if mid$(TAB_params$,TAB_i%,1)="=" TAB_j%=1 else TAB_par$(val(TAB_par$(0,1)),TAB_j%)=TAB_par$(val(TAB_par$(0,1)),TAB_j%)+mid$(TAB_params$,TAB_i%,1) end_if end_if next TAB_i% if RIGHT$(TAB_params$,1)="|" TAB_par$(0,1)=str$(val(TAB_par$(0,1))-1) end_if
return
|
bon il manque quelques tests pour savoir si les valeurs sont numeriques... mais l'idée est là...
Edit : j'ai rajouté quelques tests...
|
|  | | Klaus

Nombre de messages: 2284 Age: 63 Localisation: Ile de France Date d'inscription: 29/12/2009
 | Sujet: Re: Nouveau pseudo-objet TAB utilisable par #INCLUDE Ven 13 Aoû 2010 - 9:47 | |
| Jolie, cette analyse avec répartition caractère par caractère pour remplir le tableau. Je prends et vais réfléchir à son intégration.
|
|  | | Nardo26

Nombre de messages: 1344 Age: 43 Localisation: Valence Date d'inscription: 02/07/2010
 | Sujet: Re: Nouveau pseudo-objet TAB utilisable par #INCLUDE Ven 13 Aoû 2010 - 9:58 | |
| Je pense que cela servira par la suite et cela te simplifiera ta série de if imbriqué...
L'autre avantage, c'est que les paramètres peuvent être écrits dans n'importe quel ordre, du moment que derrière, l'analyse se fait avec une boucle for et un select/case.
Un truc que je viens de m'apercevoir au sujet du 'print' Avant dans les anciens basics, quand on ecrivait ceci :
print "toto:";toto,"titi";titi
la virgule faisait l'équivalent d'une tabulation... apparemment ce n'est pas le cas dans panoramic...
Dernière édition par Nardo26 le Ven 13 Aoû 2010 - 10:24, édité 1 fois |
|  | | Klaus

Nombre de messages: 2284 Age: 63 Localisation: Ile de France Date d'inscription: 29/12/2009
 | Sujet: Re: Nouveau pseudo-objet TAB utilisable par #INCLUDE Ven 13 Aoû 2010 - 10:20 | |
| Tu as raison. Je l'intégrerai dans TAB et GLIST et l'utiliserai pour d'autres projets. J'avais la tête plongée dans les fonctionnalités au point de ne pas trop me soucier des techniques de réalisation. |
|  | | Nardo26

Nombre de messages: 1344 Age: 43 Localisation: Valence Date d'inscription: 02/07/2010
 | Sujet: Re: Nouveau pseudo-objet TAB utilisable par #INCLUDE Ven 13 Aoû 2010 - 13:29 | |
| Dans la même optique: Vu qu'on ne peut pas faire SELECT/CASE avec des variables de type texte, on peut également faire de cette manière : ...Si ça peut donner des idées à quelques-un... Klaus, jette un coup d'oeil sur la procedure TAB_IdentFct. Je suis sûr qu'il y a bien quelqu'un dans ce forum qui peut optimiser ce truc... (avec un left$() et un instr()... par ex.)  | Code: | ' --------------- variables déjà déclarées dans TAB.BAS dim TAB_params$,TAB_i%,TAB_j%,TAB_error_mode%,TAB_err%,TAB_s$
' --------------- variables nécessaire pour TAB_SearchParam label TAB_SearchParam dim TAB_par$(10,1)
' --------------- variables nécessaire pour TAB_IdentFct label TAB_IdentFct dim TAB_LstFct$,TAB_IdentFct% TAB_LstFct$="CREATE|MODE|TAB_LABEL|TAB_INSERT|TAB_DELETE|TAB_SELECT|OBJECT_ADD|OBJECT_REMOVE|" : ' tout en majuscule..doit obligatoirement se terminer par '|'
' --------------- variables utilisées pour la démo de TAB_SearchParam dim i,indice
' TAB_params$ = "Create|N=20|H=200|W=400|T=40|L=90|O=51" TAB_params$ = "Object_add|N=20|O=1|P=101"
TAB_error_mode%=1
gosub TAB_SearchParam if TAB_err%=0 gosub TAB_IdentFct if TAB_err%=0 print TAB_params$ print print " fonction :";TAB_par$(0,0);" "; print " nb paramètres:";TAB_par$(0,1) for i=1 to val(TAB_par$(0,1)) print " parametre n°";i;": ";TAB_par$(i,0);", valeur:";val(TAB_par$(i,1)) next i print print "-->"; select TAB_IdentFct% case 1: print "gosub vers fonction create" case 2: print "gosub vers fonction Mode" case 3: print "gosub vers fonction Tab_label" case 4: print "gosub vers fonction Tab_insert" case 5: print "gosub vers fonction Tab_delete" case 6: print "gosub vers fonction Tab_Select" case 7: print "gosub vers fonction Object_add" case 8: print "gosub vers fonction Object_remove" end_select end_if
end_if
end
' ********************************************************************* ' * FIN DU PROGRAMME DE TEST * ' *********************************************************************
TAB_SearchParam: for TAB_i%=0 to 10:TAB_par$(TAB_i%,0)="":TAB_par$(TAB_i%,1)="":next TAB_i% TAB_err%=0 TAB_par$(0,1)="0" for TAB_i%=1 to len(TAB_params$) if mid$(TAB_params$,TAB_i%,1)="|" TAB_par$(0,1)=str$(val(TAB_par$(0,1))+1) TAB_j%=0 if numeric(TAB_par$(val(TAB_par$(0,1))-1,1))=0 TAB_params$ = "TAB: Appel fonction "+TAB_par$(0,0)+chr$(10)+chr$(13) TAB_params$ = TAB_params$+"valeur non numerique pour paramètre"+chr$(10)+chr$(13)+chr$(34)+TAB_par$(val(TAB_par$(0,1))-1,0)+chr$(34) TAB_err%=1 if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$) return end_if else if mid$(TAB_params$,TAB_i%,1)="=" TAB_j%=1 else TAB_par$(val(TAB_par$(0,1)),TAB_j%)=TAB_par$(val(TAB_par$(0,1)),TAB_j%)+mid$(TAB_params$,TAB_i%,1) end_if end_if next TAB_i% if RIGHT$(TAB_params$,1)="|" TAB_par$(0,1)=str$(val(TAB_par$(0,1))-1) end_if
return
TAB_IdentFct: TAB_s$="": TAB_IdentFct%=0: TAB_j%=1: TAB_err%=0 for TAB_i%=1 to LEN(TAB_LstFct$) if mid$(TAB_LstFct$,TAB_i%,1)="|" if TAB_s$=UPPER$(TAB_par$(0,0)) TAB_IdentFct%=TAB_j% return else TAB_s$="" TAB_j%=TAB_j%+1 end_if else TAB_s$=TAB_s$+mid$(TAB_LstFct$,TAB_i%,1) end_if next TAB_i% TAB_params$="TAB: fonction "+TAB_par$(0,0)+" inconnue !" if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$) TAB_err%=1 return
|
Dernière édition par Nardo26 le Ven 13 Aoû 2010 - 14:10, édité 1 fois |
|  | | Klaus

Nombre de messages: 2284 Age: 63 Localisation: Ile de France Date d'inscription: 29/12/2009
 | Sujet: Re: Nouveau pseudo-objet TAB utilisable par #INCLUDE Ven 13 Aoû 2010 - 14:07 | |
| Je regarderai cette fonction. En attendant, une petite correction dans TAB-SearchParam: la variable TAB_j est utilisée mais pas mis à zéro au début, ce qui plante au deuxième appel car cette variable est utilisée dans TAB.bas: | Code: | TAB_SearchParam: for TAB_i%=0 to 10:TAB_par$(TAB_i%,0)="":TAB_par$(TAB_i%,1)="":next TAB_i% TAB_par$(0,1)="0" : TAB_j% = 0 for TAB_i%=1 to len(TAB_params$) |
|
|  | | Nardo26

Nombre de messages: 1344 Age: 43 Localisation: Valence Date d'inscription: 02/07/2010
 | Sujet: Re: Nouveau pseudo-objet TAB utilisable par #INCLUDE Ven 13 Aoû 2010 - 14:22 | |
| Oui en effet, tu as raison... me suis fait avoir sur ce coup... |
|  | | Klaus

Nombre de messages: 2284 Age: 63 Localisation: Ile de France Date d'inscription: 29/12/2009
 | Sujet: Re: Nouveau pseudo-objet TAB utilisable par #INCLUDE Ven 13 Aoû 2010 - 14:26 | |
| Qu'est-ce que tu penses de cela: | Code: | label TAB_IdentFct dim TAB_LstFct$, TAB_params$, TAB_i%,TAB_n%
TAB_LstFct$="CREATE|.......MODE|.........TAB_LABEL|....TAB_INSERT|...TAB_DELETE|...TAB_SELECT|...OBJECT_ADD|...OBJECT_REMOVE|
TAB_params$ = "Object_add|N=t20|O=1|P=101" gosub TAB_IdentFct message TAB_params$ + "==>" + str$(TAB_n%)
TAB_params$ = "Object_remove|N=20|O=3|P=17" gosub TAB_IdentFct message TAB_params$ + "==>" + str$(TAB_n%)
end
TAB_IdentFct: ' pour le programme réel TAB_par$(0,0) étant chargé: ' TAB_n% = int((instr(TAB_LstFct$,upper$(TAB_par$(0,0)))+13)/14 ) ' deux lignes pour la démo: TAB_i% = instr(TAB_params$,"|") TAB_n% = int((instr(TAB_LstFct$,upper$(left$(TAB_params$,TAB_i%)))+13)/14 ) return
|
|
|  | | Nardo26

Nombre de messages: 1344 Age: 43 Localisation: Valence Date d'inscription: 02/07/2010
 | Sujet: Re: Nouveau pseudo-objet TAB utilisable par #INCLUDE Ven 13 Aoû 2010 - 14:46 | |
| Yessss ! Simple(?) et efficace ! Voila un code comme je les aime ! (on se prend la tête entre les mains un petit moment)  Me doutais bien qu'il y avait un moyen de simplifier la chose...  Tiens ca ma permis de voir qu'il n'y avait pas de quote en fin d'init de TAB_LstFct$ et que cela n'a pas du tout dérangé panoramic.... |
|  | | Klaus

Nombre de messages: 2284 Age: 63 Localisation: Ile de France Date d'inscription: 29/12/2009
 | Sujet: Re: Nouveau pseudo-objet TAB utilisable par #INCLUDE Ven 13 Aoû 2010 - 15:07 | |
| J'ai rajouté le guillemet - bizarre ! Je suis en train d'adapter TAB pour utiliser tout cela; j'ai fat une petite routine pour récupérer la valeur d'un paramètre: | Code: |
TAB_param_value: for TAB_p%=1 to val(TAB_par$(0,1)) if TAB_par$(TAB_p%,0)=TAB_p$ TAB_p% = val(TAB_par$(TAB_p%,1)) return end_if next TAB_p% TAB_p% = -1 return
|
appelé comme suit:
| Code: | TAB_p$ = "H" gosub TAB_param_value if TAB_p%>-1 ' ici, traitement spécifique end_if
|
Ca marche très bien !
|
|  | | Nardo26

Nombre de messages: 1344 Age: 43 Localisation: Valence Date d'inscription: 02/07/2010
 | Sujet: Re: Nouveau pseudo-objet TAB utilisable par #INCLUDE Ven 13 Aoû 2010 - 16:03 | |
| Au fait c'est un peu bourrin la methode 2 lignes...  car si tu dois rajouter des fonctions, faut tout recalculer.... | Code: | label TAB_IdentFct,TAB_IdentFct2,Toto dim TAB_LstFct$, TAB_params$, TAB_i%,TAB_n%,a$
a$="ceci est une chaine qui pose pas de problème TAB_LstFct$="CREATE|............MODE|..............TAB_LABEL|.........TAB_INSERT|........TAB_DELETE|........OBJECT_UN_PEU_LONG|"
TAB_params$ = "CREATE|N=t20|O=1|P=101" gosub TAB_IdentFct2 message TAB_params$ + "==>" + str$(TAB_n%)
TAB_params$ = "MODE|N=t20|O=1|P=101" gosub TAB_IdentFct2 message TAB_params$ + "==>" + str$(TAB_n%)
TAB_params$ = "OBJECT_UN_PEU_LONG|N=t20|O=1|P=101" gosub TAB_IdentFct2 message TAB_params$ + "==>" + str$(TAB_n%) end
TAB_IdentFct2: TAB_i% = instr(TAB_params$,"|") TAB_n% = int((instr(TAB_LstFct$,upper$(left$(TAB_params$,TAB_i%)))+18)/19) return
|
|
|  | | | | Nouveau pseudo-objet TAB utilisable par #INCLUDE | |
|
Sujets similaires |  |
|
| | Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |