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 |
|
|
| Module pour lancer un programme avec des INCLUDES et des SUB | |
| | Auteur | Message |
---|
Invité Invité
| Sujet: Module pour lancer un programme avec des INCLUDES et des SUB Mer 26 Sep 2012 - 1:22 | |
| De toute façon il fallait que je le fasse pour mon nouvelle ordi, vu que je n'avais pas encore intégré les includes dans mes fonctions chain. Et comme j'étais provisoirement sur un autre programme que j'intégré à mon loder pour mettre des notes, je l'ai intégré à celui*ci. Que fait ce programme: c'est une petite fenêtre placée en haut: Il y a un bouton choisir: clui-ci affiche une liste au départ, où on ajoute un nouveau programme à cette ci en cliquant dessus: Donc on peut ajouter des fichiers, mais si on clique sur l'un des items, on le lance. Il est à noter que le programme lit le fichier, donc à chaque modification, il faut sauvegarder. Ensuite on voit un bouton MDP pour mot de passe. Ce bouton demande au départ un mot de passe. La confidence est que le mot de passe change toutes les minutes, mais une fois donné, il reste valide jusqu'à ce qu'on le ferme: le mot de passe est l'heure en rouge. Ce programme est surtout fait pour qu'on ne puisse lire les notes à partir du WEB ou de son entourage, si vous en gardez le secret. Car le contenu est systématiquement codé à la sauvegarde, le memo qui s'affiche se vide. A chaque appuie sur ce bouton, le contenu est relu si le MDP est valide. La sauvegarde se fait en double-cliquant sur le memo. Un exemple de ce que cela donne comme fichier (ce n'est pas le texte de l'exemple, donc inutile de faire un rapprochement avec le code du programme) - Citation :
- Ddbjfruto!fttbj!qnvqBDdbjfruto!bvusf!udysd!ptf!i&fowpjd!qnts!mb!oqèrdmu`uhpm
Si on ferme la fenêtre par la croix, il n'y a pas de sauvegarde du contenu, c'est le contenu à l'ouverture qui est relu. Vous avez sur le côté un list avec 26 autres possibilités de note. C'est la même fenêtre qui est utilisée pour les notes. Si vous avez peur de perdre le contenu, une fois la note sélectionnée, il y a un bouton copie. A côté il y a un petit bouton avec un sens interdit. Celui-ci annule le MDP. Et le suivant ferme le programme comme l'appui sur la forme colorée. Pour le programme, il faut générer au départ les lignes de data pour le codage. C'est ici 1000 nombres de 1 à 1000 dans n'importe quel ordre. C'est l'ordre de sauvegarde de chaque caractère. Comme une phrase a un nombre indéfini de caractère, au codage, les datas sont relus à la suite pour n'utiliser que les nombres qui vont de 1 à len(de la chaine). De plus les caractères sont modifiés. A vous de lire le programme. Donc au départ, il faut enlever le commentaire à la ligne: 8 - Code:
-
' melange(1000) : end En lançant le programme, celui-ci va donc généré des lignes de datas qu'il faudra recopier, et les rajouter à la fin du programme. Ceci permet à chacun d'avoir son propre codage. Peut-être me trouvez-vous parano, mais il y a 4 ans, on a réussi en Europe à (Angleterre, France, Allemagne, Turquie...) me retirer plus de 2000 euros, alors que je n'en ai pas. Comme je ne garde pas de document de carte ou de mot de passe sur moi, cette chose n'a pu se faire à mon sens que par internet. Aussi pour chaque nouvel ordi, je prend mes précautions. Il n'y a que ce programme, et ses lignes de datas qui puisse décoder mes notes. Une fois les lignes de datas intégrées, on remet la ligne en commentaire. - Code:
-
width 0,330:height 0,290 :hide 0 :error_french label note,fin,temps,vide ,branche , copie ,valide , mdp_nul , note_plus , teste, lancer_prg , clic_item , ajout_item , annule dim f$ ,p$ ,tx$ , f_n$ ,not$ dim a% ,a$ ,result$ , c%,c$ ,d$,d% , mdp% , prov$ , f_liste$ , f_chain$ , f_execute$ dim tri%(70000) rem ligne suivante, la lancer au départ pour faire la liste de data à recopier en fin de programme, puis mettre en comentaire. ' melange(1000) : end tri(1000) ' ============================================================================================================================ ' f$= "c:\PANO\Note_essai.txt" :' sauvegarde criptée des notes dans le liste (A,B,C,D...Z) not$= "c:\PANO\NOTE_essai_" :' sauvegarde criptée des mots de passe prov$= "c:\PANO\temp\" :' sauvegarde temporaire pour connaitre les retours chariots f_chain$ = "C:\PANO\envoi nom fichier.txt":' écriture du nom du fichier choisi pour être lancé par le loader f_liste$ = "C:\PANO\clic_fichier.txt" :' liste des programmes à lancer sur un clic f_execute$ = "C:\PANO\loader_multiple.exe" :' Programme lançant l''exécution du programme par la fonction chain open_dialog 1 ' ================================================================' list 2:width 2,310:height 2,200:top 2,40 :on_click 2,clic_item if file_exists(f_liste$) = 1 then file_load 2,f_liste$ button 3:caption 3,"ajouter fichier" :on_click 3,ajout_item button 4:caption 4,"annule":left 4,90:on_click 4,annule ' ================================================================' form 10:width 10,250:height 10,20:border_hide 10:left 10,screen_x - 600 :color 10,223,242,255 alpha 5 :parent 5,10:top 5,22:left 5,10:font_color 5,255,0,0:caption 5,left$(time$,5):height 5,12:font_bold 5 alpha 7 :parent 7,10:top 7,22:left 7,50:font_color 7,0,0,255:caption 7,date$ button 11:parent 11,10:width 11,35:height 11,18:caption 11,"run":on_click 11,teste :font_size 11,4 button 12:parent 12,10:width 12,35:height 12,18:caption 12,"choisir":left 12,37 :font_size 12,4 :hint 12,"choisir le programme à lancer" on_click 12,lancer_prg button 9 :parent 9,10: left 9,75 :caption 9,"copie":height 9,18:width 9,40:on_click 9,copie:hint 9,"copie la dernière note ouverte" button 8 :parent 8,10: left 8,117:caption 8,"M.D.P.":on_click 8,note:height 8,18:width 8,40 :font_size 8,6 button 16:parent 16,10:top 16,01:left 16,160:width 16,15:height 16,17:font_name 16,"Webdings":caption 16,"x":on_click 16,mdp_nul:font_bold 16 :font_size 16,6 button 17:parent 17,10:top 17,01:left 17,177:width 17,15:height 17,17:font_name 17,"Webdings":caption 17,"£":on_click 17,fin:font_bold 17 :font_size 17,6 hint 16,"remet les notes au secret":hint 17,"ferme le programme" list 15 :parent 15,10:left 15,198:width 15,45: for a%=65 to 90:item_add 15,chr$(a%) : next a% :font_size 15,4 height 15,45:on_click 15,note_plus show 10 dlist 13 on_click 10,fin timer 6:timer_interval 6,30000:on_timer 6,temps form 20 :left 20,left(10)-550 : width 20,500:height 20,200:border_small 20 :on_close 20,vide:caption 20,"double_clic: enregistre" memo 21 :parent 21,20 : full_space 21:font_size 21,10 : on_double_click 21,branche : hide 20 form 30:width 30,300:height 30,90:left 30,screen_x/2 - 150 : top 30,screen_y/2 - 45:hide 30: caption 30,"Entrez-le mot de passe" edit 31:parent 31,30:left 31,10:top 31,10:secret_on 31:width 31,180:font_size 31,12 button 32:parent 32,30:left 32,200:top 32,10:caption 32,"valide" :on_click 32,valide end ' &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& vide: clear 21 wait 500:hide 20:timer_on 6 return branche: if number_double_click = 21 then save() return copie: if message_confirmation_yes_no("Etes-vous sûr de copier le contenu") = 1 file_load 13,f$:file_save 13,left$(f$, len(f$)-4)+"_copie.txt" end_if return ' ========================================' note_plus: timer_off 6 f_n$=not$+ item_index$(15)+".txt" secret() return ' ==============================================================================' note: timer_off 6 f_n$=f$ secret() return ' ---------' sub secret() if mdp%=0 then show 30:color 10,223,242,255 :else :color 10,228,229,151 :gosub valide ' en appuyant sur valide, on se branche à valide end_sub valide: hide 30 if text$(31) = caption$(5) then mdp%=1 :color 10,228,229,151 :text 31,"" if mdp%=1 show 20 : if file_exists(f_n$) = 1 then decode(f_n$) end_if return ' ------------------------------ sub decode(c$) dim_local c%,c$,a$ ,d$,d%,a%,b$ if file_exists(f_n$) = 1 file_open_read 1,f_n$ file_read 1,d$ file_close 1 end_if b$="" for a% =1 to len(d$) c%= asc(mid$(d$,a%,1)) if even(tri%(a%))=1 c%=c%-1 else c%=c%+1 end_if b$=b$+chr$(c%) next a% clear 21 repeat c%=instr(b$, " " ) if c% >0 then a$=left$(b$,c%-1):item_add 21,a$:b$=mid$(b$,c%+1,len(b$)) until c%=0 or scancode =27 item_add 21,b$ end_sub ' ============================================================================== sub save() font_color 21,255,0,0 dim_local a%,d$ ,c% ,b$ : d$="" if count(21) > 0 file_save 21,prov$+"sauve.txt" file_open_read 1,prov$ + "sauve.txt" while file_eof(1) <> 1 file_readln 1,c$ d$ = d$ + c$ + " " end_while file_close 1 c$ = left$(d$,len(d$)-1 ) :' on retire le dernier return file_open_write 21,f_n$ : file_writeln 21,c$ : file_close 21 :' provisoire pour controle' for a%=1 to len(c$) c%=asc(mid$(c$,a%,1)) : if c%=9 then c%=32 if even(tri%(a%))=1 b$=b$ + chr$(c%+1) else b$=b$ + chr$(c%-1) end_if next a% file_open_write 21,f_n$ : file_writeln 21,b$ : file_close 21 end_if font_color 21,0,0,0 :clear 21 : hide 20:timer_on 6 end_sub ' &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& temps: caption 5,left$(time$,5) return ' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' sub encode() dim_local b$,a%,c%,d$ :b$="" :d$="" if count(21) > 0 for a%=1 to count(21) d$= d$ + item_read$(21,a%) : if a% < count(21) then d$=d$ +"¤" next a% for a%=1 to len(d$) c%=asc(mid$(d$,a%,1)) if even(tri%(a%))=1 b$=b$ + chr$(c%+1) else b$=b$ + chr$(c%-10) end_if next a% result$=b$ file_open_write 21,f_$ : file_writeln 21,b$ : file_close 21 end_if end_sub ' ----------------------- mdp_nul: mdp%=0:color 10,223,242,255 return ' ------------------ sub tri(nb%) dim_local a%,b%,b$,i% ,c% : restore for a%=1 to nb% read b% : for c%=0 to 66 : tri%( a% + nb%*c% ) = b% : next c% next a%: i%=1 : restore rem on limite à la longueur de a$ for a%=1 to nb%*66 :' nb de data repeat read b% : if b% <=len(a$) then tri%(i%)=b% : i%=i%+1 :' i% jusqu''à len(a$) until i%=a% or scancode =0 if i% > len(a$) then exit_for next a% end_sub ' --------------' sub melange(nb%) dim_local a% , b% ,a$ ,b$ ,c% a$=" ": b$="Data " for a%=1 to nb%:' 10000 caption 0,str$(a%)+" - "+str$( count(1)) repeat b%=rnd(nb%-1) +1 +(nb%*c%) if instr(a$," "+str$(b%)+" ") = 0 then tri%(a%)=b%:a$=a$+str$(b%)+" " : b%=-1 until b%=-1 or scancode = 27 b$=b$+str$(tri%(a%)) if len(b$)< 145 b$=b$+"," else item_add 1,b$ :b$="Data " end_if if scancode = 27 then exit_for next a% if len(b$) > 5 then item_add 1,left$(b$,len(b$)-1) item_add 1,"' ----------------------------------------" end_sub ' ==============================================================================' teste: timer_off 6 inactive 11 if p$="" then active 11:return clic_item: timer_off 6 p$ = item_index$(2) file_open_write 1,f_chain$ FILE_WRITELN 1,p$ FILE_CLOSE 1 execute f_execute$ hide 0:show 10:set_focus 10 active 11 :active 12 :timer_on 6 return ' ========================= ajout_item: filter 1,"choisir un programme .bas|*.bas;*.bak" f$ = file_name$(1) if f$ <> "_" then item_add 2,f$:file_save 2,f_liste$ active 12:timer_on 6 return ' ========================== lancer_prg: timer_off 6 inactive 12 show 0 return ' ========================== annule: hide 0 :active 12 : timer_on 6 return fin: if message_confirmation_ok("on quitte vraiment ?") =1 then terminate Pour moi le dossier est "C:\PANO\". C'est à vous de définir dans le cas vous acceptez ce programme, votre dossier pour mettre le programme. Comme c'est une fonction CHAIN:, il faut aussi un autre programme en arrière temps, qui se fermera à chaque lancement. Le programme précédent est le programme de sélection qui reste ouvert. Le programme qui assemble les includes, et lance le programme cliquée, c'est celui-ci. Les deux programmes sont des exécutables: - Code:
-
' Auteur : cosmos70 hide 0 dim a$ , f$ f$ = "C:\PANO\envoi nom fichier.txt":' écriture du nom du fichier choisi pour être lancé par le loader
dlist 1 :' width 1,3000 : ' mettre large pour éviter les sauts de ligne dlist 3 :' left 3,300 dlist 4 :' top 4,200 dlist 6 :' top 6,200:left 6,300 ' bar_both 1:bar_both 3:bar_both 4:bar_both 6 if file_exists(f$)=1 FILE_OPEN_READ 1,f$ FILE_READLN 1,a$ FILE_CLOSE 1 else ' message "pas trouvé" end_if ' caption 0,a$ if file_exists(a$)=1 then file_load 3,a$ if count(3)>0 then include() : chain "c:\PANO\panoramic.bas" : ' puis on exécute... end ' =============================================================================='
sub include() dim_local a%,b%,a$,v%,c$,lig_a% ,include% ,c% if count(3)> 1 b%=0 :' pour numéroter les #include a%=1 repeat a$=item_read$(3,a%) ' je rajoute éventuellement les includes if left$(upper$(trim$(a$)),8)="#INCLUDE" v%=instr(upper$(a$),"#INCLUDE ") :b% = b% + 1 :c$ = mid$(a$, v% + 9 , 80) : item_add 4,trim$(a$) item_add 1,"' #" + str$(b%) + " dépilé: " + trim$(a$) include%=1 file_add 6, c$ : lig_a%=a%+1 item_insert 3,a%+1,"' ==== FIN du programme #INCLUDE dépilé: "+c$+" #"+str$(b%)+" ====" for c%=1 to count(6) a$=item_read$(6,1) : item_insert 3,lig_a%,a$ : item_delete 6,1:lig_a%=lig_a%+1 next c% else item_add 1,a$ end_if a%=a%+1 until a% > count(3) or scancode=27 end_if item_add 1,"" file_save 1,"c:\PANO\panoramic.bas" : ' on sauvegarde le contenu end_sub
Certainement il y aura des questions, sur la gestion des dossiers. Le premier programme doit avoir le nom du fichier du lanceur dans f_execute$ ainsi que le nom du programme choisi qui est dans: f_chain$ Le fichier liste du haut est: f_liste$ Bien il est temps de J'ai oublié dire qu'une fois choisi, le même programme peut être lancé avec le bouton RUN. Ce programme permet de faire fonctionner un programme avec n'importe quel éditeur, y compris avec le bloc-note ou Panoramic_Editor. |
| | | Invité Invité
| Sujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB Mer 26 Sep 2012 - 12:42 | |
| Une erreur par copie de partie de code avait été commise. C'est corrigée. |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB Mer 26 Sep 2012 - 13:10 | |
| Sympa. Je teste ça ce soir. Je pense que je rajouterais pour moi l'ouverture d'un petit fichier de config en début de programme pour mettre les chemins comme ça si les programmes sont compilés, les chemins ne seront pas en dur dans les exe | |
| | | Invité Invité
| Sujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB Mer 26 Sep 2012 - 14:10 | |
| Merci. Je mets les chemins en dur, car là je n'ai pas de problèmes, surtout avec le trafic que je peux faire avec un ordi. J'ai pas vraiment trouvé de solution pour que cela marche sans problème à un moment ou un autre avec des chemins relatifs. <je mets 3 programmes de teste pour include: le premier programme appel un deuxième avec include, qui lui-même appel un (sous) include. Il y a imbrication. Pour chacun des petits programmes, il faut adapter le chemin d'appel du suivant. Rappel: #INCLUDE est une directive et ne fonctionne pas avec une variable, quoique qu'avec ce principe il serait possible de faire une commande pour qu'include soit appelé autrement, vu que chaque ligne est balayée pour être reconstruite. Programme de départ: - Code:
-
dim a% ,a$ ,b%,couleur% rem 'programme d'appel pour les autres includes #include "c:\PANO\TESTE\M_au _P_TRACE\inclusion.bas"
rem 'retour des includes, suite du programme d'appel END modifier le chemin de l'include pour mettre sur le nom du fichier du programme N°2 Programme n°2: - Code:
-
' 1ère ligne du programme "inclusion.bas" a$="inclusion" : b%=12874 : couleur%=12 for couleur%=1 to couleur%:next couleur% message "inclusion réussi" ' appel d'un include en position 2 rem '==fin mais appel d'un include: "suite_include.bas"== #include "C:\PANO\TESTE\M_au _P_TRACE\suite_include.bas" idem dans ce programme, mettre le nom du suivant. Programme N°3: - Code:
-
' essai de rajouter un nouvel include message "include sous_niveau" rem sortie "suite_include.bas" Voila! Voila! Voila!J'ai oublié: Dans choisir: lorsqu'on ajoute un programme, c'est le nom du premier qu'il faut mettre. |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB Mer 26 Sep 2012 - 14:34 | |
| Ah oui, j'avais oublié ce détail du fait que l'on ne pouvait pas utiliser de variables... c'est bien dommage. | |
| | | Invité Invité
| Sujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB Mer 26 Sep 2012 - 15:55 | |
| Je viens de faire un essai, que je mets ici. Le chemin de l'include, je le mets en haut selon la syntaxe suivante: ' #NAME|1|chemin' #NAME|1|c:\PANO\TESTE\M_au _P_TRACE\inclusion.bas et si voulez, on peut faire ceci: ' #NAME|1|c:\PANO\TESTE\M_au _P_TRACE\inclusion.bas| commentaire comme repère autre nom: ' #NAME|2|C:\PANO\TESTE\M_au _P_TRACE\suite_include.bas Le nom est mis dans un dlist, et retrouve le chemin selon le n°. Et pour include, ceci: #INCLUDE |1|ou #INCLUDE |2| Cela concerne le lanceur, c'est à dire le programme n°2 - Code:
-
' Auteur : cosmos70 hide 0 dim a$ , f$ , check$(10) ,a% , Nb_coord% f$ = "C:\PANO\envoi nom fichier.txt":' écriture du nom du fichier choisi pour être lancé par le loader
dlist 1 :' width 1,3000 : ' mettre large pour éviter les sauts de ligne dlist 3 :' left 3,300 dlist 4 :' top 4,200 dlist 6 :' top 6,200:left 6,300 dlist 7 :' sert à entrer les noms d''include for a%=1 to 100:item_add 7,"":next a% ' bar_both 1:bar_both 3:bar_both 4:bar_both 6 if file_exists(f$)=1 FILE_OPEN_READ 1,f$ FILE_READLN 1,a$ FILE_CLOSE 1 else ' message "pas trouvé" end_if ' caption 0,a$ if file_exists(a$)=1 then file_load 3,a$ if count(3)>0 then include() : chain "c:\PANO\panoramic.bas" : ' puis on exécute... end ' ==============================================================================' sub EXPLODE(separ$,chaine$) dim_local explode% dim_local copie$ , v_explode% for explode%=1 to 10:check$(explode%)="":next explode% explode%=1:copie$=chaine$ if right$(copie$,1)<> separ$ then copie$ = copie$ +separ$ repeat v_explode%=instr(copie$, separ$ ) if v_explode%>0 then check$(explode%)=left$(copie$,v_explode%-1):copie$=mid$(copie$,v_explode%+1,len(copie$)):explode%=explode%+1 until v_explode%=0:Nb_coord%=explode%-1 END_SUB
sub include() dim_local a%,b%,a$,v%,c$,lig_a% ,include% ,c% , n% , n$ if count(3)> 1 b%=0 :' pour numéroter les #include a%=1 repeat a$=item_read$(3,a%) ' je rajoute éventuellement les includes if left$(upper$(trim$(a$)),8)="#INCLUDE" :' syntaxe si NAME: #INCLUDE |N°| v%=instr(upper$(a$),"#INCLUDE ") :b% = b% + 1 :c$ = mid$(a$, v% + 9 , 80) if instr(a$,"|") >0 explode("|",a$ ) n%=val(check$(2)) c$=item_read$(7,n%) a$="#INCLUDE "+chr$(34)+c$+chr$(34) end_if item_add 4,trim$(a$) ' ___' item_add 1,"' #" + str$(b%) + " dépilé: " + trim$(a$) include%=1 file_add 6, c$ : lig_a%=a%+1 item_insert 3,a%+1,"' ==== FIN du programme #INCLUDE dépilé: "+c$+" #"+str$(b%)+" ====" for c%=1 to count(6) a$=item_read$(6,1) : item_insert 3,lig_a%,a$ : item_delete 6,1:lig_a%=lig_a%+1 next c% else if left$(upper$(trim$(a$) ),7 )="' #NAME" :' syntaxe: ' #NAME|1|chemin rem prendre le n° et le nom qui servira à l'include explode("|",trim$(a$)) n%=val(check$(2)) : n$=check$(3) item_delete 7,n% item_insert 7,n%,n$ end_if item_add 1,a$ end_if a%=a%+1 until a% > count(3) or scancode=27 end_if item_add 1,"" file_save 1,"c:\PANO\panoramic.bas" : ' on sauvegarde le contenu end_sub
Ce qui donne pour les programmes testes: celui qu'on appelle: - Code:
-
dim a% ,a$ ,b%,couleur% ' #NAME|1|c:\PANO\TESTE\M_au _P_TRACE\inclusion.bas rem 'programme d'appel pour les autres includes #INCLUDE |1|
rem 'retour des includes, suite du programme d'appel END le suivant: - Code:
-
' 1ère ligne du programme "inclusion.bas" ' #NAME|2|C:\PANO\TESTE\M_au _P_TRACE\suite_include.bas a$="inclusion" : b%=12874 : couleur%=12 for couleur%=1 to couleur%:next couleur% message "inclusion réussi" ' appel d'un include en position 2 rem '==fin mais appel d'un include: "suite_include.bas"== #include |2| le troisème n'ayant pas d'appel, ne change pas. On peut en reparler, car il est possible à ce moment là d'avoir une liste des includes, et simplement les numéroter. Là ça nécessite d'adopter le programme. Il est à noter que le programme recomposé dans l'ensemble peut être récupéré. Il suffit de regarder ceci: pour moi c'est dans la ligne: chain "c:\PANO\panoramic.bas" Je suis désolé de ne pas faire des choses simples qui rebutent les nouveaux et Jack. C'est mon problème. Je trouve que le principe de liste n'est pas idiot. Je vais me l'adapter. Ainsi: comme idée: "' #NAME |1|5|10|" inclura directement les includes aux emplacements #include |
| | | Invité Invité
| Sujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB Jeu 27 Sep 2012 - 0:29 | |
| Je suis reparti de l'idée précédente de faire une liste des includes. Pour les essais que j'ai donné plus haut avec includes, cela donne ceci: - Citation :
- c:\PANO\TESTE\M_au _P_TRACE\inclusion.bas |1 | teste include
C:\PANO\TESTE\M_au _P_TRACE\suite_include.bas |2 | suite teste include Pour ce faire, coder un programme avec des includes avec cette méthode, nécessite de pouvoir voir la liste facilement. J'ai donc rajouté un bouton qui permet de voir cette liste, et de la compléter au fur et à mesure:En cliquant dessus: on voit le memo:les commentaires sont optionnels mais les séparateurs sont obligatoires: | N° de ligne et explication de ce fait cet include. Le memo permet de modifier ou rajouter d'autre fichier. Evidemment il n'y a pas de mot de passe pour cet affichage, et la sauvegarde est aussi un double-clics sur le memo. Le 1er programme devient sans les datas:- Spoiler:
- Code:
-
width 0,330:height 0,290 :hide 0 :error_french label note,fin,temps,vide ,branche , copie ,valide , mdp_nul , note_plus , teste, lancer_prg , clic_item , ajout_item , annule , list_includ label ctr_key dim f$ ,p$ ,tx$ , f_n$ ,not$ , f_include$ dim a% ,a$ ,result$ , c%,c$ ,d$,d% , mdp% , prov$ , f_liste$ , f_chain$ , f_execute$ , save% dim tri%(70000) rem ligne suivante, la lancer au départ pour faire la liste de data à recopier en fin de programme, puis mettre en commentaire. ' melange(1000) : end tri(1000) ' ============================================================================================================================ ' f$= "c:\PANO\Note_essai.txt" :' sauvegarde criptée des notes dans le liste (A,B,C,D...Z) not$= "c:\PANO\NOTE_essai_" :' sauvegarde criptée des mots de passe prov$= "c:\PANO\temp\" :' sauvegarde temporaire pour connaitre les retours chariots f_chain$ = "C:\PANO\envoi nom fichier.txt":' écriture du nom du fichier choisi pour être lancé par le loader f_liste$ = "C:\PANO\clic_fichier.txt" :' liste des programmes à lancer sur un clic f_execute$ = "C:\PANO\loader_multiple.exe" :' Programme lançant l''exécution du programme par la fonction chain f_include$ = "C:\PANO\liste_includes.txt" open_dialog 1 ' ================================================================' list 2:width 2,310:height 2,200:top 2,40 :on_click 2,clic_item if file_exists(f_liste$) = 1 then file_load 2,f_liste$ button 3:caption 3,"ajouter fichier" :on_click 3,ajout_item button 4:caption 4,"annule":left 4,90:on_click 4,annule ' ================================================================' form 10:width 10,250:height 10,45:border_hide 10:left 10,screen_x - 280 :color 10,223,242,255 alpha 5 :parent 5,10:top 5,20:left 5,10:font_color 5,255,0,0:caption 5,left$(time$,5):height 5,12:font_bold 5 alpha 7 :parent 7,10:top 7,20:left 7,50:font_color 7,0,0,255:caption 7,date$ alpha 19 :parent 19,10:top 19,33:left 19,5:font_size 19,6:font_bold 19 button 11:parent 11,10:width 11,35:height 11,18:caption 11,"run":on_click 11,teste :font_size 11,4 button 12:parent 12,10:width 12,35:height 12,18:caption 12,"choisir":left 12,37 :font_size 12,4 :hint 12,"choisir le programme à lancer" on_click 12,lancer_prg button 9 :parent 9,10: left 9,75 :caption 9,"copie":height 9,18:width 9,40:on_click 9,copie:hint 9,"copie la dernière note ouverte" button 8 :parent 8,10: left 8,117:caption 8,"M.D.P.":on_click 8,note:height 8,18:width 8,40 :font_size 8,6 button 16:parent 16,10:top 16,01:left 16,160:width 16,15:height 16,17:font_name 16,"Webdings":caption 16,"x":on_click 16,mdp_nul:font_bold 16 :font_size 16,6 button 17:parent 17,10:top 17,01:left 17,177:width 17,15:height 17,17:font_name 17,"Webdings":caption 17,"£":on_click 17,fin:font_bold 17 :font_size 17,6 hint 16,"remet les notes au secret":hint 17,"ferme le programme" button 18:parent 18,10:top 18,20:left 18,177:width 18,15:height 18,17:font_name 18,"Webdings":caption 18,"é":on_click 18,list_includ:font_bold 18:font_size 18,6 hint 18, "liste includes" list 15 :parent 15,10:left 15,198:width 15,45: for a%=65 to 90:item_add 15,chr$(a%) : next a% :font_size 15,4 height 15,45:on_click 15,note_plus show 10 dlist 13 on_click 10,fin timer 6:timer_interval 6,30000:on_timer 6,temps form 20 :left 20,screen_x/2-400 : width 20,800:height 20,200:border_small 20 :on_close 20,vide:caption 20,"double_clic: enregistre" memo 21 :parent 21,20 : full_space 21:font_size 21,10 :font_bold 21 : on_double_click 21,branche : hide 20 :font_name 21,"Courier New" form 30:width 30,300:height 30,90:left 30,screen_x/2 - 150 : top 30,screen_y/2 - 45:hide 30: caption 30,"Entrez-le mot de passe" edit 31:parent 31,30:left 31,10:top 31,10:secret_on 31:width 31,180:font_size 31,12 :on_change 31,ctr_key button 32:parent 32,30:left 32,200:top 32,10:caption 32,"valide" :on_click 32,valide on_key_down 31,ctr_key end ' &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& list_includ: timer_off 6 show 20 f_n$ = f_include$ clear 21:file_load 21,f_include$ save%=1 return ' ================================= vide: clear 21 wait 500:hide 20:timer_on 6 return branche: if number_double_click = 21 then save() return copie: if message_confirmation_yes_no("Etes-vous sûr de copier le contenu"+chr$(13)+f_n$) = 1 file_load 13,f$:file_save 13,left$(f$, len(f$)-4)+"_copie.txt" end_if return ' ========================================' note_plus: timer_off 6 : save%=0 f_n$=not$+ item_index$(15)+".txt" secret() return ' ==============================================================================' note: timer_off 6 : save%=0 f_n$=f$ secret() return ' ---------' sub secret() if mdp%=0 then show 30:set_focus 31:color 10,223,242,255 :else :color 10,228,229,151 :gosub valide ' en appuyant sur valide, on se branche à valide end_sub valide: hide 30 if text$(31) = caption$(5) then mdp%=1 :color 10,228,229,151 :text 31,"" if mdp%=1 show 20 : if file_exists(f_n$) = 1 then decode(f_n$):caption 19,file_extract_name$(f_n$) end_if return ctr_key: if key_down_code = 13 then gosub valide return ' ------------------------------ sub decode(c$) dim_local c%,c$,a$ ,d$,d%,a%,b$ :b$="" if file_exists(f_n$) = 1 file_open_read 1,f_n$ file_read 1,d$ file_close 1 end_if b$="" for a% =1 to len(d$) c%= asc(mid$(d$,a%,1)) if even(tri%(a%))=1 c%=c%-1 else c%=c%+1 end_if b$=b$+chr$(c%) next a% clear 21 repeat c%=instr(b$, " " ) if c% >0 then a$=left$(b$,c%-1):item_add 21,a$:b$=mid$(b$,c%+1,len(b$)) until c%=0 or scancode =27 item_add 21,b$ end_sub err: message "a%="+str$(a%) +chr$(13)+left$(a$,a%) ' ============================================================================== sub save() font_color 21,255,0,0 if save%=0 dim_local a%,d$ ,c%,c$ ,b$ : d$="" :b$="" if count(21) > 0 file_save 21,prov$+"sauve.txt" file_open_read 1,prov$ + "sauve.txt" while file_eof(1) <> 1 file_readln 1,c$ d$ = d$ + c$ + " " end_while file_close 1 file_delete prov$+"sauve.txt" c$ = left$(d$,len(d$)-1 ) :' on retire le dernier return message c$ file_open_write 21,f_n$ : file_writeln 21,c$ : file_close 21 :' provisoire pour controle' for a%=1 to len(c$) c%=asc(mid$(c$,a%,1)) : if c%=9 then c%=32 if even(tri%(a%))=1 b$=b$ + chr$(c%+1) else b$=b$ + chr$(c%-1) end_if next a% file_open_write 21,f_n$ : file_writeln 21,b$ : file_close 21 end_if else file_save 21,f_include$ end_if font_color 21,0,0,0 :clear 21 : hide 20:timer_on 6 end_sub ' &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& temps: caption 5,left$(time$,5) return ' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' sub encode() dim_local b$,a%,c%,d$ :b$="" :d$="" if count(21) > 0 for a%=1 to count(21) d$= d$ + item_read$(21,a%) : if a% < count(21) then d$=d$ +"¤" next a% for a%=1 to len(d$) c%=asc(mid$(d$,a%,1)) if even(tri%(a%))=1 b$=b$ + chr$(c%+1) else b$=b$ + chr$(c%-10) end_if next a% result$=b$ file_open_write 21,f_$ : file_writeln 21,b$ : file_close 21 end_if end_sub ' ----------------------- mdp_nul: mdp%=0:color 10,223,242,255 return ' ------------------ sub tri(nb%) dim_local a%,b%,b$,i% ,c% : restore for a%=1 to nb% read b% : for c%=0 to 66 : tri%( a% + nb%*c% ) = b% : next c% next a%: i%=1 : restore rem on limite à la longueur de a$ for a%=1 to nb%*66 :' nb de data repeat read b% : if b% <=len(a$) then tri%(i%)=b% : i%=i%+1 :' i% jusqu''à len(a$) until i%=a% or scancode =0 if i% > len(a$) then exit_for next a% end_sub ' --------------' sub melange(nb%) dim_local a% , b% ,a$ ,b$ ,c% a$=" ": b$="Data " for a%=1 to nb%:' 10000 caption 0,str$(a%)+" - "+str$( count(1)) repeat b%=rnd(nb%-1) +1 +(nb%*c%) if instr(a$," "+str$(b%)+" ") = 0 then tri%(a%)=b%:a$=a$+str$(b%)+" " : b%=-1 until b%=-1 or scancode = 27 b$=b$+str$(tri%(a%)) if len(b$)< 145 b$=b$+"," else item_add 1,b$ :b$="Data " end_if if scancode = 27 then exit_for next a% if len(b$) > 5 then item_add 1,left$(b$,len(b$)-1) item_add 1,"' ----------------------------------------" end_sub ' ==============================================================================' teste: timer_off 6 inactive 11 if p$="" then active 11:return clic_item: timer_off 6 p$ = item_index$(2) file_open_write 1,f_chain$ FILE_WRITELN 1,p$ FILE_CLOSE 1 execute f_execute$ hide 0:show 10:set_focus 10 active 11 :active 12 :timer_on 6 return ' ========================= ajout_item: filter 1,"choisir un programme .bas|*.bas;*.bak" f$ = file_name$(1) if f$ <> "_" then item_add 2,f$:file_save 2,f_liste$ active 12:timer_on 6 return ' ========================== lancer_prg: timer_off 6 inactive 12 show 0 return ' ========================== annule: hide 0 :active 12 : timer_on 6 return fin: if message_confirmation_ok("on quitte vraiment ?") =1 then terminate Pour le lanceur: la fontion NAME n'existe plus, vu que c'est à partir d'une liste que le chemin est trouvé. Pour appeler un include: #INCLUDE |N°| Le n° étant le n° de ligne dans la liste.
Le programme n°2 devient:- Spoiler:
- Code:
-
' Auteur : cosmos70 hide 0 dim a$ , f$ , check$(10) ,a% , Nb_coord% , f_chain$ , f_include$
f$ = "C:\PANO\envoi nom fichier.txt":' écriture du nom du fichier choisi pour être lancé par le loader f_chain$ = "c:\PANO\panoramic.bas" f_include$= "C:\PANO\liste_includes.txt" ' ====================================== dlist 1 dlist 3 dlist 4 dlist 6 dlist 7 :' sert à entrer les noms d''include if FILE_EXISTS(f_include$) = 1 then file_load 7,f_include$
if file_exists(f$)=1 then FILE_OPEN_READ 1,f$ : FILE_READLN 1,a$ : FILE_CLOSE 1:else:message "pas de fichier" : return
if file_exists(a$)=1 then file_load 3,a$ if count(3)>0 then include() : chain "c:\PANO\panoramic.bas" : ' puis on exécute... end ' ==============================================================================' sub EXPLODE(separ$,chaine$) dim_local explode% dim_local copie$ , v_explode% for explode%=1 to 10:check$(explode%)="":next explode% explode%=1:copie$=chaine$ if right$(copie$,1)<> separ$ then copie$ = copie$ +separ$ repeat v_explode%=instr(copie$, separ$ ) if v_explode%>0 then check$(explode%)=left$(copie$,v_explode%-1):copie$=mid$(copie$,v_explode%+1,len(copie$)):explode%=explode%+1 until v_explode%=0:Nb_coord%=explode%-1 END_SUB
sub include() dim_local a%,b%,a$,v%,c$,lig_a% ,include% ,c% , n% , n$ if count(3)> 1 b%=0 :' pour numéroter les #include a%=1 repeat a$=item_read$(3,a%) ' je rajoute éventuellement les includes if left$(upper$(trim$(a$)),8)="#INCLUDE" :' syntaxe possible ici: #INCLUDE |N°| v%=instr(upper$(a$),"#INCLUDE ") :b% = b% + 1 :c$ = mid$(a$, v% + 9 , 80) if instr(a$,"|") >0 explode("|",a$ ) n%=val(check$(2)) explode("|",item_read$(7,n%) ) c$=trim$(check$(1)) a$="#INCLUDE "+chr$(34)+c$+chr$(34) end_if item_add 4,trim$(a$) ' ___' item_add 1,"' #" + str$(b%) + " dépilé: " + trim$(a$) include%=1 file_add 6, c$ : lig_a%=a%+1 :' on ajoute le fichier c$
item_insert 3,a%+1,"' ==== FIN du programme #INCLUDE dépilé: "+c$+" #"+str$(b%)+" ====" for c%=1 to count(6) a$=item_read$(6,1) : item_insert 3,lig_a%,a$ : item_delete 6,1:lig_a%=lig_a%+1 next c% else item_add 1,a$ end_if a%=a%+1 until a% > count(3) or scancode=27 end_if item_add 1,"" file_save 1,f_chain$: ' on sauvegarde le contenu end_sub
Les programmes testes:- Spoiler:
1) nommé: include_teste.bas - Code:
-
dim a% ,a$ ,b%,couleur% rem 'programme d'appel pour les autres includes #INCLUDE |1|
rem 'retour des includes, suite du programme d'appel message "retour au programme de départ et fin" END 2) nommé:inclusion.bas - Code:
-
' 1ère ligne du programme "inclusion.bas" a$="inclusion" : b%=12874 : couleur%=12 for couleur%=1 to couleur%:next couleur% message "inclusion réussi" ' appel d'un include en position 2 rem '==fin mais appel d'un include: "suite_include.bas"== #include |2| 3) nommé: suite_include.bas - Code:
-
' essai de rajouter un nouvel include message "include sous_niveau" rem sortie "suite_include.bas"
Je pense qu'on peut arrêter là. correction d'un bug avec les notes à cause des variables locales qui se réaffectaient.29/09/12 à 00:30h
Dernière édition par cosmos70 le Sam 29 Sep 2012 - 0:33, édité 3 fois |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB Jeu 27 Sep 2012 - 7:42 | |
| Beau boulot Cosmos | |
| | | Contenu sponsorisé
| Sujet: Re: Module pour lancer un programme avec des INCLUDES et des SUB | |
| |
| | | | Module pour lancer un programme avec des INCLUDES et des SUB | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |