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 |
|
|
| Editeur avec marquage syntaxique | |
|
+8Minibug Froggy One Jack jean_debord Yannick Jicehel JL35 Klaus 12 participants | |
Auteur | Message |
---|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Editeur avec marquage syntaxique Jeu 21 Aoû 2014 - 12:29 | |
| Excellent, ça voudra dire des programmes encore plus facilement trnasportable puisqu'intégrés totalement. Bon courage à vous. Beau projet | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Jeu 21 Aoû 2014 - 13:30 | |
| Avec la nouvelle version V2.23 de ce jour de la DLL, le programme Synedit_Editor applique maintenant la coloration syntaxique ! En plus, il y a maintenant la possibilité de créer des "macros" qui sont des portions de code réutilisables et mémorisées. Pour le moment, seule le remplacement d'une page d'édition par une telle macro est possible, mais bientôt, on pourra l'injecter ) l'endroit qu'on veut. Voici le source: - Code:
-
' Synedit_Editor.bas
' Options générales ' ================= ' Les options générales sont accessibles à tout moment. ' Elles sont mémorisées dans le fichier suivant: ' (chemin)\Synedit_Editor.ini ' où "chemin" représente le chemin vers Synedit.exe. ' Ces options s'imposent à toutes les pages. ' Leur modification prend effet immédiatement, ' mais leur action n'est visible dans les pages existantes ' que lors de la consultation suivante du paralètre. Par ' exemple, la police par défaut sera utilisée pour créer ' une page vide ou charger un fichier, mais ne modifiera ' pas les polices déjà configurées pour des pages affichées.
' Les macros sont des portions de code mémorisées dans des fichiers ' (chemin)\Synedit_Editor_Macros\(nom).macro ' Ces fichiers sont créées par le menu de configuration des macros ' et utilisés à partir du menu d'exécution des macros.
label close0, close3000, close3200, close3300 label nouveau, ouvrir, copier, fermer, sauver, sauverdans, sortir label lignes, options, optionsgen, tick, fenetre label aide, apropos label options_abandon, options_valider label optionsgen_abandon, optionsgen_valider label apropos_fermer, outilsconfig, outilsexec label macrosconfig, macrosexec label macroadd, macrodel, macromod, macroupd
' ===== variables pour gérer les pages d'édition dim OptGen$ : ' options générales dim SE%(100) : ' les objets Synedit dim hndSE%(100) : ' les handles des fenêtres dim ln%(100) : ' flags "numéros de lignes affichés" dim capt$(100) : ' titre des fenetres dim OSE$(100) : ' les options des objets dim FSE$(100) : ' les noms des fichiers dim nsyn% : ' plus grand numéro de page d'édition (0...100) dim act% : ' page d'édition actuellement active (0...100)
' ===== variables internes dim res%, d%, nf%, t%, l%, i%, optvalid%, opt$, f$, org%, s$, olddir$
' ===== constantes dim M1% : M1% = 0 - 1 dim version$ : version$ = "Alpha 0.1" dim verdat$ : verdat$ = "21/08/2014" dim KGF$ : KGF$ = "KGF.dll" dim dir$ : dir$ = file_extract_path$(param_value$(0)) dim ini$ : ini$ = dir$+"Synedit_editor.ini" dim dirmacros$ : dirmacros$ = dir$ + "Synedit_Editor_Macros\"
' configurer la form 0 (uniquement le menu) width 0,800 : height 0,60 : border_small 0
' ===== création de tous les menus main_menu 10 sub_menu 11 : parent 11,10 : caption 11,"Fichier" sub_menu 12 : parent 12,11 : caption 12,"Nouveau" : on_click 12,nouveau sub_menu 13 : parent 13,11 : caption 13,"Ouvrir..." : on_click 13,ouvrir sub_menu 14 : parent 14,11 : caption 14,"Copier" : on_click 14,copier sub_menu 15 : parent 15,11 : caption 15,"Fermer" : on_click 15,fermer sub_menu 16 : parent 16,11 : caption 16,"Sauver" : on_click 16,sauver sub_menu 17 : parent 17,11 : caption 17,"Sauver dans..." : on_click 17,sauverdans sub_menu 18 : parent 18,11 : caption 18,"-" sub_menu 19 : parent 19,11 : caption 19,"Sortir" : on_click 19,sortir sub_menu 21 : parent 21,10 : caption 21,"Options" sub_menu 22 : parent 22,21 : caption 22,"N° de ligne" : on_click 22,lignes sub_menu 23 : parent 23,21 : caption 23,"Options de la page" : on_click 23,options sub_menu 24 : parent 24,21 : caption 24,"Options générales" : on_click 24,optionsgen sub_menu 400 : parent 400,10 : caption 400,"Edition" sub_menu 401 : parent 401,400 : caption 401,"pas encore implémenté" : ' on_click 401,??? sub_menu 430 : parent 430,10 : caption 430,"Outils" sub_menu 431 : parent 431,430 : caption 431,"Configuration" : on_click 431,outilsconfig sub_menu 432 : parent 432,430 : caption 432,"Exécution" : on_click 432,outilsexec sub_menu 440 : parent 440,10 : caption 440,"Macros" sub_menu 441 : parent 441,440 : caption 441,"Configuration" : on_click 441,macrosconfig sub_menu 442 : parent 442,440 : caption 442,"Exécution" : on_click 442,macrosexec sub_menu 300 : parent 300,10 : caption 300,"Fenêtres" ' sub_menu 301 : parent 301,300 : caption 301,"Fenêtre" : on_click 301,fenetre sub_menu 420 : parent 420,10 : caption 420,"Aide" sub_menu 421 : parent 421,420 : caption 421,"Aide" : on_click 421,aide sub_menu 422 : parent 422,420 : caption 422,"A-propos" : on_click 422,apropos
' ===== création de la fenêtre des options de la page actuelle form 3000 : hide 3000 : caption 3000,"Options" : command_target_is 3000 top 3000,100 : left 3000,200 width 3000,550 :height 3000,400 : on_close 3000,close3000 check 3001 : top 3001,10 : left 3001,10 : width 3001,150 caption 3001,"Numéros de de ligne" container 3002 : caption 3002,"Format par défaut" top 3002,40 : left 3002,10 : width 3002,250 : height 3002,110 combo 3003 : parent 3003,3002 : top 3003,20 : left 3003,10 : width 3003,170 font_names_load 3003 : text 3003,"Courier" alpha 3004 : parent 3004,3002 : top 3004,50 : left 3004,10 : caption 3004,"Taille:" combo 3005 : parent 3005,3002 : top 3005,50 : left 3005,60 : width 3005,40 item_add 3005,"8" item_add 3005,"9" item_add 3005,"10" item_add 3005,"11" item_add 3005,"12" item_add 3005,"14" item_add 3005,"16" item_add 3005,"18" text 3005,"10" check 3006 : parent 3006,3002 : top 3006,80 : left 3006,10 : caption 3006,"Gras" font_bold 3006 check 3007 : parent 3007,3002 : top 3007,80 : left 3007,60 : caption 3007,"Italique" font_italic 3007 check 3008 : parent 3008,3002 : top 3008,80 : left 3008,120 : caption 3008,"Sousligné" font_underline 3008 check 3009 : parent 3009,3002 : top 3009,80 : left 3009,190 : caption 3009,"Barré" : width 3009,40 font_strike 3009 alpha 3010 : top 3010,160 : left 3010,10 : caption 3010,"Syntaxe:" combo 3011 : top 3011,160 : left 3011,80 : width 3011,150 button 3098 : top 3098,300 : left 3098,10 : caption 3098,"Abandon" on_click 3098,options_abandon button 3099 : top 3099,300 : left 3099,210 : caption 3099,"Valider" on_click 3099,options_valider
' ===== création de la fenêtre des options générales form 3200 : hide 3200 : caption 3200,"Options" : command_target_is 3200 top 3200,100 : left 3200,200 width 3200,550 :height 3200,400 : on_close 3200,close3200 check 3201 : top 3201,10 : left 3201,10 : width 3201,150 caption 3201,"Numéros de de ligne" container 3202 : caption 3202,"Format par défaut" top 3202,40 : left 3202,10 : width 3202,250 : height 3202,110 combo 3203 : parent 3203,3202 : top 3203,20 : left 3203,10 : width 3203,170 font_names_load 3203 : text 3203,"Courier" alpha 3204 : parent 3204,3202 : top 3204,50 : left 3204,10 : caption 3204,"Taille:" combo 3205 : parent 3205,3202 : top 3205,50 : left 3205,60 : width 3205,40 item_add 3205,"8" item_add 3205,"9" item_add 3205,"10" item_add 3205,"11" item_add 3205,"12" item_add 3205,"14" item_add 3205,"16" item_add 3205,"18" text 3205,"10" check 3206 : parent 3206,3202 : top 3206,80 : left 3206,10 : caption 3206,"Gras" font_bold 3206 check 3207 : parent 3207,3202 : top 3207,80 : left 3207,60 : caption 3207,"Italique" font_italic 3207 check 3208 : parent 3208,3202 : top 3208,80 : left 3208,120 : caption 3208,"Sousligné" font_underline 3208 check 3209 : parent 3209,3202 : top 3209,80 : left 3209,190 : caption 3209,"Barré" : width 3209,40 font_strike 3209 alpha 3210 : top 3210,160 : left 3210,10 : caption 3210,"Syntaxe:" combo 3211 : top 3211,160 : left 3211,80 : width 3211,150
button 3298 : top 3298,300 : left 3298,10 : caption 3298,"Abandon" on_click 3298,optionsgen_abandon button 3299 : top 3299,300 : left 3299,210 : caption 3299,"Valider" on_click 3299,optionsgen_valider
' ===== création de la fenêtre des définitions des macros form 3300 : hide 3300 : caption 3300,"Configuration des macros" : command_target_is 3300 top 3300,0 : left 3300,width(0) : border_small 3300 width 3300,360 :height 3300,105 : on_close 3300,close3300 alpha 3301 : top 3301,10 : left 3301,10 : caption 3301,"Nom:" combo 3302 : top 3302,10 : left 3302,50 : width 3302,280 : sort_on 3302 button 3303 : top 3303,40 : left 3303,50 : width 3303,70 caption 3303,"Nouveau" : font_bold 3303 : on_click 3303,macroadd button 3304 : top 3304,40 : left 3304,120 : width 3304,70 caption 3304,"Supprimer" : font_bold 3304 : on_click 3304,macrodel button 3305 : top 3305,40 : left 3305,190 : width 3305,70 caption 3305,"Editer" : font_bold 3305 : on_click 3305,macromod button 3306 : top 3306,40 : left 3306,260 : width 3306,70 caption 3306,"Remplacer" : font_bold 3306 : on_click 3306,macroupd
' ===== création de la fenêtre A-propos form 3100 : hide 3100 : top 3100,100 : left 3100,300 : command_target_is 3100 width 3100,400 : height 3100,200 : on_close 3100,apropos_fermer picture 3101 : full_space 3101 : print_target_is 3101 font_name 3101,"Courier" : font_size 3101,10 : font_bold 3101 print_locate 40,20 : print "Programme: "+"Synedit_Editor" print_locate 40,40 : print "Version: "+version$ print_locate 40,60 : print "Date: "+verdat$ print_locate 40,80 : print "Auteur: "+"Klaus"
' ===== quelques objets invisbles command_target_is 0 memo 96 :hide 96 save_dialog 97 open_dialog 98 timer 99 : timer_off 99 : timer_interval 99,300 : on_timer 99,tick ' ===== activer la DLL dll_on KGF$
' === faire quelques initialialisations res% = dll_call0("SyneditInitialize") res% = DLL_call2("SetCloseBox",handle(0),0) : ' désactiver la croix rouge ! res% = dll_call3("SyneditMode",0,4,0) : ' récupérer la liste des définitions de syntaxe s$ = clipboard_string_paste$ : ' sauvegarder le presse-papier clipboard_paste 96 : ' la charger dans un mémo for i%=1 to count(96) : ' et recopier dans la combo item_add 3011,item_read$(96,i%) : ' options de la page item_add 3211,item_read$(96,i%) : ' options générales next i% clipboard_string_copy s$ : ' restaurer le presse-papier res% = dll_call2("SelectComboBoxItem",handle(3011),1) : ' sélectionner (aucune) res% = dll_call2("SelectComboBoxItem",handle(3211),1) : ' sélectionner (aucune) OptGen$ = "0100000Courier\(aucune)" : ' options générales par défaut if file_exists(ini$)=1 : ' si fichier INI existe, relire les options générales file_open_read 1,ini$ file_readln 1,OptGen$ file_close 1 else : ' si fichier INI n'existe pas, le créer file_open_write 1,ini$ file_writeln 1,OptGen$ file_close 1 end_if if dir_exists(dirmacros$)=0 then dir_make dirmacros$ : ' créer le dossier des macros olddir$ = dir_current$ : ' sauvegarder le dossier actuel dir_change dirmacros$ : ' aller dans le dossier des macros s$ = file_find_first$ : ' parcourir ce dossier while s$<>"_" : ' pour charger la liste des macros existantes if left$(s$,1)<>"." if right$(s$,6)=".macro" s$ = left$(s$,len(s$)-6) item_add 3302,s$ end_if end_if s$ = file_find_next$ end_while dir_change olddir$ : ' restaurer le dossier par défaut if count(3302)>0 then res% = dll_call2("SelectComboBoxItem",handle(3302),1) : ' sélectionner la première macro end
' ===== à la fin, on supprime toutes les fenêtres ouvertes close0: while nsyn%>0 res% = dll_call1("SyneditDelete",SE%(nsyn%)) pause 500 : ' ce délai pourra éventuellement être réduit... delete 100+nsyn% nsyn% = nsyn% - 1 end_while return
' ===== fermeture de la fenêtre des paramètres de la page close3000: closeX(3000) return ' ===== fermeture de la fenêtre des paramètres généraux close3200: closeX(3200) return
' ===== fermeture de la fenêtre de configuration des macros close3300: closeX(3300) return
' ===== mode d'emploi aide: message "L'aide n'est pas encore implémentée." return ' ===== montrer la fenêtre A-propos apropos: show 3100 inactive 0 return ' ===== fermer la fenêtre A-propos et restaurer la fenêtre active apropos_fermer: hide 3100 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if return ' ===== sortir du programme sortir: gosub close0 res% = dll_call1("KillProcessByHandle",handle(0)) ' *** on ne passera jamais ici !
' ===== choisir une fenêtre par le menu "Fenêtres" fenetre: mark_off 300+act% act% = number_click-300 mark_on 300+act% show 100 + act% to_foreground 100 + act% return
' ======================== fonctions du menu "Fichiers"
' ===== créer une nouvelle fenêtre d'édition vide nouveau: if nsyn%=100 then return if nsyn%>0 t% = top(100+nsyn%) l% = left(100+nsyn%) else t% = top(0) + 50 l% = left(0) + 50 end_if nsyn% = nsyn% + 1 if act%>0 then mark_off 300+act% act% = nsyn% d% = 20 nf% = 100 + nsyn% capt$(nsyn%) = "<nouveau "+str$(nsyn%)+">" form nf% : top nf%,t%+d% : left nf%,l%+d% : width nf%,600 : height nf%,400 caption nf%,capt$(nsyn%) hndSE%(nsyn%) = handle(nf%) opt$ = OptGen$ : ' par défaut, prendre les options générales OSE$(nsyn%) = opt$ FSE$(nsyn%) = "_" sub_menu 300+nsyn% : parent 300+nsyn%,300 : caption 300+nsyn%,capt$(nsyn%) : on_click 300+nsyn%,fenetre mark_on 300+act% SE%(nsyn%) = dll_call1("SyneditCreate",handle(nf%)) res% = dll_call3("SyneditMode",SE%(nsyn%),3,adr(opt$)) res% = dll_call5("SyneditGeometry",SE%(nsyn%),M1%,M1%,M1%,M1%) if nsyn%=1 then timer_on 99 return ' ===== créer une nouvelle fenêtre d'édition et y charger un fichier ouvrir: f$ = file_name$(98) if f$="_" then return if file_exists(f$)=0 message "Ouverture impossible" return end_if gosub nouveau res% = dll_call2("SyneditOpen",SE%(act%),adr(f$)) if res%=0 FSE$(act%) = f$ f$ = file_extract_name$(f$) capt$(act%) = f$ caption 100+act%,f$ caption 300+act%,f$ end_if return ' ===== créer une nouvelle fenêtre d'édition et y charger une copie de la fenêtre active copier: if act%=0 then return org% = act% gosub nouveau if res%=0 res% = dll_call2("SyneditCopyObject",org%,act%) capt$(nsyn%) = "(copie) "+capt$(org%) caption 100+nsyn%,capt$(nsyn%) caption 300+nsyn%,capt$(nsyn%) FSE$(nsyn%) = "_" OSE$(nsyn%) = OSE$(org%) end_if return ' ===== fermer la fenêtre active fermer: if act%=0 then return res% = dll_call1("SyneditDelete",SE%(act%)) pause 500 delete 100+act% inactive 300+act% caption 300+act%,"<supprimé>" SE%(act%) = 0 while SE%(nsyn%)=0 delete 300+nsyn% nsyn% = nsyn% - 1 if nsyn%=0 then exit_while end_while return ' =====enregistrer la fenêtre active dans son fichier associé sauver: if act%=0 then return if FSE$(act%)="_" then goto sauverdans f$ = FSE$(act%) res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) return
' ===== enregistrer la fenêtre active dans un fichier choisi par dialogue sauverdans: if act%=0 then return f$ = file_name$(97) if f$="_" then return if file_exists(f$)=1 if message_confirmation_yes_no("Ce fichier existe déjà. Voulez-vous le remplacer ?")<>1 then return end_if res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) if res%=0 FSE$(act%) = f$ f$ = file_extract_name$(f$) caption 100+act%,f$ caption 300+act%,f$ capt$(act%) = f$ end_if return ' ======================== fonctions du menu "Outils"
' ===== configuration des outils outilsconfig: message "pas encore implémenté." return ' ===== exécution des outils outilsexec: message "pas encore implémenté." return
' ======================== fonctions du menu "Macros"
' ===== configuration des macros macrosconfig: show 3300 inactive 0 return
' ===== exécution des outils macrosexec: if act%=0 then return message "pas encore implémenté." return
' ===== ajouter une nouvelle macro à partir du presse-papier macroadd: if act%=0 then return f$ = trim$(text$(3302)) if f$="" then return i% = 0 while i%<count(3302) i% = i% + 1 if f$=item_read$(3302,i%) message "Cette macro existe déjà." return end_if end_while res% = dll_call1("SyneditCopyText",act%) if res%<1 message "Il n'y a rien dans le presse-papier." return end_if s$ = clipboard_string_paste$ file_open_write 1,dirmacros$+f$+".macro" file_writeln 1,s$ file_close 1 item_add 3302,f$ message "La macro "+f$+" a été créée." return ' supprimer la macro sélectionnée macrodel: if count(3302)=0 then return s$ = item_index$(3302) i% = message_confirmation_yes_no("Voulez-vous vraiment supprimer la macro "+s$) if i%<>1 then return f$ = dirmacros$ + s$ + ".macro" file_delete f$ item_delete 3302,item_index(3302) if count(3302)>0 then res% = dll_call2("SelectComboBoxItem",handle(3302),1) message "La macro "+s$+" a été supprimée." return
' remplacer la page actuelle par la macro sélectionnée macromod: if act%=0 then return f$ = dirmacros$ + item_index$(3302)+".macro" res% = dll_call2("SyneditOpen",act%,adr(f$)) caption 100+act%,"(macro) "+item_index$(3302) caption 300+act%,"(macro) "+item_index$(3302) capt$(act%) = "(macro) "+item_index$(3302) return
' replacer la macro sélectioonnée par la page actuelle macroupd: if act%=0 then return f$ = dirmacros$ + item_index$(3302)+".macro" res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) message "La macro "+item_index$(3302)+" a été remplacée." return
' ======================== fonctions du menu "Options"
' ===== inverser l'indicateur de présence des numéros de ligne dans la fenêtre active lignes: ln%(act%) = 1 - ln%(act%) : ' basculer 0<-->1 res% = dll_call3("SyneditMode",SE%(act%),1,ln%(act%)) : ' signaler à Synedit res% = dll_call3("SyneditMode",SE%(act%),2,0) : ' redonner le focus à Synedit OSE$(act%) = str$(ln%(act%)) + mid$(OSE$(act%),2,20) : ' mémoriser dans les param_tres return ' ===== charger la fenêtre des options avec les valeurs de la fenêtre active, puis afficher options: if act%=0 then return optvalid% = 0 opt$ = OSE$(act%) if left$(opt$,1)="1" mark_on 3001 else mark_off 3001 end_if text 3005,mid$(opt$,2,2) if mid$(opt$,4,1)="1" mark_on 3006 else mark_off 3006 end_if if mid$(opt$,5,1)="1" mark_on 3007 else mark_off 3007 end_if if mid$(opt$,6,1)="1" mark_on 3008 else mark_off 3008 end_if if mid$(opt$,7,1)="1" mark_on 3009 else mark_off 3009 end_if i% = instr(opt$,"\") text 3003,mid$(opt$,8,i%-8) opt$ = mid$(opt$,i%+1,len(opt$)) for i%=1 to count(3011) if opt$=item_read$(3011,i%) res% = dll_call2("SelectComboBoxItem",handle(3011),i%) : ' restaurer la syntaxe exit_for end_if next i% show 3000 inactive 0 return ' ===== charger la fenêtre des options générales, puis afficher optionsgen: if left$(OptGen$,1)="1" mark_on 3201 else mark_off 3201 end_if text 3205,mid$(OptGen$,2,2) if mid$(OptGen$,4,1)="1" mark_on 3206 else mark_off 3206 end_if if mid$(OptGen$,5,1)="1" mark_on 3207 else mark_off 3207 end_if if mid$(OptGen$,6,1)="1" mark_on 3208 else mark_off 3208 end_if if mid$(OptGen$,7,1)="1" mark_on 3209 else mark_off 3209 end_if i% = instr(OptGen$,"\") text 3203,mid$(OptGen$,8,i%-8) opt$ = mid$(OptGen$,i%+1,len(OptGen$)) for i%=1 to count(3211) if opt$=item_read$(3211,i%) res% = dll_call2("SelectComboBoxItem",handle(3211),i%) : ' restaurer la syntaxe exit_for end_if next i% show 3200 inactive 0 return ' ===== sortie de la fenêtre des options de la page par "Abandon" options_abandon: hide 3000 show 0 active 0 to_foreground 0 return
' ===== sortie de la fenêtre des options générales par "Abandon" optionsgen_abandon: hide 3200 show 0 active 0 to_foreground 0 return
' =====sortie de la fenêtre des options de la page par "Valider" options_valider: ' construire le paramètre: ' xttgisbp\S ' x=numéros de ligne tt=taille g=gras i=italique s=souslgné b=barré ' p=police S=syntaxe optvalid% = 1 opt$ = str$(checked(3001))+right$("0"+text$(3005),2)+str$(checked(3006)) opt$ = opt$ + str$(checked(3007))+str$(checked(3008))+str$(checked(3009)) opt$ = opt$ + text$(3003) + "\" + text$(3011) OSE$(act%) = opt$ ln%(act%) = checked(3001) res% = dll_call3("SyneditMode",SE%(act%),3,adr(opt$)) : ' activer les nouvelles options hide 3000 show 0 active 0 to_foreground 0 return ' =====sortie de la fenêtre des options générales par "Valider" optionsgen_valider: ' construire le paramètre: ' xttgisbp\S ' x=numéros de ligne tt=taille g=gras i=italique s=souslgné b=barré ' p=police S=syntaxe optvalid% = 1 opt$ = str$(checked(3201))+right$("0"+text$(3205),2)+str$(checked(3206)) opt$ = opt$ + str$(checked(3207))+str$(checked(3208))+str$(checked(3209)) opt$ = opt$ + text$(3203) + "\" + text$(3211) OptGen$ = opt$ : ' mémoriser les options générales file_open_write 1,ini$ file_writeln 1,OptGen$ file_close 1 hide 3200 show 0 active 0 to_foreground 0 return
' ======================== fonctions indépendantes
' ===== ce timer surveille la fenêtre active et ses dimensions tick: timer_off 99 res% = dll_call0("GetActiveWindow") : ' récupérer le handle de la fenêtre active for i%=1 to nsyn% : ' chercher dans la table des fenêtres d"édition if res%=hndSE%(i%) : ' est-ce qu'on a trouvé la fenêtre if i%<>act% : ' est-elle différente de la fenêtre active précédente ? mark_off 300+act% : ' alors changer le marquade du menu mark_on 300+i% end_if act% = i% : ' mémoriser le numéro de la fenêtre active res% = dll_call5("SyneditGeometry",SE%(act%),M1%,M1%,M1%,M1%) : ' ajuster la taille de Synedit à celle de la fenêtre exit_for end_if next i% timer_on 99 return
' ======================== SUBs internes
' ===== fermer une des fenêres auxiliaires modales sub CloseX(f%) if optvalid%=0 hide f% show 0 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if end_if end_sub
| |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Re Jeu 21 Aoû 2014 - 17:41 | |
| Vous êtes géniaux ! à mon petit niveau, j'adopte ce programme, ensuite... il faudra que je me mette à cette DLL ! MERCI !!! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Editeur avec marquage syntaxique Jeu 21 Aoû 2014 - 21:40 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Jeu 21 Aoû 2014 - 21:50 | |
| Avec la nouvelle version V3.24 de ce jour, Synedit_Editor sait injécter une macro à la position actuelle du curseur. Voici le source: - Code:
-
' Synedit_Editor.bas
' Options générales ' ================= ' Les options générales sont accessibles à tout moment. ' Elles sont mémorisées dans le fichier suivant: ' (chemin)\Synedit_Editor.ini ' où "chemin" représente le chemin vers Synedit.exe. ' Ces options s'imposent à toutes les pages. ' Leur modification prend effet immédiatement, ' mais leur action n'est visible dans les pages existantes ' que lors de la consultation suivante du paralètre. Par ' exemple, la police par défaut sera utilisée pour créer ' une page vide ou charger un fichier, mais ne modifiera ' pas les polices déjà configurées pour des pages affichées.
' Les macros sont des portions de code mémorisées dans des fichiers ' (chemin)\Synedit_Editor_Macros\(nom).macro ' Ces fichiers sont créées par le menu de configuration des macros ' et utilisés à partir du menu d'exécution des macros.
label close0, close3000, close3200, close3300 label nouveau, ouvrir, copier, fermer, sauver, sauverdans, sortir label lignes, options, optionsgen, tick, fenetre label aide, apropos label options_abandon, options_valider label optionsgen_abandon, optionsgen_valider label apropos_fermer, outilsconfig, outilsexec label macrosconfig label macroadd, macrodel, macromod, macroupd, macroins, macrosel
' ===== variables pour gérer les pages d'édition dim OptGen$ : ' options générales dim SE%(100) : ' les objets Synedit dim hndSE%(100) : ' les handles des fenêtres dim ln%(100) : ' flags "numéros de lignes affichés" dim capt$(100) : ' titre des fenetres dim OSE$(100) : ' les options des objets dim FSE$(100) : ' les noms des fichiers dim nsyn% : ' plus grand numéro de page d'édition (0...100) dim act% : ' page d'édition actuellement active (0...100)
' ===== variables internes dim res%, d%, nf%, t%, l%, i%, optvalid%, opt$, f$, org%, s$, s1$, olddir$
' ===== constantes dim M1% : M1% = 0 - 1 dim version$ : version$ = "Alpha 0.2" dim verdat$ : verdat$ = "21/08/2014" dim KGF$ : KGF$ = "KGF.dll" dim dir$ : dir$ = file_extract_path$(param_value$(0)) dim ini$ : ini$ = dir$+"Synedit_editor.ini" dim dirmacros$ : dirmacros$ = dir$ + "Synedit_Editor_Macros\"
' configurer la form 0 (uniquement le menu) width 0,800 : height 0,60 : border_small 0
' ===== création de tous les menus main_menu 10 sub_menu 11 : parent 11,10 : caption 11,"Fichier" sub_menu 12 : parent 12,11 : caption 12,"Nouveau" : on_click 12,nouveau sub_menu 13 : parent 13,11 : caption 13,"Ouvrir..." : on_click 13,ouvrir sub_menu 14 : parent 14,11 : caption 14,"Copier" : on_click 14,copier sub_menu 15 : parent 15,11 : caption 15,"Fermer" : on_click 15,fermer sub_menu 16 : parent 16,11 : caption 16,"Sauver" : on_click 16,sauver sub_menu 17 : parent 17,11 : caption 17,"Sauver dans..." : on_click 17,sauverdans sub_menu 18 : parent 18,11 : caption 18,"-" sub_menu 19 : parent 19,11 : caption 19,"Sortir" : on_click 19,sortir sub_menu 21 : parent 21,10 : caption 21,"Options" sub_menu 22 : parent 22,21 : caption 22,"N° de ligne" : on_click 22,lignes sub_menu 23 : parent 23,21 : caption 23,"Options de la page" : on_click 23,options sub_menu 24 : parent 24,21 : caption 24,"Options générales" : on_click 24,optionsgen sub_menu 400 : parent 400,10 : caption 400,"Edition" sub_menu 401 : parent 401,400 : caption 401,"pas encore implémenté" : ' on_click 401,??? sub_menu 430 : parent 430,10 : caption 430,"Outils" sub_menu 431 : parent 431,430 : caption 431,"Configuration" : on_click 431,outilsconfig sub_menu 432 : parent 432,430 : caption 432,"Exécution" : on_click 432,outilsexec sub_menu 440 : parent 440,10 : caption 440,"Macros" sub_menu 441 : parent 441,440 : caption 441,"Macros" : on_click 441,macrosconfig sub_menu 300 : parent 300,10 : caption 300,"Fenêtres" ' sub_menu 301 : parent 301,300 : caption 301,"Fenêtre" : on_click 301,fenetre sub_menu 420 : parent 420,10 : caption 420,"Aide" sub_menu 421 : parent 421,420 : caption 421,"Aide" : on_click 421,aide sub_menu 422 : parent 422,420 : caption 422,"A-propos" : on_click 422,apropos
' ===== création de la fenêtre des options de la page actuelle form 3000 : hide 3000 : caption 3000,"Options" : command_target_is 3000 top 3000,100 : left 3000,200 width 3000,550 :height 3000,400 : on_close 3000,close3000 check 3001 : top 3001,10 : left 3001,10 : width 3001,150 caption 3001,"Numéros de de ligne" container 3002 : caption 3002,"Format par défaut" top 3002,40 : left 3002,10 : width 3002,250 : height 3002,110 combo 3003 : parent 3003,3002 : top 3003,20 : left 3003,10 : width 3003,170 font_names_load 3003 : text 3003,"Courier" alpha 3004 : parent 3004,3002 : top 3004,50 : left 3004,10 : caption 3004,"Taille:" combo 3005 : parent 3005,3002 : top 3005,50 : left 3005,60 : width 3005,40 item_add 3005,"8" item_add 3005,"9" item_add 3005,"10" item_add 3005,"11" item_add 3005,"12" item_add 3005,"14" item_add 3005,"16" item_add 3005,"18" text 3005,"10" check 3006 : parent 3006,3002 : top 3006,80 : left 3006,10 : caption 3006,"Gras" font_bold 3006 check 3007 : parent 3007,3002 : top 3007,80 : left 3007,60 : caption 3007,"Italique" font_italic 3007 check 3008 : parent 3008,3002 : top 3008,80 : left 3008,120 : caption 3008,"Sousligné" font_underline 3008 check 3009 : parent 3009,3002 : top 3009,80 : left 3009,190 : caption 3009,"Barré" : width 3009,40 font_strike 3009 alpha 3010 : top 3010,160 : left 3010,10 : caption 3010,"Syntaxe:" combo 3011 : top 3011,160 : left 3011,80 : width 3011,150 button 3098 : top 3098,300 : left 3098,10 : caption 3098,"Abandon" on_click 3098,options_abandon button 3099 : top 3099,300 : left 3099,210 : caption 3099,"Valider" on_click 3099,options_valider
' ===== création de la fenêtre des options générales form 3200 : hide 3200 : caption 3200,"Options" : command_target_is 3200 top 3200,100 : left 3200,200 width 3200,550 :height 3200,400 : on_close 3200,close3200 check 3201 : top 3201,10 : left 3201,10 : width 3201,150 caption 3201,"Numéros de de ligne" container 3202 : caption 3202,"Format par défaut" top 3202,40 : left 3202,10 : width 3202,250 : height 3202,110 combo 3203 : parent 3203,3202 : top 3203,20 : left 3203,10 : width 3203,170 font_names_load 3203 : text 3203,"Courier" alpha 3204 : parent 3204,3202 : top 3204,50 : left 3204,10 : caption 3204,"Taille:" combo 3205 : parent 3205,3202 : top 3205,50 : left 3205,60 : width 3205,40 item_add 3205,"8" item_add 3205,"9" item_add 3205,"10" item_add 3205,"11" item_add 3205,"12" item_add 3205,"14" item_add 3205,"16" item_add 3205,"18" text 3205,"10" check 3206 : parent 3206,3202 : top 3206,80 : left 3206,10 : caption 3206,"Gras" font_bold 3206 check 3207 : parent 3207,3202 : top 3207,80 : left 3207,60 : caption 3207,"Italique" font_italic 3207 check 3208 : parent 3208,3202 : top 3208,80 : left 3208,120 : caption 3208,"Sousligné" font_underline 3208 check 3209 : parent 3209,3202 : top 3209,80 : left 3209,190 : caption 3209,"Barré" : width 3209,40 font_strike 3209 alpha 3210 : top 3210,160 : left 3210,10 : caption 3210,"Syntaxe:" combo 3211 : top 3211,160 : left 3211,80 : width 3211,150
button 3298 : top 3298,300 : left 3298,10 : caption 3298,"Abandon" on_click 3298,optionsgen_abandon button 3299 : top 3299,300 : left 3299,210 : caption 3299,"Valider" on_click 3299,optionsgen_valider
' ===== création de la fenêtre des définitions des macros form 3300 : hide 3300 : caption 3300,"Configuration des macros" : command_target_is 3300 top 3300,0 : left 3300,width(0) : border_small 3300 width 3300,420 :height 3300,105 : on_close 3300,close3300 alpha 3301 : top 3301,10 : left 3301,10 : caption 3301,"Nom:" combo 3302 : top 3302,10 : left 3302,50 : width 3302,280 : sort_on 3302 : on_click 3302,macrosel button 3303 : top 3303,40 : left 3303,50 : width 3303,70 caption 3303,"Nouveau" : font_bold 3303 : on_click 3303,macroadd button 3304 : top 3304,40 : left 3304,120 : width 3304,70 caption 3304,"Supprimer" : font_bold 3304 : on_click 3304,macrodel button 3305 : top 3305,40 : left 3305,190 : width 3305,70 caption 3305,"Editer" : font_bold 3305 : on_click 3305,macromod button 3306 : top 3306,40 : left 3306,260 : width 3306,70 caption 3306,"Remplacer" : font_bold 3306 : on_click 3306,macroupd button 3307 : top 3307,9 : left 3307,330 : width 3307,70 : height 3307,56 caption 3307,"Insérer" : font_bold 3307 : on_click 3307,macroins
' ===== création de la fenêtre A-propos form 3100 : hide 3100 : top 3100,100 : left 3100,300 : command_target_is 3100 width 3100,400 : height 3100,200 : on_close 3100,apropos_fermer picture 3101 : full_space 3101 : print_target_is 3101 font_name 3101,"Courier" : font_size 3101,10 : font_bold 3101 print_locate 40,20 : print "Programme: "+"Synedit_Editor" print_locate 40,40 : print "Version: "+version$ print_locate 40,60 : print "Date: "+verdat$ print_locate 40,80 : print "Auteur: "+"Klaus"
' ===== quelques objets invisbles command_target_is 0 memo 96 :hide 96 save_dialog 97 open_dialog 98 timer 99 : timer_off 99 : timer_interval 99,300 : on_timer 99,tick ' ===== activer la DLL dll_on KGF$
' === faire quelques initialialisations res% = dll_call0("SyneditInitialize") res% = DLL_call2("SetCloseBox",handle(0),0) : ' désactiver la croix rouge ! res% = dll_call3("SyneditMode",0,4,0) : ' récupérer la liste des définitions de syntaxe s$ = clipboard_string_paste$ : ' sauvegarder le presse-papier clipboard_paste 96 : ' la charger dans un mémo for i%=1 to count(96) : ' et recopier dans la combo item_add 3011,item_read$(96,i%) : ' options de la page item_add 3211,item_read$(96,i%) : ' options générales next i% clipboard_string_copy s$ : ' restaurer le presse-papier res% = dll_call2("SelectComboBoxItem",handle(3011),1) : ' sélectionner (aucune) res% = dll_call2("SelectComboBoxItem",handle(3211),1) : ' sélectionner (aucune) OptGen$ = "0100000Courier\(aucune)" : ' options générales par défaut if file_exists(ini$)=1 : ' si fichier INI existe, relire les options générales file_open_read 1,ini$ file_readln 1,OptGen$ file_close 1 else : ' si fichier INI n'existe pas, le créer file_open_write 1,ini$ file_writeln 1,OptGen$ file_close 1 end_if if dir_exists(dirmacros$)=0 then dir_make dirmacros$ : ' créer le dossier des macros olddir$ = dir_current$ : ' sauvegarder le dossier actuel dir_change dirmacros$ : ' aller dans le dossier des macros s$ = file_find_first$ : ' parcourir ce dossier while s$<>"_" : ' pour charger la liste des macros existantes if left$(s$,1)<>"." if right$(s$,6)=".macro" s$ = left$(s$,len(s$)-6) item_add 3302,s$ end_if end_if s$ = file_find_next$ end_while dir_change olddir$ : ' restaurer le dossier par défaut if count(3302)>0 then res% = dll_call2("SelectComboBoxItem",handle(3302),1) : ' sélectionner la première macro end
' ===== à la fin, on supprime toutes les fenêtres ouvertes close0: while nsyn%>0 res% = dll_call1("SyneditDelete",SE%(nsyn%)) pause 500 : ' ce délai pourra éventuellement être réduit... delete 100+nsyn% nsyn% = nsyn% - 1 end_while return
' ===== fermeture de la fenêtre des paramètres de la page close3000: closeX(3000) return ' ===== fermeture de la fenêtre des paramètres généraux close3200: closeX(3200) return
' ===== fermeture de la fenêtre de configuration des macros close3300: closeX(3300) return
' ===== mode d'emploi aide: message "L'aide n'est pas encore implémentée." return ' ===== montrer la fenêtre A-propos apropos: show 3100 inactive 0 return ' ===== fermer la fenêtre A-propos et restaurer la fenêtre active apropos_fermer: hide 3100 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if return ' ===== sortir du programme sortir: gosub close0 res% = dll_call1("KillProcessByHandle",handle(0)) ' *** on ne passera jamais ici !
' ===== choisir une fenêtre par le menu "Fenêtres" fenetre: mark_off 300+act% act% = number_click-300 mark_on 300+act% show 100 + act% to_foreground 100 + act% return
' ======================== fonctions du menu "Fichiers"
' ===== créer une nouvelle fenêtre d'édition vide nouveau: if nsyn%=100 then return if nsyn%>0 t% = top(100+nsyn%) l% = left(100+nsyn%) else t% = top(0) + 50 l% = left(0) + 50 end_if nsyn% = nsyn% + 1 if act%>0 then mark_off 300+act% act% = nsyn% d% = 20 nf% = 100 + nsyn% capt$(nsyn%) = "<nouveau "+str$(nsyn%)+">" form nf% : top nf%,t%+d% : left nf%,l%+d% : width nf%,600 : height nf%,400 caption nf%,capt$(nsyn%) hndSE%(nsyn%) = handle(nf%) opt$ = OptGen$ : ' par défaut, prendre les options générales OSE$(nsyn%) = opt$ FSE$(nsyn%) = "_" sub_menu 300+nsyn% : parent 300+nsyn%,300 : caption 300+nsyn%,capt$(nsyn%) : on_click 300+nsyn%,fenetre mark_on 300+act% SE%(nsyn%) = dll_call1("SyneditCreate",handle(nf%)) res% = dll_call3("SyneditMode",SE%(nsyn%),3,adr(opt$)) res% = dll_call5("SyneditGeometry",SE%(nsyn%),M1%,M1%,M1%,M1%) if nsyn%=1 then timer_on 99 return ' ===== créer une nouvelle fenêtre d'édition et y charger un fichier ouvrir: f$ = file_name$(98) if f$="_" then return if file_exists(f$)=0 message "Ouverture impossible" return end_if gosub nouveau res% = dll_call2("SyneditOpen",SE%(act%),adr(f$)) if res%=0 FSE$(act%) = f$ f$ = file_extract_name$(f$) capt$(act%) = f$ caption 100+act%,f$ caption 300+act%,f$ end_if return ' ===== créer une nouvelle fenêtre d'édition et y charger une copie de la fenêtre active copier: if act%=0 then return org% = act% gosub nouveau if res%=0 res% = dll_call2("SyneditCopyObject",org%,act%) capt$(nsyn%) = "(copie) "+capt$(org%) caption 100+nsyn%,capt$(nsyn%) caption 300+nsyn%,capt$(nsyn%) FSE$(nsyn%) = "_" OSE$(nsyn%) = OSE$(org%) end_if return ' ===== fermer la fenêtre active fermer: if act%=0 then return res% = dll_call1("SyneditDelete",SE%(act%)) pause 500 delete 100+act% inactive 300+act% caption 300+act%,"<supprimé>" SE%(act%) = 0 while SE%(nsyn%)=0 delete 300+nsyn% nsyn% = nsyn% - 1 if nsyn%=0 then exit_while end_while return ' =====enregistrer la fenêtre active dans son fichier associé sauver: if act%=0 then return if FSE$(act%)="_" then goto sauverdans f$ = FSE$(act%) res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) return
' ===== enregistrer la fenêtre active dans un fichier choisi par dialogue sauverdans: if act%=0 then return f$ = file_name$(97) if f$="_" then return if file_exists(f$)=1 if message_confirmation_yes_no("Ce fichier existe déjà. Voulez-vous le remplacer ?")<>1 then return end_if res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) if res%=0 FSE$(act%) = f$ f$ = file_extract_name$(f$) caption 100+act%,f$ caption 300+act%,f$ capt$(act%) = f$ end_if return ' ======================== fonctions du menu "Outils"
' ===== configuration des outils outilsconfig: message "pas encore implémenté." return ' ===== exécution des outils outilsexec: message "pas encore implémenté." return
' ======================== fonctions du menu "Macros"
' ===== configuration des macros macrosconfig: show 3300 inactive 0 return macrosel: to_foreground 0 to_foreground 100+act% set_focus 3307 return
' ===== ajouter une nouvelle macro à partir du presse-papier macroadd: if act%=0 then return f$ = trim$(text$(3302)) if f$="" then return i% = 0 while i%<count(3302) i% = i% + 1 if f$=item_read$(3302,i%) message "Cette macro existe déjà." return end_if end_while res% = dll_call1("SyneditCopyText",act%) if res%<1 message "Il n'y a rien dans le presse-papier." return end_if s$ = clipboard_string_paste$ file_open_write 1,dirmacros$+f$+".macro" file_writeln 1,s$ file_close 1 item_add 3302,f$ message "La macro "+f$+" a été créée." return ' ===== supprimer la macro sélectionnée macrodel: if count(3302)=0 then return s$ = item_index$(3302) i% = message_confirmation_yes_no("Voulez-vous vraiment supprimer la macro "+s$) if i%<>1 then return f$ = dirmacros$ + s$ + ".macro" file_delete f$ item_delete 3302,item_index(3302) if count(3302)>0 then res% = dll_call2("SelectComboBoxItem",handle(3302),1) message "La macro "+s$+" a été supprimée." return
' ===== remplacer la page actuelle par la macro sélectionnée macromod: if act%=0 then return if count(3302)=0 then return f$ = dirmacros$ + item_index$(3302)+".macro" res% = dll_call2("SyneditOpen",act%,adr(f$)) caption 100+act%,"(macro) "+item_index$(3302) caption 300+act%,"(macro) "+item_index$(3302) capt$(act%) = "(macro) "+item_index$(3302) return
' ===== remplacer la macro sélectionnée par la page actuelle macroupd: if act%=0 then return if count(3302)=0 then return f$ = dirmacros$ + item_index$(3302)+".macro" res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) message "La macro "+item_index$(3302)+" a été remplacée." return
' ===== insérer une macro macroins: if act%=0 then return if count(3302)=0 then return f$ = dirmacros$ + item_index$(3302)+".macro" s$ = "" file_open_read 1,f$ while file_eof(1)=0 file_readln 1,s1$ s$= s$ + s1$ + chr$(13) + chr$(10) end_while file_close 1 ' ici, charger s$ avec le contenu de la macro res% = dll_call2("SyneditInsertString",act%,adr(s$)) to_foreground 100+act% res% = dll_call3("SyneditMode",SE%(act%),2,0) : ' redonner le focus à Synedit return
' ======================== fonctions du menu "Options"
' ===== inverser l'indicateur de présence des numéros de ligne dans la fenêtre active lignes: ln%(act%) = 1 - ln%(act%) : ' basculer 0<-->1 res% = dll_call3("SyneditMode",SE%(act%),1,ln%(act%)) : ' signaler à Synedit res% = dll_call3("SyneditMode",SE%(act%),2,0) : ' redonner le focus à Synedit OSE$(act%) = str$(ln%(act%)) + mid$(OSE$(act%),2,20) : ' mémoriser dans les param_tres return ' ===== charger la fenêtre des options avec les valeurs de la fenêtre active, puis afficher options: if act%=0 then return optvalid% = 0 opt$ = OSE$(act%) if left$(opt$,1)="1" mark_on 3001 else mark_off 3001 end_if text 3005,mid$(opt$,2,2) if mid$(opt$,4,1)="1" mark_on 3006 else mark_off 3006 end_if if mid$(opt$,5,1)="1" mark_on 3007 else mark_off 3007 end_if if mid$(opt$,6,1)="1" mark_on 3008 else mark_off 3008 end_if if mid$(opt$,7,1)="1" mark_on 3009 else mark_off 3009 end_if i% = instr(opt$,"\") text 3003,mid$(opt$,8,i%-8) opt$ = mid$(opt$,i%+1,len(opt$)) for i%=1 to count(3011) if opt$=item_read$(3011,i%) res% = dll_call2("SelectComboBoxItem",handle(3011),i%) : ' restaurer la syntaxe exit_for end_if next i% show 3000 inactive 0 return ' ===== charger la fenêtre des options générales, puis afficher optionsgen: if left$(OptGen$,1)="1" mark_on 3201 else mark_off 3201 end_if text 3205,mid$(OptGen$,2,2) if mid$(OptGen$,4,1)="1" mark_on 3206 else mark_off 3206 end_if if mid$(OptGen$,5,1)="1" mark_on 3207 else mark_off 3207 end_if if mid$(OptGen$,6,1)="1" mark_on 3208 else mark_off 3208 end_if if mid$(OptGen$,7,1)="1" mark_on 3209 else mark_off 3209 end_if i% = instr(OptGen$,"\") text 3203,mid$(OptGen$,8,i%-8) opt$ = mid$(OptGen$,i%+1,len(OptGen$)) for i%=1 to count(3211) if opt$=item_read$(3211,i%) res% = dll_call2("SelectComboBoxItem",handle(3211),i%) : ' restaurer la syntaxe exit_for end_if next i% show 3200 inactive 0 return ' ===== sortie de la fenêtre des options de la page par "Abandon" options_abandon: hide 3000 show 0 active 0 to_foreground 0 return
' ===== sortie de la fenêtre des options générales par "Abandon" optionsgen_abandon: hide 3200 show 0 active 0 to_foreground 0 return
' =====sortie de la fenêtre des options de la page par "Valider" options_valider: ' construire le paramètre: ' xttgisbp\S ' x=numéros de ligne tt=taille g=gras i=italique s=souslgné b=barré ' p=police S=syntaxe optvalid% = 1 opt$ = str$(checked(3001))+right$("0"+text$(3005),2)+str$(checked(3006)) opt$ = opt$ + str$(checked(3007))+str$(checked(3008))+str$(checked(3009)) opt$ = opt$ + text$(3003) + "\" + text$(3011) OSE$(act%) = opt$ ln%(act%) = checked(3001) res% = dll_call3("SyneditMode",SE%(act%),3,adr(opt$)) : ' activer les nouvelles options hide 3000 show 0 active 0 to_foreground 0 return ' =====sortie de la fenêtre des options générales par "Valider" optionsgen_valider: ' construire le paramètre: ' xttgisbp\S ' x=numéros de ligne tt=taille g=gras i=italique s=souslgné b=barré ' p=police S=syntaxe optvalid% = 1 opt$ = str$(checked(3201))+right$("0"+text$(3205),2)+str$(checked(3206)) opt$ = opt$ + str$(checked(3207))+str$(checked(3208))+str$(checked(3209)) opt$ = opt$ + text$(3203) + "\" + text$(3211) OptGen$ = opt$ : ' mémoriser les options générales file_open_write 1,ini$ file_writeln 1,OptGen$ file_close 1 hide 3200 show 0 active 0 to_foreground 0 return
' ======================== fonctions indépendantes
' ===== ce timer surveille la fenêtre active et ses dimensions tick: timer_off 99 res% = dll_call0("GetActiveWindow") : ' récupérer le handle de la fenêtre active for i%=1 to nsyn% : ' chercher dans la table des fenêtres d"édition if res%=hndSE%(i%) : ' est-ce qu'on a trouvé la fenêtre if i%<>act% : ' est-elle différente de la fenêtre active précédente ? mark_off 300+act% : ' alors changer le marquade du menu mark_on 300+i% end_if act% = i% : ' mémoriser le numéro de la fenêtre active res% = dll_call5("SyneditGeometry",SE%(act%),M1%,M1%,M1%,M1%) : ' ajuster la taille de Synedit à celle de la fenêtre exit_for end_if next i% timer_on 99 return
' ======================== SUBs internes
' ===== fermer une des fenêres auxiliaires modales sub CloseX(f%) if optvalid%=0 hide f% show 0 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if end_if end_sub
Et voici ma première macro: menu_FICHIERS.macro: - Code:
-
sub menu_FICHIERS(main%) dim_local no1% ' création d'un sousmenu "Fichiers" if variable("no%")=0 dim no% no% = main% end_if no% = no% + 1 : sub_menu no% : parent no%,main% : caption no%,"Fichiers" no1% = no% no% = no% + 1 : sub_menu no% : parent no%,no1% : caption no%,"Nouveau" label menu_FICHIERS_nouveau : on_click no%,menu_FICHIERS_nouveau no% = no% + 1 : sub_menu no% : parent no%,no1% : caption no%,"Ouvrir..." label menu_FICHIERS_ouvrir : on_click no%,menu_FICHIERS_ouvrir no% = no% + 1 : sub_menu no% : parent no%,no1% : caption no%,"Sauver" label menu_FICHIERS_sauver : on_click no%,menu_FICHIERS_sauver no% = no% + 1 : sub_menu no% : parent no%,no1% : caption no%,"Sauver dans..." label menu_FICHIERS_sauverdans : on_click no%,menu_FICHIERS_sauverdans no% = no% + 1 : sub_menu no% : parent no%,no1% : caption no%,"Imprimer" label menu_FICHIERS_imprimer : on_click no%,menu_FICHIERS_imprimer no% = no% + 1 : sub_menu no% : parent no%,no1% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no1% : caption no%,"Supprimer" label menu_FICHIERS_supprimer : on_click no%,menu_FICHIERS_supprimer no% = no% + 1 : sub_menu no% : parent no%,no1% : caption no%,"Renommer" label menu_FICHIERS_renommer : on_click no%,menu_FICHIERS_renommer no% = no% + 1 : sub_menu no% : parent no%,no1% : caption no%,"Fermer" label menu_FICHIERS_fermer : on_click no%,menu_FICHIERS_fermer
no% = no% + 1 : sub_menu no% : parent no%,no1% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no1% : caption no%,"Sortie" label menu_FICHIERS_sortie : on_click no%,menu_FICHIERS_sortie end_sub
' ===== création d'un nouveau fichier menu_FICHIERS_nouveau: return
' ===== ouverture d'un fichier existant menu_FICHIERS_ouvrir: return
' ===== sauvegarde d'un fichier existant menu_FICHIERS_sauver: return
' ===== ouverture d'un fichier existant dans un autre menu_FICHIERS_sauverdans: return
' ===== imprimer un fichier existant menu_FICHIERS_imprimer: return
' ===== suppression d'un fichier existant menu_FICHIERS_supprimer: return
' ===== changement de nom d'un fichier existant menu_FICHIERS_renommer: return
' ===== fermer un fichier existant menu_FICHIERS_fermer: return
' ===== sortie du programme menu_FICHIERS_sortie: ' faire ici les traimenent nécessaires avant de fermer le programme ' ... res% = dll_call1("KillProcessByHandle",handle(0)) : ' fermeture absolue ! return
Essayez de créer cette macro dans Synedit_Editor, ave le nom "menu_FICHIERS". Puis, insérez le programme suivant dans une page: - Code:
-
main_menu 1 menu_FICHIERS(1) end
Placez le curseur en-dessous de ce petit code et insérez la macro. Voilà un programme fonctionnel, avec un squelette d'un menu "Fichiers", à personnaliser ! Il n'y a plus qu'à insérer les traitements, et à supprimer les options non désirées. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Jeu 21 Aoû 2014 - 23:30 | |
| Je suis en train de faire la définition dynamique de la syntaxe pour Panoramic. J'ai trouvé le moyen de faire cela, et ça va marcher ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 21 Aoû 2014 - 23:43 | |
| C' est curieux mais j' ai comme l' impression que tu t' amuses comme un petit fou avec ce truc... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Ven 22 Aoû 2014 - 0:02 | |
| | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Editeur avec marquage syntaxique Ven 22 Aoû 2014 - 7:22 | |
| Il faut dire que refaire un bon éditeur, c'est un défi qui modifiera notre vie à tous (même celle de Jack). Il y a tellement de choses qui avaient été faites qui pourront être intégrées directement comme la création d'interface graphique, l'intégration de codes déjà écrits (déjà fait avec les macro de Klaus), la gestion des répertoires des codes sources, la gestion des options, la gestion de KGF directement dans l'aide et autre compléments, ... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Sam 23 Aoû 2014 - 0:59 | |
| Nouvelle version de Synedit_Editor.bas, utilisant la nouvelle version V3.25 du 23/08/2014 de KGF.dll. Cette version gère le profil Panoramic avec le marquage syntaxique de tous les mots-clé de Panoramic, y compris #INCLUDE et les commandes 2D_... et 3D_... (problème du chiffre en premier caractère !). Sur mon WebDav, dossier Synedit\, il y a un fichier TXT qui contient le profil établi à ce jour, et un fichier TXT d'information. A ce jour, le marquage se fait par des mots-clés en gras. Couleur et attributs suivront. Voici le source: - Code:
-
' Synedit_Editor.bas
' Options générales ' ================= ' Les options générales sont accessibles à tout moment. ' Elles sont mémorisées dans le fichier suivant: ' (chemin)\Synedit_Editor.ini ' où "chemin" représente le chemin vers Synedit.exe. ' Ces options s'imposent à toutes les pages. ' Leur modification prend effet immédiatement, ' mais leur action n'est visible dans les pages existantes ' que lors de la consultation suivante du paralètre. Par ' exemple, la police par défaut sera utilisée pour créer ' une page vide ou charger un fichier, mais ne modifiera ' pas les polices déjà configurées pour des pages affichées.
' Les macros sont des portions de code mémorisées dans des fichiers ' (chemin)\Synedit_Editor_Macros\(nom).macro ' Ces fichiers sont créées par le menu de configuration des macros ' et utilisés à partir du menu d'exécution des macros.
label close0, close3000, close3200, close3300, close3400 label nouveau, ouvrir, copier, fermer, sauver, sauverdans, sortir label lignes, options, optionsgen, tick, fenetre label aide, apropos label options_abandon, options_valider label optionsgen_abandon, optionsgen_valider label apropos_fermer, outilsconfig, outilsexec label macrosconfig label macroadd, macrodel, macromod, macroupd, macroins, macrosel label syntaxe, keyajouter, keymodifier, keysupprimer, keycharger, keysauver label keychargertout, keysauvertout
' ===== variables pour gérer les pages d'édition dim OptGen$ : ' options générales dim SE%(100) : ' les objets Synedit dim hndSE%(100) : ' les handles des fenêtres dim ln%(100) : ' flags "numéros de lignes affichés" dim capt$(100) : ' titre des fenetres dim OSE$(100) : ' les options des objets dim FSE$(100) : ' les noms des fichiers dim nsyn% : ' plus grand numéro de page d'édition (0...100) dim act% : ' page d'édition actuellement active (0...100)
' ===== variables internes dim res%, d%, nf%, t%, l%, i%, optvalid%, opt$, f$, org%, s$, s1$, olddir$
' ===== constantes dim M1% : M1% = 0 - 1 dim version$ : version$ = "Alpha 0.3" dim verdat$ : verdat$ = "23/08/2014" dim KGF$ : KGF$ = "KGF.dll" dim dir$ : dir$ = file_extract_path$(param_value$(0)) dim ini$ : ini$ = dir$+"Synedit_editor.ini" dim dirmacros$ : dirmacros$ = dir$ + "Synedit_Editor_Macros\"
' configurer la form 0 (uniquement le menu) width 0,800 : height 0,60 : border_small 0
' ===== création de tous les menus main_menu 10 sub_menu 11 : parent 11,10 : caption 11,"Fichier" sub_menu 12 : parent 12,11 : caption 12,"Nouveau" : on_click 12,nouveau sub_menu 13 : parent 13,11 : caption 13,"Ouvrir..." : on_click 13,ouvrir sub_menu 14 : parent 14,11 : caption 14,"Copier" : on_click 14,copier sub_menu 15 : parent 15,11 : caption 15,"Fermer" : on_click 15,fermer sub_menu 16 : parent 16,11 : caption 16,"Sauver" : on_click 16,sauver sub_menu 17 : parent 17,11 : caption 17,"Sauver dans..." : on_click 17,sauverdans sub_menu 18 : parent 18,11 : caption 18,"-" sub_menu 19 : parent 19,11 : caption 19,"Sortir" : on_click 19,sortir sub_menu 21 : parent 21,10 : caption 21,"Options" sub_menu 22 : parent 22,21 : caption 22,"N° de ligne" : on_click 22,lignes sub_menu 23 : parent 23,21 : caption 23,"Options de la page" : on_click 23,options sub_menu 24 : parent 24,21 : caption 24,"Options générales" : on_click 24,optionsgen sub_menu 25 : parent 25,21 : caption 25,"-" sub_menu 26 : parent 26,21 : caption 26,"Syntaxe de la page" : on_click 26,syntaxe sub_menu 400 : parent 400,10 : caption 400,"Edition" sub_menu 401 : parent 401,400 : caption 401,"pas encore implémenté" : ' on_click 401,??? sub_menu 430 : parent 430,10 : caption 430,"Outils" sub_menu 431 : parent 431,430 : caption 431,"Configuration" : on_click 431,outilsconfig sub_menu 432 : parent 432,430 : caption 432,"Exécution" : on_click 432,outilsexec sub_menu 440 : parent 440,10 : caption 440,"Macros" sub_menu 441 : parent 441,440 : caption 441,"Macros" : on_click 441,macrosconfig sub_menu 300 : parent 300,10 : caption 300,"Fenêtres" ' sub_menu 301 : parent 301,300 : caption 301,"Fenêtre" : on_click 301,fenetre sub_menu 420 : parent 420,10 : caption 420,"Aide" sub_menu 421 : parent 421,420 : caption 421,"Aide" : on_click 421,aide sub_menu 422 : parent 422,420 : caption 422,"A-propos" : on_click 422,apropos
' ===== création de la fenêtre des options de la page actuelle form 3000 : hide 3000 : caption 3000,"Options" : command_target_is 3000 top 3000,100 : left 3000,200 width 3000,550 :height 3000,400 : on_close 3000,close3000 check 3001 : top 3001,10 : left 3001,10 : width 3001,150 caption 3001,"Numéros de de ligne" container 3002 : caption 3002,"Format par défaut" top 3002,40 : left 3002,10 : width 3002,250 : height 3002,110 combo 3003 : parent 3003,3002 : top 3003,20 : left 3003,10 : width 3003,170 font_names_load 3003 : text 3003,"Courier" alpha 3004 : parent 3004,3002 : top 3004,50 : left 3004,10 : caption 3004,"Taille:" combo 3005 : parent 3005,3002 : top 3005,50 : left 3005,60 : width 3005,40 item_add 3005,"8" item_add 3005,"9" item_add 3005,"10" item_add 3005,"11" item_add 3005,"12" item_add 3005,"14" item_add 3005,"16" item_add 3005,"18" text 3005,"10" check 3006 : parent 3006,3002 : top 3006,80 : left 3006,10 : caption 3006,"Gras" font_bold 3006 check 3007 : parent 3007,3002 : top 3007,80 : left 3007,60 : caption 3007,"Italique" font_italic 3007 check 3008 : parent 3008,3002 : top 3008,80 : left 3008,120 : caption 3008,"Sousligné" font_underline 3008 check 3009 : parent 3009,3002 : top 3009,80 : left 3009,190 : caption 3009,"Barré" : width 3009,40 font_strike 3009 alpha 3010 : top 3010,160 : left 3010,10 : caption 3010,"Syntaxe:" combo 3011 : top 3011,160 : left 3011,80 : width 3011,150 button 3098 : top 3098,300 : left 3098,10 : caption 3098,"Abandon" on_click 3098,options_abandon button 3099 : top 3099,300 : left 3099,210 : caption 3099,"Valider" on_click 3099,options_valider
' ===== création de la fenêtre des options générales form 3200 : hide 3200 : caption 3200,"Options" : command_target_is 3200 top 3200,100 : left 3200,200 width 3200,550 :height 3200,400 : on_close 3200,close3200 check 3201 : top 3201,10 : left 3201,10 : width 3201,150 caption 3201,"Numéros de de ligne" container 3202 : caption 3202,"Format par défaut" top 3202,40 : left 3202,10 : width 3202,250 : height 3202,110 combo 3203 : parent 3203,3202 : top 3203,20 : left 3203,10 : width 3203,170 font_names_load 3203 : text 3203,"Courier" alpha 3204 : parent 3204,3202 : top 3204,50 : left 3204,10 : caption 3204,"Taille:" combo 3205 : parent 3205,3202 : top 3205,50 : left 3205,60 : width 3205,40 item_add 3205,"8" item_add 3205,"9" item_add 3205,"10" item_add 3205,"11" item_add 3205,"12" item_add 3205,"14" item_add 3205,"16" item_add 3205,"18" text 3205,"10" check 3206 : parent 3206,3202 : top 3206,80 : left 3206,10 : caption 3206,"Gras" font_bold 3206 check 3207 : parent 3207,3202 : top 3207,80 : left 3207,60 : caption 3207,"Italique" font_italic 3207 check 3208 : parent 3208,3202 : top 3208,80 : left 3208,120 : caption 3208,"Sousligné" font_underline 3208 check 3209 : parent 3209,3202 : top 3209,80 : left 3209,190 : caption 3209,"Barré" : width 3209,40 font_strike 3209 alpha 3210 : top 3210,160 : left 3210,10 : caption 3210,"Syntaxe:" combo 3211 : top 3211,160 : left 3211,80 : width 3211,150
button 3298 : top 3298,300 : left 3298,10 : caption 3298,"Abandon" on_click 3298,optionsgen_abandon button 3299 : top 3299,300 : left 3299,210 : caption 3299,"Valider" on_click 3299,optionsgen_valider
' ===== création de la fenêtre des définitions des macros form 3300 : hide 3300 : caption 3300,"Configuration des macros" : command_target_is 3300 top 3300,0 : left 3300,width(0) : border_small 3300 width 3300,420 :height 3300,105 : on_close 3300,close3300 alpha 3301 : top 3301,10 : left 3301,10 : caption 3301,"Nom:" combo 3302 : top 3302,10 : left 3302,50 : width 3302,280 : sort_on 3302 : on_click 3302,macrosel button 3303 : top 3303,40 : left 3303,50 : width 3303,70 caption 3303,"Nouveau" : font_bold 3303 : on_click 3303,macroadd button 3304 : top 3304,40 : left 3304,120 : width 3304,70 caption 3304,"Supprimer" : font_bold 3304 : on_click 3304,macrodel button 3305 : top 3305,40 : left 3305,190 : width 3305,70 caption 3305,"Editer" : font_bold 3305 : on_click 3305,macromod button 3306 : top 3306,40 : left 3306,260 : width 3306,70 caption 3306,"Remplacer" : font_bold 3306 : on_click 3306,macroupd button 3307 : top 3307,9 : left 3307,330 : width 3307,70 : height 3307,56 caption 3307,"Insérer" : font_bold 3307 : on_click 3307,macroins
' ===== création de la fenêtre des définitions de syntaxe de la page form 3400 : hide 3400 : caption 3400,"Configuration de la syntaxe" : command_target_is 3400 top 3400,100 : left 3400,200 width 3400,750 :height 3400,610 : on_close 3400,close3400 Alpha 3401 : top 3401,10 : left 3401,10 : caption 3401,"Mots-clé:" edit 3402 : top 3402,30 : left 3402,10 : width 3402,200 list 3403 : top 3403,60 : left 3403,10 : width 3403,200 : height 3403,400 sort_on 3403 button 3404: top 3404,30 : left 3404,220 : width 3404,70 caption 3404,"Ajouter" : on_click 3404,keyajouter button 3405: top 3405,60 : left 3405,220 : width 3405,70 caption 3405,"Modifier" : on_click 3405,keymodifier button 3406: top 3406,90 : left 3406,220 : width 3406,70 caption 3406,"Supprimer" : on_click 3406,keysupprimer button 3407: top 3407,150 : left 3407,220 : width 3407,70 caption 3407,"Charger" : on_click 3407,keycharger button 3408: top 3408,180 : left 3408,220 : width 3408,70 caption 3408,"Sauver" : on_click 3408,keysauver button 3409: top 3409,480 : left 3409,10 : width 3409,200 : height 3409,70 caption 3409,"Charger la syntaxe" : on_click 3409,keychargertout font_bold 3409 : font_size 3409,12 button 3410: top 3410,480 : left 3410,300 : width 3410,200 : height 3410,70 caption 3410,"Sauver la syntaxe" : on_click 3410,keysauvertout font_bold 3410 : font_size 3410,12
' ===== création de la fenêtre A-propos form 3100 : hide 3100 : top 3100,100 : left 3100,300 : command_target_is 3100 width 3100,400 : height 3100,200 : on_close 3100,apropos_fermer picture 3101 : full_space 3101 : print_target_is 3101 font_name 3101,"Courier" : font_size 3101,10 : font_bold 3101 print_locate 40,20 : print "Programme: "+"Synedit_Editor" print_locate 40,40 : print "Version: "+version$ print_locate 40,60 : print "Date: "+verdat$ print_locate 40,80 : print "Auteur: "+"Klaus"
' ===== quelques objets invisbles command_target_is 0 memo 96 :hide 96 save_dialog 97 open_dialog 98 timer 99 : timer_off 99 : timer_interval 99,300 : on_timer 99,tick ' ===== activer la DLL dll_on KGF$
' === faire quelques initialialisations res% = dll_call0("SyneditInitialize") res% = DLL_call2("SetCloseBox",handle(0),0) : ' désactiver la croix rouge ! res% = dll_call3("SyneditMode",0,4,0) : ' récupérer la liste des définitions de syntaxe s$ = clipboard_string_paste$ : ' sauvegarder le presse-papier clipboard_paste 96 : ' la charger dans un mémo for i%=1 to count(96) : ' et recopier dans la combo item_add 3011,item_read$(96,i%) : ' options de la page item_add 3211,item_read$(96,i%) : ' options générales next i% clipboard_string_copy s$ : ' restaurer le presse-papier res% = dll_call2("SelectComboBoxItem",handle(3011),1) : ' sélectionner (aucune) res% = dll_call2("SelectComboBoxItem",handle(3211),1) : ' sélectionner (aucune) OptGen$ = "0100000Courier\(aucune)" : ' options générales par défaut if file_exists(ini$)=1 : ' si fichier INI existe, relire les options générales file_open_read 1,ini$ file_readln 1,OptGen$ file_close 1 else : ' si fichier INI n'existe pas, le créer file_open_write 1,ini$ file_writeln 1,OptGen$ file_close 1 end_if if dir_exists(dirmacros$)=0 then dir_make dirmacros$ : ' créer le dossier des macros olddir$ = dir_current$ : ' sauvegarder le dossier actuel dir_change dirmacros$ : ' aller dans le dossier des macros s$ = file_find_first$ : ' parcourir ce dossier while s$<>"_" : ' pour charger la liste des macros existantes if left$(s$,1)<>"." if right$(s$,6)=".macro" s$ = left$(s$,len(s$)-6) item_add 3302,s$ end_if end_if s$ = file_find_next$ end_while dir_change olddir$ : ' restaurer le dossier par défaut if count(3302)>0 then res% = dll_call2("SelectComboBoxItem",handle(3302),1) : ' sélectionner la première macro end
' ===== à la fin, on supprime toutes les fenêtres ouvertes close0: while nsyn%>0 res% = dll_call1("SyneditDelete",SE%(nsyn%)) pause 500 : ' ce délai pourra éventuellement être réduit... delete 100+nsyn% nsyn% = nsyn% - 1 end_while return
' ===== fermeture de la fenêtre des paramètres de la page close3000: closeX(3000) return ' ===== fermeture de la fenêtre des paramètres généraux close3200: closeX(3200) return
' ===== fermeture de la fenêtre de configuration de la syntaxe de la page close3400: closeX(3400) return
' ===== fermeture de la fenêtre de configuration des macros close3300: closeX(3300) return
' ===== mode d'emploi aide: message "L'aide n'est pas encore implémentée." return ' ===== montrer la fenêtre A-propos apropos: show 3100 inactive 0 return ' ===== fermer la fenêtre A-propos et restaurer la fenêtre active apropos_fermer: hide 3100 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if return ' ===== sortir du programme sortir: gosub close0 res% = dll_call1("KillProcessByHandle",handle(0)) ' *** on ne passera jamais ici !
' ===== choisir une fenêtre par le menu "Fenêtres" fenetre: mark_off 300+act% act% = number_click-300 mark_on 300+act% show 100 + act% to_foreground 100 + act% return
' ======================== fonctions du menu "Fichiers"
' ===== créer une nouvelle fenêtre d'édition vide nouveau: if nsyn%=100 then return if nsyn%>0 t% = top(100+nsyn%) l% = left(100+nsyn%) else t% = top(0) + 50 l% = left(0) + 50 end_if nsyn% = nsyn% + 1 if act%>0 then mark_off 300+act% act% = nsyn% d% = 20 nf% = 100 + nsyn% capt$(nsyn%) = "<nouveau "+str$(nsyn%)+">" form nf% : top nf%,t%+d% : left nf%,l%+d% : width nf%,600 : height nf%,400 caption nf%,capt$(nsyn%) hndSE%(nsyn%) = handle(nf%) opt$ = OptGen$ : ' par défaut, prendre les options générales OSE$(nsyn%) = opt$ FSE$(nsyn%) = "_" sub_menu 300+nsyn% : parent 300+nsyn%,300 : caption 300+nsyn%,capt$(nsyn%) : on_click 300+nsyn%,fenetre mark_on 300+act% SE%(nsyn%) = dll_call1("SyneditCreate",handle(nf%)) res% = dll_call3("SyneditMode",SE%(nsyn%),3,adr(opt$)) res% = dll_call5("SyneditGeometry",SE%(nsyn%),M1%,M1%,M1%,M1%) if instr(opt$,"\Panoramic")>0 gosub keychargertout appliquer_syntax(opt$) end_if if nsyn%=1 then timer_on 99 return ' ===== créer une nouvelle fenêtre d'édition et y charger un fichier ouvrir: f$ = file_name$(98) if f$="_" then return if file_exists(f$)=0 message "Ouverture impossible" return end_if gosub nouveau res% = dll_call2("SyneditOpen",SE%(act%),adr(f$)) if res%=0 FSE$(act%) = f$ f$ = file_extract_name$(f$) capt$(act%) = f$ caption 100+act%,f$ caption 300+act%,f$ end_if return ' ===== créer une nouvelle fenêtre d'édition et y charger une copie de la fenêtre active copier: if act%=0 then return org% = act% gosub nouveau if res%=0 res% = dll_call2("SyneditCopyObject",org%,act%) capt$(nsyn%) = "(copie) "+capt$(org%) caption 100+nsyn%,capt$(nsyn%) caption 300+nsyn%,capt$(nsyn%) FSE$(nsyn%) = "_" OSE$(nsyn%) = OSE$(org%) end_if return ' ===== fermer la fenêtre active fermer: if act%=0 then return res% = dll_call1("SyneditDelete",SE%(act%)) pause 500 delete 100+act% inactive 300+act% caption 300+act%,"<supprimé>" SE%(act%) = 0 act% = act% -1 while SE%(nsyn%)=0 delete 300+nsyn% nsyn% = nsyn% - 1 if nsyn%=0 then exit_while end_while if act%>nsyn% then act% = nsyn% return ' =====enregistrer la fenêtre active dans son fichier associé sauver: if act%=0 then return if FSE$(act%)="_" then goto sauverdans f$ = FSE$(act%) res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) return
' ===== enregistrer la fenêtre active dans un fichier choisi par dialogue sauverdans: if act%=0 then return f$ = file_name$(97) if f$="_" then return if file_exists(f$)=1 if message_confirmation_yes_no("Ce fichier existe déjà. Voulez-vous le remplacer ?")<>1 then return end_if res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) if res%=0 FSE$(act%) = f$ f$ = file_extract_name$(f$) caption 100+act%,f$ caption 300+act%,f$ capt$(act%) = f$ end_if return ' ======================== fonctions du menu "Outils"
' ===== configuration des outils outilsconfig: message "pas encore implémenté." return ' ===== exécution des outils outilsexec: message "pas encore implémenté." return
' ======================== fonctions du menu "Macros"
' ===== configuration des macros macrosconfig: optvalid% = 0 show 3300 inactive 0 return macrosel: to_foreground 0 to_foreground 100+act% set_focus 3307 return
' ===== ajouter une nouvelle macro à partir du presse-papier macroadd: if act%=0 then return f$ = trim$(text$(3302)) if f$="" then return i% = 0 while i%<count(3302) i% = i% + 1 if f$=item_read$(3302,i%) message "Cette macro existe déjà." return end_if end_while res% = dll_call1("SyneditCopyText",act%) if res%<1 message "Il n'y a rien dans le presse-papier." return end_if s$ = clipboard_string_paste$ file_open_write 1,dirmacros$+f$+".macro" file_writeln 1,s$ file_close 1 item_add 3302,f$ message "La macro "+f$+" a été créée." return ' ===== supprimer la macro sélectionnée macrodel: if count(3302)=0 then return s$ = item_index$(3302) i% = message_confirmation_yes_no("Voulez-vous vraiment supprimer la macro "+s$) if i%<>1 then return f$ = dirmacros$ + s$ + ".macro" file_delete f$ item_delete 3302,item_index(3302) if count(3302)>0 then res% = dll_call2("SelectComboBoxItem",handle(3302),1) message "La macro "+s$+" a été supprimée." return
' ===== remplacer la page actuelle par la macro sélectionnée macromod: if act%=0 then return if count(3302)=0 then return f$ = dirmacros$ + item_index$(3302)+".macro" res% = dll_call2("SyneditOpen",act%,adr(f$)) caption 100+act%,"(macro) "+item_index$(3302) caption 300+act%,"(macro) "+item_index$(3302) capt$(act%) = "(macro) "+item_index$(3302) return
' ===== remplacer la macro sélectionnée par la page actuelle macroupd: if act%=0 then return if count(3302)=0 then return f$ = dirmacros$ + item_index$(3302)+".macro" res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) message "La macro "+item_index$(3302)+" a été remplacée." return
' ===== insérer une macro macroins: if act%=0 then return if count(3302)=0 then return f$ = dirmacros$ + item_index$(3302)+".macro" s$ = "" file_open_read 1,f$ while file_eof(1)=0 file_readln 1,s1$ s$= s$ + s1$ + chr$(13) + chr$(10) end_while file_close 1 ' ici, charger s$ avec le contenu de la macro res% = dll_call2("SyneditInsertString",act%,adr(s$)) to_foreground 100+act% res% = dll_call3("SyneditMode",SE%(act%),2,0) : ' redonner le focus à Synedit return
' ======================== fonctions du menu "Options"
' ===== inverser l'indicateur de présence des numéros de ligne dans la fenêtre active lignes: ln%(act%) = 1 - ln%(act%) : ' basculer 0<-->1 res% = dll_call3("SyneditMode",SE%(act%),1,ln%(act%)) : ' signaler à Synedit res% = dll_call3("SyneditMode",SE%(act%),2,0) : ' redonner le focus à Synedit OSE$(act%) = str$(ln%(act%)) + mid$(OSE$(act%),2,20) : ' mémoriser dans les param_tres return ' ===== charger la fenêtre des options avec les valeurs de la fenêtre active, puis afficher options: if act%=0 then return optvalid% = 0 opt$ = OSE$(act%) if left$(opt$,1)="1" mark_on 3001 else mark_off 3001 end_if text 3005,mid$(opt$,2,2) if mid$(opt$,4,1)="1" mark_on 3006 else mark_off 3006 end_if if mid$(opt$,5,1)="1" mark_on 3007 else mark_off 3007 end_if if mid$(opt$,6,1)="1" mark_on 3008 else mark_off 3008 end_if if mid$(opt$,7,1)="1" mark_on 3009 else mark_off 3009 end_if i% = instr(opt$,"\") text 3003,mid$(opt$,8,i%-8) opt$ = mid$(opt$,i%+1,len(opt$)) for i%=1 to count(3011) if opt$=item_read$(3011,i%) res% = dll_call2("SelectComboBoxItem",handle(3011),i%) : ' restaurer la syntaxe exit_for end_if next i% show 3000 inactive 0 return ' ===== charger la fenêtre des options générales, puis afficher optionsgen: if left$(OptGen$,1)="1" mark_on 3201 else mark_off 3201 end_if text 3205,mid$(OptGen$,2,2) if mid$(OptGen$,4,1)="1" mark_on 3206 else mark_off 3206 end_if if mid$(OptGen$,5,1)="1" mark_on 3207 else mark_off 3207 end_if if mid$(OptGen$,6,1)="1" mark_on 3208 else mark_off 3208 end_if if mid$(OptGen$,7,1)="1" mark_on 3209 else mark_off 3209 end_if i% = instr(OptGen$,"\") text 3203,mid$(OptGen$,8,i%-8) opt$ = mid$(OptGen$,i%+1,len(OptGen$)) for i%=1 to count(3211) if opt$=item_read$(3211,i%) res% = dll_call2("SelectComboBoxItem",handle(3211),i%) : ' restaurer la syntaxe exit_for end_if next i% show 3200 inactive 0 return ' ===== sortie de la fenêtre des options de la page par "Abandon" options_abandon: hide 3000 show 0 active 0 to_foreground 0 return
' ===== sortie de la fenêtre des options générales par "Abandon" optionsgen_abandon: hide 3200 show 0 active 0 to_foreground 0 return
' =====sortie de la fenêtre des options de la page par "Valider" options_valider: ' construire le paramètre: ' xttgisbp\S ' x=numéros de ligne tt=taille g=gras i=italique s=souslgné b=barré ' p=police S=syntaxe optvalid% = 1 opt$ = str$(checked(3001))+right$("0"+text$(3005),2)+str$(checked(3006)) opt$ = opt$ + str$(checked(3007))+str$(checked(3008))+str$(checked(3009)) opt$ = opt$ + text$(3003) + "\" + text$(3011) OSE$(act%) = opt$ ln%(act%) = checked(3001) res% = dll_call3("SyneditMode",SE%(act%),3,adr(opt$)) : ' activer les nouvelles options hide 3000 show 0 active 0 to_foreground 0 return ' =====sortie de la fenêtre des options générales par "Valider" optionsgen_valider: ' construire le paramètre: ' xttgisbp\S ' x=numéros de ligne tt=taille g=gras i=italique s=souslgné b=barré ' p=police S=syntaxe optvalid% = 1 opt$ = str$(checked(3201))+right$("0"+text$(3205),2)+str$(checked(3206)) opt$ = opt$ + str$(checked(3207))+str$(checked(3208))+str$(checked(3209)) opt$ = opt$ + text$(3203) + "\" + text$(3211) OptGen$ = opt$ : ' mémoriser les options générales file_open_write 1,ini$ file_writeln 1,OptGen$ file_close 1 hide 3200 show 0 active 0 to_foreground 0 return
' ===== afficher la fenêtre "Syntaxe" syntaxe: if act%=0 then return opt$ = OSE$(act%) i% = instr(opt$,"\") s$ = mid$(opt$,i%+1,len(opt$)) : ' récupérer la syntaxe de la page if (s$<>"Panoramic") and (s$<>"General") message "Action impossible sur cette syntaxe." return end_if optvalid% = 0 caption 3400,"Configuration de la syntaxe - "+s$
show 3400 inactive 0 return ' ===== nouveau mot-cle keyajouter: s$ = lower$(trim$(text$(3402))) if s$="" then return i% = 0 while i%<count(3403) i% = i% + 1 if s$=item_read$(3403,i%) message "Ce mot-clé existe déjà." return end_if end_while item_add 3403,s$ opt$ = OSE$(act%) i% = instr(opt$,"\") s$ = mid$(opt$,i%+1,len(opt$)) : ' récupérer la syntaxe de la page appliquer_syntax(s$) return
keymodifier: return
keysupprimer: return
keycharger: return
keysauver: return keychargertout: opt$ = OSE$(act%) i% = instr(opt$,"\") s$ = mid$(opt$,i%+1,len(opt$)) : ' récupérer la syntaxe de la page f$ = dir$ + "Synedit_Editor_Syntax_"+s$+".txt" clear 3403 file_open_read 1,f$ file_readln 1,s1$ i% = 1 if s1$<>"#SYNTAX" then goto invalidsyntax file_readln 1,s1$ i% = i% + 1 if s1$<>s$ then goto invalidsyntax file_readln 1,s1$ i% = i% + 1 if s1$<>"#KEYS" then goto invalidsyntax while file_eof(1)=0 file_readln 1,s1$ i% = i% + 1 if s1$="#END" then exit_while item_add 3403,s1$ end_while file_close 1 appliquer_syntax(s$) return invalidsyntax: file_close 1 message "Fichier invalide en ligne "+str$(i%)+": "+s1$ return
keysauvertout: ' format du fichier de la syntaxe: ' fichier Synedit_Editor_Syntax_Panoramic.txt ' #SYNTAX ' Panoramic (nom de la syntaxe en 1 ligne) ' #KEYS ' pause (une ligne par mot-clé) ' ... ' #END opt$ = OSE$(act%) i% = instr(opt$,"\") s$ = mid$(opt$,i%+1,len(opt$)) : ' récupérer la syntaxe de la page f$ = dir$ + "Synedit_Editor_Syntax_"+s$+".txt" file_open_write 1,f$ file_writeln 1,"#SYNTAX" file_writeln 1,s$ file_writeln 1,"#KEYS" i% = 0 while i%<count(3403) i% = i% + 1 file_writeln 1,item_read$(3403,i%) end_while file_writeln 1,"#END" file_close 1 message "La syntaxe est sauvée dans "+f$ return
' ======================== fonctions indépendantes
' ===== ce timer surveille la fenêtre active et ses dimensions tick: timer_off 99 res% = dll_call0("GetActiveWindow") : ' récupérer le handle de la fenêtre active for i%=1 to nsyn% : ' chercher dans la table des fenêtres d"édition if res%=hndSE%(i%) : ' est-ce qu'on a trouvé la fenêtre if i%<>act% : ' est-elle différente de la fenêtre active précédente ? mark_off 300+act% : ' alors changer le marquade du menu mark_on 300+i% end_if act% = i% : ' mémoriser le numéro de la fenêtre active res% = dll_call5("SyneditGeometry",SE%(act%),M1%,M1%,M1%,M1%) : ' ajuster la taille de Synedit à celle de la fenêtre exit_for end_if next i% timer_on 99 return
' ======================== SUBs internes
' ===== fermer une des fenêres auxiliaires modales sub CloseX(f%) if optvalid%=0 hide f% show 0 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if end_if end_sub
' ===== appliquer une syntaxe paramétrée sub appliquer_syntax(sy$) ' message "application de la synaxe "+sy$ ' imposer d'abord les mots-clé clear 96 i% = 0 while i%<count(3403) i% = i% + 1 item_add 96,item_read$(3403,i%) end_while res% = dll_call3("SyneditConfigureHighlighter",act%,3,handle(96))
end_sub
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Editeur avec marquage syntaxique Sam 23 Aoû 2014 - 10:46 | |
| bonjour Klaus ! Excellent travail, comme d'habitude... Dis moi, il me semble, qu'a un moment on avait eu la possibilité de configurer PSPAD pour Panoramic. Je ne sais plus qui était l'auteur de cette réalisation mais on pouvait utiliser cet éditeur configuré pour les mots clés Panoramic et même exécuter le programme créé directement... N'est il pas plus complet comme éditeur ? N'y a t-il pas plus de possibilités ? Ton programme fonctionne parfaitement, mais par contre je ne vois pas les mots clés apparaitre en gras ! Dans Synedit.exe pas de problème mais lors de l'utilisation de ton programme sous Panoramic rien a faire. Que ce soit sous l'éditeur Panoramic ou en exécutable pas de mots clés en gras. Peut être ai-je loupé quelque chose ? EDIT : Ca y est je viens de comprendre... La configuration doit être faîte dans OPTION et ensuite lorsque tu rentres les mots clés, c'est bien en gras. Pas contre l'ouverture d'un fichier existant ramène automatiquement a l'ouverture de 'Synedit_Editor_Syntax_Panoramic.txt' Bon et bien il ne reste plus qu'a attendre la suite... Bon courage Klaus ! je suis impatient de voir le résultat final... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Editeur avec marquage syntaxique Sam 23 Aoû 2014 - 11:18 | |
| C'est clair, on avait eu déjà une tentative réussie avec Ygeronimi mais là, ça va allait encore plus loin et ça avance vite en plus. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Sam 23 Aoû 2014 - 11:46 | |
| A Minibug: Si tu veux que la syntaxe soit systématiquement positionnée à "Panoramic" lors de la création d'une nouvelle fenêtre, tu peux le faire, une fois pour toutes, dans le menu Options\Options générales. Ce sont ces options qui sont prises comme valeur par défaut pour la création d'une nouvelle fenêtre.
Pour info: je suis en train de mettre au point la gestion de l'indicateur "page modifiée" pour chaque page, et les sécurités en cas de fermeture pour éviter les pertes de données. Et je travaille sur l'aide contextuelle par F1... | |
| | | loulou08
Nombre de messages : 63 Age : 81 Localisation : Champagne-Ardenne Date d'inscription : 16/05/2010
| Sujet: Re: Editeur avec marquage syntaxique Sam 23 Aoû 2014 - 11:54 | |
| | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Sam 23 Aoû 2014 - 13:17 | |
| @ Jicehel,
Merci pour la tentative réussie. J' attends la doc pour voir si je peux remplacer les objets RichEdit par des synedit et adapter les fonctions. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Sam 23 Aoû 2014 - 15:11 | |
| Avec la nouvelle version V3.36 du 23/08/2014 de KGF.dll, Synedit_Editor passe à la version Alpha 0.4. Il saut gérer maintenant le statut "page modifiée" pour chaque page. En cas de fermeture d'une page par le menu Fichiers\Fermer, le programme demande alors confirmation avant fermeture. Et en cas de sortie par le menu Fichiers\Sortir, le programme propose la sauvegarde de chaque page modifiée et non mise à jour. La nouvelle version de la DLL corrige aussi un bug dans la fonction "Fermer" d'une page. Voici le nouveau code: - Code:
-
' Synedit_Editor.bas
' Options générales ' ================= ' Les options générales sont accessibles à tout moment. ' Elles sont mémorisées dans le fichier suivant: ' (chemin)\Synedit_Editor.ini ' où "chemin" représente le chemin vers Synedit.exe. ' Ces options s'imposent à toutes les pages. ' Leur modification prend effet immédiatement, ' mais leur action n'est visible dans les pages existantes ' que lors de la consultation suivante du paralètre. Par ' exemple, la police par défaut sera utilisée pour créer ' une page vide ou charger un fichier, mais ne modifiera ' pas les polices déjà configurées pour des pages affichées.
' Les macros sont des portions de code mémorisées dans des fichiers ' (chemin)\Synedit_Editor_Macros\(nom).macro ' Ces fichiers sont créées par le menu de configuration des macros ' et utilisés à partir du menu d'exécution des macros.
label close0, close3000, close3200, close3300, close3400 label nouveau, ouvrir, copier, fermer, sauver, sauverdans, sortir label lignes, options, optionsgen, tick, fenetre label aide, apropos, syneditalert label options_abandon, options_valider label optionsgen_abandon, optionsgen_valider label apropos_fermer, outilsconfig, outilsexec label macrosconfig label macroadd, macrodel, macromod, macroupd, macroins, macrosel label syntaxe, keyajouter, keymodifier, keysupprimer, keycharger, keysauver label keychargertout, keysauvertout
' ===== variables pour gérer les pages d'édition dim OptGen$ : ' options générales dim SE%(100) : ' les objets Synedit dim hndSE%(100) : ' les handles des fenêtres dim ln%(100) : ' flags "numéros de lignes affichés" dim capt$(100) : ' titre des fenetres dim OSE$(100) : ' les options des objets dim FSE$(100) : ' les noms des fichiers dim nsyn% : ' plus grand numéro de page d'édition (0...100) dim act% : ' page d'édition actuellement active (0...100)
' ===== variables internes dim res%, d%, nf%, t%, l%, i%, optvalid%, opt$, f$ dim org%, s$, s1$, olddir$, salert$, nalert%, confirm%
' ===== constantes dim M1% : M1% = 0 - 1 dim version$ : version$ = "Alpha 0.4" dim verdat$ : verdat$ = "23/08/2014" dim KGF$ : KGF$ = "KGF.dll" dim dir$ : dir$ = file_extract_path$(param_value$(0)) dim ini$ : ini$ = dir$+"Synedit_editor.ini" dim dirmacros$ : dirmacros$ = dir$ + "Synedit_Editor_Macros\"
' configurer la form 0 (uniquement le menu) width 0,800 : height 0,60 : border_small 0
' ===== création de tous les menus main_menu 10 sub_menu 11 : parent 11,10 : caption 11,"Fichier" sub_menu 12 : parent 12,11 : caption 12,"Nouveau" : on_click 12,nouveau sub_menu 13 : parent 13,11 : caption 13,"Ouvrir..." : on_click 13,ouvrir sub_menu 14 : parent 14,11 : caption 14,"Copier" : on_click 14,copier sub_menu 15 : parent 15,11 : caption 15,"Fermer" : on_click 15,fermer sub_menu 16 : parent 16,11 : caption 16,"Sauver" : on_click 16,sauver sub_menu 17 : parent 17,11 : caption 17,"Sauver dans..." : on_click 17,sauverdans sub_menu 18 : parent 18,11 : caption 18,"-" sub_menu 19 : parent 19,11 : caption 19,"Sortir" : on_click 19,sortir sub_menu 21 : parent 21,10 : caption 21,"Options" sub_menu 22 : parent 22,21 : caption 22,"N° de ligne" : on_click 22,lignes sub_menu 23 : parent 23,21 : caption 23,"Options de la page" : on_click 23,options sub_menu 24 : parent 24,21 : caption 24,"Options générales" : on_click 24,optionsgen sub_menu 25 : parent 25,21 : caption 25,"-" sub_menu 26 : parent 26,21 : caption 26,"Syntaxe de la page" : on_click 26,syntaxe sub_menu 400 : parent 400,10 : caption 400,"Edition" sub_menu 401 : parent 401,400 : caption 401,"pas encore implémenté" : ' on_click 401,??? sub_menu 430 : parent 430,10 : caption 430,"Outils" sub_menu 431 : parent 431,430 : caption 431,"Configuration" : on_click 431,outilsconfig sub_menu 432 : parent 432,430 : caption 432,"Exécution" : on_click 432,outilsexec sub_menu 440 : parent 440,10 : caption 440,"Macros" sub_menu 441 : parent 441,440 : caption 441,"Macros" : on_click 441,macrosconfig sub_menu 300 : parent 300,10 : caption 300,"Fenêtres" ' sub_menu 301 : parent 301,300 : caption 301,"Fenêtre" : on_click 301,fenetre sub_menu 420 : parent 420,10 : caption 420,"Aide" sub_menu 421 : parent 421,420 : caption 421,"Aide" : on_click 421,aide sub_menu 422 : parent 422,420 : caption 422,"A-propos" : on_click 422,apropos
' ===== création de la fenêtre des options de la page actuelle form 3000 : hide 3000 : caption 3000,"Options" : command_target_is 3000 top 3000,100 : left 3000,200 width 3000,550 :height 3000,400 : on_close 3000,close3000 check 3001 : top 3001,10 : left 3001,10 : width 3001,150 caption 3001,"Numéros de de ligne" container 3002 : caption 3002,"Format par défaut" top 3002,40 : left 3002,10 : width 3002,250 : height 3002,110 combo 3003 : parent 3003,3002 : top 3003,20 : left 3003,10 : width 3003,170 font_names_load 3003 : text 3003,"Courier" alpha 3004 : parent 3004,3002 : top 3004,50 : left 3004,10 : caption 3004,"Taille:" combo 3005 : parent 3005,3002 : top 3005,50 : left 3005,60 : width 3005,40 item_add 3005,"8" item_add 3005,"9" item_add 3005,"10" item_add 3005,"11" item_add 3005,"12" item_add 3005,"14" item_add 3005,"16" item_add 3005,"18" text 3005,"10" check 3006 : parent 3006,3002 : top 3006,80 : left 3006,10 : caption 3006,"Gras" font_bold 3006 check 3007 : parent 3007,3002 : top 3007,80 : left 3007,60 : caption 3007,"Italique" font_italic 3007 check 3008 : parent 3008,3002 : top 3008,80 : left 3008,120 : caption 3008,"Sousligné" font_underline 3008 check 3009 : parent 3009,3002 : top 3009,80 : left 3009,190 : caption 3009,"Barré" : width 3009,40 font_strike 3009 alpha 3010 : top 3010,160 : left 3010,10 : caption 3010,"Syntaxe:" combo 3011 : top 3011,160 : left 3011,80 : width 3011,150 button 3098 : top 3098,300 : left 3098,10 : caption 3098,"Abandon" on_click 3098,options_abandon button 3099 : top 3099,300 : left 3099,210 : caption 3099,"Valider" on_click 3099,options_valider
' ===== création de la fenêtre des options générales form 3200 : hide 3200 : caption 3200,"Options" : command_target_is 3200 top 3200,100 : left 3200,200 width 3200,550 :height 3200,400 : on_close 3200,close3200 check 3201 : top 3201,10 : left 3201,10 : width 3201,150 caption 3201,"Numéros de de ligne" container 3202 : caption 3202,"Format par défaut" top 3202,40 : left 3202,10 : width 3202,250 : height 3202,110 combo 3203 : parent 3203,3202 : top 3203,20 : left 3203,10 : width 3203,170 font_names_load 3203 : text 3203,"Courier" alpha 3204 : parent 3204,3202 : top 3204,50 : left 3204,10 : caption 3204,"Taille:" combo 3205 : parent 3205,3202 : top 3205,50 : left 3205,60 : width 3205,40 item_add 3205,"8" item_add 3205,"9" item_add 3205,"10" item_add 3205,"11" item_add 3205,"12" item_add 3205,"14" item_add 3205,"16" item_add 3205,"18" text 3205,"10" check 3206 : parent 3206,3202 : top 3206,80 : left 3206,10 : caption 3206,"Gras" font_bold 3206 check 3207 : parent 3207,3202 : top 3207,80 : left 3207,60 : caption 3207,"Italique" font_italic 3207 check 3208 : parent 3208,3202 : top 3208,80 : left 3208,120 : caption 3208,"Sousligné" font_underline 3208 check 3209 : parent 3209,3202 : top 3209,80 : left 3209,190 : caption 3209,"Barré" : width 3209,40 font_strike 3209 alpha 3210 : top 3210,160 : left 3210,10 : caption 3210,"Syntaxe:" combo 3211 : top 3211,160 : left 3211,80 : width 3211,150
button 3298 : top 3298,300 : left 3298,10 : caption 3298,"Abandon" on_click 3298,optionsgen_abandon button 3299 : top 3299,300 : left 3299,210 : caption 3299,"Valider" on_click 3299,optionsgen_valider
' ===== création de la fenêtre des définitions des macros form 3300 : hide 3300 : caption 3300,"Configuration des macros" : command_target_is 3300 top 3300,0 : left 3300,width(0) : border_small 3300 width 3300,420 :height 3300,105 : on_close 3300,close3300 alpha 3301 : top 3301,10 : left 3301,10 : caption 3301,"Nom:" combo 3302 : top 3302,10 : left 3302,50 : width 3302,280 : sort_on 3302 : on_click 3302,macrosel button 3303 : top 3303,40 : left 3303,50 : width 3303,70 caption 3303,"Nouveau" : font_bold 3303 : on_click 3303,macroadd button 3304 : top 3304,40 : left 3304,120 : width 3304,70 caption 3304,"Supprimer" : font_bold 3304 : on_click 3304,macrodel button 3305 : top 3305,40 : left 3305,190 : width 3305,70 caption 3305,"Editer" : font_bold 3305 : on_click 3305,macromod button 3306 : top 3306,40 : left 3306,260 : width 3306,70 caption 3306,"Remplacer" : font_bold 3306 : on_click 3306,macroupd button 3307 : top 3307,9 : left 3307,330 : width 3307,70 : height 3307,56 caption 3307,"Insérer" : font_bold 3307 : on_click 3307,macroins
' ===== création de la fenêtre des définitions de syntaxe de la page form 3400 : hide 3400 : caption 3400,"Configuration de la syntaxe" : command_target_is 3400 top 3400,100 : left 3400,200 width 3400,750 :height 3400,610 : on_close 3400,close3400 Alpha 3401 : top 3401,10 : left 3401,10 : caption 3401,"Mots-clé:" edit 3402 : top 3402,30 : left 3402,10 : width 3402,200 list 3403 : top 3403,60 : left 3403,10 : width 3403,200 : height 3403,400 sort_on 3403 button 3404: top 3404,30 : left 3404,220 : width 3404,70 caption 3404,"Ajouter" : on_click 3404,keyajouter button 3405: top 3405,60 : left 3405,220 : width 3405,70 caption 3405,"Modifier" : on_click 3405,keymodifier button 3406: top 3406,90 : left 3406,220 : width 3406,70 caption 3406,"Supprimer" : on_click 3406,keysupprimer button 3407: top 3407,150 : left 3407,220 : width 3407,70 caption 3407,"Charger" : on_click 3407,keycharger button 3408: top 3408,180 : left 3408,220 : width 3408,70 caption 3408,"Sauver" : on_click 3408,keysauver button 3409: top 3409,480 : left 3409,10 : width 3409,200 : height 3409,70 caption 3409,"Charger la syntaxe" : on_click 3409,keychargertout font_bold 3409 : font_size 3409,12 button 3410: top 3410,480 : left 3410,300 : width 3410,200 : height 3410,70 caption 3410,"Sauver la syntaxe" : on_click 3410,keysauvertout font_bold 3410 : font_size 3410,12
' ===== création de la fenêtre A-propos form 3100 : hide 3100 : top 3100,100 : left 3100,300 : command_target_is 3100 width 3100,400 : height 3100,200 : on_close 3100,apropos_fermer picture 3101 : full_space 3101 : print_target_is 3101 font_name 3101,"Courier" : font_size 3101,10 : font_bold 3101 print_locate 40,20 : print "Programme: "+"Synedit_Editor" print_locate 40,40 : print "Version: "+version$ print_locate 40,60 : print "Date: "+verdat$ print_locate 40,80 : print "Auteur: "+"Klaus"
' ===== quelques objets invisbles command_target_is 0 edit 95 : hide 95 : on_change 95,syneditalert memo 96 : hide 96 save_dialog 97 open_dialog 98 timer 99 : timer_off 99 : timer_interval 99,300 : on_timer 99,tick ' ===== activer la DLL dll_on KGF$
' === faire quelques initialialisations res% = dll_call0("SyneditInitialize") res% = DLL_call2("SetCloseBox",handle(0),0) : ' désactiver la croix rouge ! res% = dll_call3("SyneditMode",0,4,0) : ' récupérer la liste des définitions de syntaxe s$ = clipboard_string_paste$ : ' sauvegarder le presse-papier clipboard_paste 96 : ' la charger dans un mémo for i%=1 to count(96) : ' et recopier dans la combo item_add 3011,item_read$(96,i%) : ' options de la page item_add 3211,item_read$(96,i%) : ' options générales next i% clipboard_string_copy s$ : ' restaurer le presse-papier res% = dll_call2("SelectComboBoxItem",handle(3011),1) : ' sélectionner (aucune) res% = dll_call2("SelectComboBoxItem",handle(3211),1) : ' sélectionner (aucune) OptGen$ = "0100000Courier\(aucune)" : ' options générales par défaut if file_exists(ini$)=1 : ' si fichier INI existe, relire les options générales file_open_read 1,ini$ file_readln 1,OptGen$ file_close 1 else : ' si fichier INI n'existe pas, le créer file_open_write 1,ini$ file_writeln 1,OptGen$ file_close 1 end_if if dir_exists(dirmacros$)=0 then dir_make dirmacros$ : ' créer le dossier des macros olddir$ = dir_current$ : ' sauvegarder le dossier actuel dir_change dirmacros$ : ' aller dans le dossier des macros s$ = file_find_first$ : ' parcourir ce dossier while s$<>"_" : ' pour charger la liste des macros existantes if left$(s$,1)<>"." if right$(s$,6)=".macro" s$ = left$(s$,len(s$)-6) item_add 3302,s$ end_if end_if s$ = file_find_next$ end_while dir_change olddir$ : ' restaurer le dossier par défaut if count(3302)>0 then res% = dll_call2("SelectComboBoxItem",handle(3302),1) : ' sélectionner la première macro end
' ===== évènement déclenché par Synedit, quelque soit la page ' l'objetinvisible 95 (un EDIT) contient: ' Cnnn = la page nnn a changé ' Hnnn = on a frappé F1 dans la page nnn syneditalert: salert$ = text$(95) nalert% = instr("CH",left$(salert$,1)) select nalert% case 1: ' une page a changé syneditchange(mid$(salert$,2,3)) case 2: ' on a frappé F1 synedithelp(mid$(salert$,2,3)) end_select return
' ===== à la fin, on supprime toutes les fenêtres ouvertes close0: while nsyn%>0 res% = dll_call1("SyneditDelete",SE%(nsyn%)) pause 500 : ' ce délai pourra éventuellement être réduit... delete 100+nsyn% nsyn% = nsyn% - 1 end_while return
' ===== fermeture de la fenêtre des paramètres de la page close3000: closeX(3000) return ' ===== fermeture de la fenêtre des paramètres généraux close3200: closeX(3200) return
' ===== fermeture de la fenêtre de configuration de la syntaxe de la page close3400: closeX(3400) return
' ===== fermeture de la fenêtre de configuration des macros close3300: closeX(3300) return
' ===== mode d'emploi aide: message "L'aide n'est pas encore implémentée." return ' ===== montrer la fenêtre A-propos apropos: show 3100 inactive 0 return ' ===== fermer la fenêtre A-propos et restaurer la fenêtre active apropos_fermer: hide 3100 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if return ' ===== sortir du programme sortir: if nsyn%>0 then purger() gosub close0 res% = dll_call1("KillProcessByHandle",handle(0)) ' *** on ne passera jamais ici !
' ===== choisir une fenêtre par le menu "Fenêtres" fenetre: mark_off 300+act% act% = number_click-300 mark_on 300+act% show 100 + act% to_foreground 100 + act% return
' ======================== fonctions du menu "Fichiers"
' ===== créer une nouvelle fenêtre d'édition vide nouveau: if nsyn%=100 then return if nsyn%>0 t% = top(100+nsyn%) l% = left(100+nsyn%) else t% = top(0) + 50 l% = left(0) + 50 end_if nsyn% = nsyn% + 1 if act%>0 then mark_off 300+act% act% = nsyn% d% = 20 nf% = 100 + nsyn% capt$(nsyn%) = "<nouveau "+str$(nsyn%)+">" form nf% : top nf%,t%+d% : left nf%,l%+d% : width nf%,600 : height nf%,400 caption nf%,capt$(nsyn%) hndSE%(nsyn%) = handle(nf%) opt$ = OptGen$ : ' par défaut, prendre les options générales OSE$(nsyn%) = opt$ FSE$(nsyn%) = "_" sub_menu 300+nsyn% : parent 300+nsyn%,300 : caption 300+nsyn%,capt$(nsyn%) : on_click 300+nsyn%,fenetre mark_on 300+act% SE%(nsyn%) = dll_call2("SyneditCreate",handle(nf%),handle(95)) res% = dll_call3("SyneditMode",SE%(nsyn%),3,adr(opt$)) res% = dll_call5("SyneditGeometry",SE%(nsyn%),M1%,M1%,M1%,M1%) if instr(opt$,"\Panoramic")>0 gosub keychargertout appliquer_syntax(opt$) end_if res% = dll_call3("SyneditMode",SE%(act%),2,0) : ' donner le focus à Synedit if nsyn%=1 then timer_on 99 return ' ===== créer une nouvelle fenêtre d'édition et y charger un fichier ouvrir: f$ = file_name$(98) if f$="_" then return if file_exists(f$)=0 message "Ouverture impossible" return end_if gosub nouveau res% = dll_call2("SyneditOpen",SE%(act%),adr(f$)) if res%=0 FSE$(act%) = f$ f$ = file_extract_name$(f$) capt$(act%) = f$ caption 100+act%,f$ caption 300+act%,f$ end_if return ' ===== créer une nouvelle fenêtre d'édition et y charger une copie de la fenêtre active copier: if act%=0 then return org% = act% gosub nouveau if res%=0 res% = dll_call2("SyneditCopyObject",org%,act%) capt$(nsyn%) = "(copie) "+capt$(org%) caption 100+nsyn%,capt$(nsyn%) caption 300+nsyn%,capt$(nsyn%) FSE$(nsyn%) = "_" OSE$(nsyn%) = OSE$(org%) end_if return ' ===== fermer la fenêtre active fermer: if act%=0 then return if left$(caption$(100+act%),1)="*" then Confirmer("Le code a été modifié. Voulez-vous vraiment fermer la fenêtre ?") if confirm%<>1 then return res% = dll_call1("SyneditDelete",SE%(act%)) pause 500 delete 100+act% inactive 300+act% caption 300+act%,"<supprimé>" SE%(act%) = 0 act% = act% -1 while SE%(nsyn%)=0 delete 300+nsyn% nsyn% = nsyn% - 1 if nsyn%=0 then exit_while end_while if act%>nsyn% then act% = nsyn% return ' =====enregistrer la fenêtre active dans son fichier associé sauver: if act%=0 then return if FSE$(act%)="_" then goto sauverdans f$ = FSE$(act%) res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) if left$(caption(100+act%),1)="*" then caption 100+act%,mid$(caption 100+act%,3,200) return
' ===== enregistrer la fenêtre active dans un fichier choisi par dialogue sauverdans: if act%=0 then return f$ = file_name$(97) if f$="_" then return if file_exists(f$)=1 if message_confirmation_yes_no("Ce fichier existe déjà. Voulez-vous le remplacer ?")<>1 then return end_if res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) if res%=0 FSE$(act%) = f$ f$ = file_extract_name$(f$) caption 100+act%,f$ caption 300+act%,f$ capt$(act%) = f$ end_if return ' ======================== fonctions du menu "Outils"
' ===== configuration des outils outilsconfig: message "pas encore implémenté." return ' ===== exécution des outils outilsexec: message "pas encore implémenté." return
' ======================== fonctions du menu "Macros"
' ===== configuration des macros macrosconfig: optvalid% = 0 show 3300 inactive 0 return macrosel: to_foreground 0 to_foreground 100+act% set_focus 3307 return
' ===== ajouter une nouvelle macro à partir du presse-papier macroadd: if act%=0 then return f$ = trim$(text$(3302)) if f$="" then return i% = 0 while i%<count(3302) i% = i% + 1 if f$=item_read$(3302,i%) message "Cette macro existe déjà." return end_if end_while res% = dll_call1("SyneditCopyText",act%) if res%<1 message "Il n'y a rien dans le presse-papier." return end_if s$ = clipboard_string_paste$ file_open_write 1,dirmacros$+f$+".macro" file_writeln 1,s$ file_close 1 item_add 3302,f$ message "La macro "+f$+" a été créée." return ' ===== supprimer la macro sélectionnée macrodel: if count(3302)=0 then return s$ = item_index$(3302) i% = message_confirmation_yes_no("Voulez-vous vraiment supprimer la macro "+s$) if i%<>1 then return f$ = dirmacros$ + s$ + ".macro" file_delete f$ item_delete 3302,item_index(3302) if count(3302)>0 then res% = dll_call2("SelectComboBoxItem",handle(3302),1) message "La macro "+s$+" a été supprimée." return
' ===== remplacer la page actuelle par la macro sélectionnée macromod: if act%=0 then return if count(3302)=0 then return f$ = dirmacros$ + item_index$(3302)+".macro" res% = dll_call2("SyneditOpen",act%,adr(f$)) caption 100+act%,"(macro) "+item_index$(3302) caption 300+act%,"(macro) "+item_index$(3302) capt$(act%) = "(macro) "+item_index$(3302) return
' ===== remplacer la macro sélectionnée par la page actuelle macroupd: if act%=0 then return if count(3302)=0 then return f$ = dirmacros$ + item_index$(3302)+".macro" res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) message "La macro "+item_index$(3302)+" a été remplacée." return
' ===== insérer une macro macroins: if act%=0 then return if count(3302)=0 then return f$ = dirmacros$ + item_index$(3302)+".macro" s$ = "" file_open_read 1,f$ while file_eof(1)=0 file_readln 1,s1$ s$= s$ + s1$ + chr$(13) + chr$(10) end_while file_close 1 ' ici, charger s$ avec le contenu de la macro res% = dll_call2("SyneditInsertString",act%,adr(s$)) to_foreground 100+act% res% = dll_call3("SyneditMode",SE%(act%),2,0) : ' redonner le focus à Synedit return
' ======================== fonctions du menu "Options"
' ===== inverser l'indicateur de présence des numéros de ligne dans la fenêtre active lignes: ln%(act%) = 1 - ln%(act%) : ' basculer 0<-->1 res% = dll_call3("SyneditMode",SE%(act%),1,ln%(act%)) : ' signaler à Synedit res% = dll_call3("SyneditMode",SE%(act%),2,0) : ' redonner le focus à Synedit OSE$(act%) = str$(ln%(act%)) + mid$(OSE$(act%),2,20) : ' mémoriser dans les param_tres return ' ===== charger la fenêtre des options avec les valeurs de la fenêtre active, puis afficher options: if act%=0 then return optvalid% = 0 opt$ = OSE$(act%) if left$(opt$,1)="1" mark_on 3001 else mark_off 3001 end_if text 3005,mid$(opt$,2,2) if mid$(opt$,4,1)="1" mark_on 3006 else mark_off 3006 end_if if mid$(opt$,5,1)="1" mark_on 3007 else mark_off 3007 end_if if mid$(opt$,6,1)="1" mark_on 3008 else mark_off 3008 end_if if mid$(opt$,7,1)="1" mark_on 3009 else mark_off 3009 end_if i% = instr(opt$,"\") text 3003,mid$(opt$,8,i%-8) opt$ = mid$(opt$,i%+1,len(opt$)) for i%=1 to count(3011) if opt$=item_read$(3011,i%) res% = dll_call2("SelectComboBoxItem",handle(3011),i%) : ' restaurer la syntaxe exit_for end_if next i% show 3000 inactive 0 return ' ===== charger la fenêtre des options générales, puis afficher optionsgen: if left$(OptGen$,1)="1" mark_on 3201 else mark_off 3201 end_if text 3205,mid$(OptGen$,2,2) if mid$(OptGen$,4,1)="1" mark_on 3206 else mark_off 3206 end_if if mid$(OptGen$,5,1)="1" mark_on 3207 else mark_off 3207 end_if if mid$(OptGen$,6,1)="1" mark_on 3208 else mark_off 3208 end_if if mid$(OptGen$,7,1)="1" mark_on 3209 else mark_off 3209 end_if i% = instr(OptGen$,"\") text 3203,mid$(OptGen$,8,i%-8) opt$ = mid$(OptGen$,i%+1,len(OptGen$)) for i%=1 to count(3211) if opt$=item_read$(3211,i%) res% = dll_call2("SelectComboBoxItem",handle(3211),i%) : ' restaurer la syntaxe exit_for end_if next i% show 3200 inactive 0 return ' ===== sortie de la fenêtre des options de la page par "Abandon" options_abandon: hide 3000 show 0 active 0 to_foreground 0 return
' ===== sortie de la fenêtre des options générales par "Abandon" optionsgen_abandon: hide 3200 show 0 active 0 to_foreground 0 return
' =====sortie de la fenêtre des options de la page par "Valider" options_valider: ' construire le paramètre: ' xttgisbp\S ' x=numéros de ligne tt=taille g=gras i=italique s=souslgné b=barré ' p=police S=syntaxe optvalid% = 1 opt$ = str$(checked(3001))+right$("0"+text$(3005),2)+str$(checked(3006)) opt$ = opt$ + str$(checked(3007))+str$(checked(3008))+str$(checked(3009)) opt$ = opt$ + text$(3003) + "\" + text$(3011) OSE$(act%) = opt$ ln%(act%) = checked(3001) res% = dll_call3("SyneditMode",SE%(act%),3,adr(opt$)) : ' activer les nouvelles options hide 3000 show 0 active 0 to_foreground 0 return ' =====sortie de la fenêtre des options générales par "Valider" optionsgen_valider: ' construire le paramètre: ' xttgisbp\S ' x=numéros de ligne tt=taille g=gras i=italique s=souslgné b=barré ' p=police S=syntaxe optvalid% = 1 opt$ = str$(checked(3201))+right$("0"+text$(3205),2)+str$(checked(3206)) opt$ = opt$ + str$(checked(3207))+str$(checked(3208))+str$(checked(3209)) opt$ = opt$ + text$(3203) + "\" + text$(3211) OptGen$ = opt$ : ' mémoriser les options générales file_open_write 1,ini$ file_writeln 1,OptGen$ file_close 1 hide 3200 show 0 active 0 to_foreground 0 return
' ===== afficher la fenêtre "Syntaxe" syntaxe: if act%=0 then return opt$ = OSE$(act%) i% = instr(opt$,"\") s$ = mid$(opt$,i%+1,len(opt$)) : ' récupérer la syntaxe de la page if (s$<>"Panoramic") and (s$<>"General") message "Action impossible sur cette syntaxe." return end_if optvalid% = 0 caption 3400,"Configuration de la syntaxe - "+s$
show 3400 inactive 0 return ' ===== nouveau mot-cle keyajouter: s$ = lower$(trim$(text$(3402))) if s$="" then return i% = 0 while i%<count(3403) i% = i% + 1 if s$=item_read$(3403,i%) message "Ce mot-clé existe déjà." return end_if end_while item_add 3403,s$ opt$ = OSE$(act%) i% = instr(opt$,"\") s$ = mid$(opt$,i%+1,len(opt$)) : ' récupérer la syntaxe de la page appliquer_syntax(s$) return
keymodifier: return
keysupprimer: return
keycharger: return
keysauver: return keychargertout: opt$ = OSE$(act%) i% = instr(opt$,"\") s$ = mid$(opt$,i%+1,len(opt$)) : ' récupérer la syntaxe de la page f$ = dir$ + "Synedit_Editor_Syntax_"+s$+".txt" clear 3403 file_open_read 1,f$ file_readln 1,s1$ i% = 1 if s1$<>"#SYNTAX" then goto invalidsyntax file_readln 1,s1$ i% = i% + 1 if s1$<>s$ then goto invalidsyntax file_readln 1,s1$ i% = i% + 1 if s1$<>"#KEYS" then goto invalidsyntax while file_eof(1)=0 file_readln 1,s1$ i% = i% + 1 if s1$="#END" then exit_while item_add 3403,s1$ end_while file_close 1 appliquer_syntax(s$) return invalidsyntax: file_close 1 message "Fichier invalide en ligne "+str$(i%)+": "+s1$ return
keysauvertout: ' format du fichier de la syntaxe: ' fichier Synedit_Editor_Syntax_Panoramic.txt ' #SYNTAX ' Panoramic (nom de la syntaxe en 1 ligne) ' #KEYS ' pause (une ligne par mot-clé) ' ... ' #END opt$ = OSE$(act%) i% = instr(opt$,"\") s$ = mid$(opt$,i%+1,len(opt$)) : ' récupérer la syntaxe de la page f$ = dir$ + "Synedit_Editor_Syntax_"+s$+".txt" file_open_write 1,f$ file_writeln 1,"#SYNTAX" file_writeln 1,s$ file_writeln 1,"#KEYS" i% = 0 while i%<count(3403) i% = i% + 1 file_writeln 1,item_read$(3403,i%) end_while file_writeln 1,"#END" file_close 1 message "La syntaxe est sauvée dans "+f$ return
' ======================== fonctions indépendantes
' ===== ce timer surveille la fenêtre active et ses dimensions tick: timer_off 99 res% = dll_call0("GetActiveWindow") : ' récupérer le handle de la fenêtre active for i%=1 to nsyn% : ' chercher dans la table des fenêtres d"édition if res%=hndSE%(i%) : ' est-ce qu'on a trouvé la fenêtre if i%<>act% : ' est-elle différente de la fenêtre active précédente ? mark_off 300+act% : ' alors changer le marquade du menu mark_on 300+i% end_if act% = i% : ' mémoriser le numéro de la fenêtre active res% = dll_call5("SyneditGeometry",SE%(act%),M1%,M1%,M1%,M1%) : ' ajuster la taille de Synedit à celle de la fenêtre exit_for end_if next i% timer_on 99 return
' ======================== SUBs internes
' ===== fermer une des fenêres auxiliaires modales sub CloseX(f%) if optvalid%=0 hide f% show 0 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if end_if end_sub
' ===== appliquer une syntaxe paramétrée sub appliquer_syntax(sy$) ' message "application de la synaxe "+sy$ ' imposer d'abord les mots-clé clear 96 i% = 0 while i%<count(3403) i% = i% + 1 item_add 96,item_read$(3403,i%) end_while res% = dll_call3("SyneditConfigureHighlighter",act%,3,handle(96)) end_sub
' ===== une des pages a changé sub syneditchange(n$) dim_local n% n% = val(n$) if left$(caption$(100+n%),1)<>"*" then caption 100+n%,"* "+caption$(100+n%) end_sub
' ===== on a frappé F1 sub synedithelp(n$) dim_local n% n% = val(n$) message "Aide pas encore implémentée." end_sub
' ===== demande d'un message de confirmation sub confirmer(s$) confirm% = message_confirmation_yes_no(s$) end_sub ' ===== purger les pages non mises à jour sub purger() dim_local i% for i%=1 to nsyn% if left$(caption$(100+i%),1)="*" s$ = "La page ["+capt$(i%)+"] a été modifiée. Voulez-vous la sauvegarder ?" confirmer(s$) if confirm%=1 act% = i% message "on sauvegarde "+str$(act%) to_foreground 100+act% res% = dll_call3("SyneditMode",SE%(act%),2,0) : ' donner le focus à Synedit gosub sauver end_if end_if next i% end_sub
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Editeur avec marquage syntaxique Sam 23 Aoû 2014 - 16:57 | |
| Klaus dans les fonctions qu'avait ajoutées Jack et qu'il ne faut pas oublié pour éviter les vagues de suicides massives, il y a la sauvegarde de secours automatique (genre fichier en .sav ou autre) pour si on oublie de sauvegarder son chef d'oeuvre et que l'ordi plante ... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 23 Aoû 2014 - 17:19 | |
| Sans en arrivé à de tels extrêmes , Je confirme l' utilité de cette fonction... Je vous en mets une hors sujet mais très sympa: | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Editeur avec marquage syntaxique Dim 24 Aoû 2014 - 16:35 | |
| Bonjour a tous !
@ Klaus : Je viens de mettre a jour KGF et la version Synedit_Editor 4.0.
Je suis toujours face a un problème lors de l'ouverture d'un fichier *.bas existant cela me ramène automatiquement a l'ouverture du fichier 'Synedit_Editor_Syntax_Panoramic.txt'.
Cela se produit uniquement si j'ai sélectionné PANORAMIC dans la syntaxe des options générales. Si aucune syntaxe sélectionnée, le fichier s'ouvre correctement !
Je ne comprends pas ! quelqu'un d'autre a t il eu le problème. Est ce une erreur dans ton programme Klaus ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Dim 24 Aoû 2014 - 23:43 | |
| @Minibug: as-tu placé ce fichier dans le dossier dans lequel se trouve l'éxécutable ? C'est soit Synedit_editor.exe si tu as généré l'EXE, soit Panoramic.exe si tu le lances à partir de l'éditeur Panoramic. Et dans ce cas, il est dans un dossier "temp". Chez moi, sous W8, le chemin complet est: C:\Users\klausgunther\AppData\Local\Temp\Synedit_Editor_Syntax_Panoramic.txt
EDIT
Chez moi, absolument tous les tests sont systématiquement faits avec le profile "Panoramic". Et je n'ai absolument pas de problème. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Lun 25 Aoû 2014 - 0:03 | |
| Avec la nouvelle version V3.27 du 24/08/2014, Synedit_Editor passe à la version Alpha V0.5. Grande nouveauté: on peut maintenant gérer dynamiquement la couleur et les attributs graphiques des mots-clé. 5 couleurs sont disponible. Le noir est la couleur par défaut. Les changements peuvent être faits, soit dans la page des options générales, soit de façon plus logique, dans la page de configuration du profil de syntaxe. Après validation, les changements sont appliqués immédiatement. Pour les rendre permanents, il faut sauvegarder le profil dans la page des attributs du profil. Il faut reprendre le fichier Synedit_Editor_Syntax_Panoramic.txt du WebDav. Il contient la version adaptée à la gestion des attributs des mots-clé. Je vais maintenant regarder la coloration des commentaires et chaînes de caractères... Voici le source actuel: - Code:
-
' Synedit_Editor.bas
' Options générales ' ================= ' Les options générales sont accessibles à tout moment. ' Elles sont mémorisées dans le fichier suivant: ' (chemin)\Synedit_Editor.ini ' où "chemin" représente le chemin vers Synedit.exe. ' Ces options s'imposent à toutes les pages. ' Leur modification prend effet immédiatement, ' mais leur action n'est visible dans les pages existantes ' que lors de la consultation suivante du paralètre. Par ' exemple, la police par défaut sera utilisée pour créer ' une page vide ou charger un fichier, mais ne modifiera ' pas les polices déjà configurées pour des pages affichées.
' Les macros sont des portions de code mémorisées dans des fichiers ' (chemin)\Synedit_Editor_Macros\(nom).macro ' Ces fichiers sont créées par le menu de configuration des macros ' et utilisés à partir du menu d'exécution des macros.
label close0, close3000, close3200, close3300, close3400 label nouveau, ouvrir, copier, fermer, sauver, sauverdans, sortir label lignes, options, optionsgen, tick, fenetre label aide, apropos, syneditalert label options_abandon, options_valider label optionsgen_abandon, optionsgen_valider label apropos_fermer, outilsconfig, outilsexec label macrosconfig label macroadd, macrodel, macromod, macroupd, macroins, macrosel label syntaxe, keyajouter, keymodifier, keysupprimer label keychargertout, keysauvertout, keychargerstyles, appliquerkeyattrib
' ===== variables pour gérer les pages d'édition dim OptGen$ : ' options générales dim SE%(100) : ' les objets Synedit dim hndSE%(100) : ' les handles des fenêtres dim ln%(100) : ' flags "numéros de lignes affichés" dim capt$(100) : ' titre des fenetres dim OSE$(100) : ' les options des objets dim FSE$(100) : ' les noms des fichiers dim nsyn% : ' plus grand numéro de page d'édition (0...100) dim act% : ' page d'édition actuellement active (0...100)
' ===== variables internes dim res%, d%, nf%, t%, l%, i%, optvalid%, opt$, opt1$, f$, colorkey$ dim org%, s$, s1$, s2$, olddir$, salert$, nalert%, confirm%
' ===== constantes dim M1% : M1% = 0 - 1 dim version$ : version$ = "Alpha 0.5" dim verdat$ : verdat$ = "24/08/2014" dim KGF$ : KGF$ = "KGF.dll" dim dir$ : dir$ = file_extract_path$(param_value$(0)) dim ini$ : ini$ = dir$+"Synedit_editor.ini" dim dirmacros$ : dirmacros$ = dir$ + "Synedit_Editor_Macros\"
' configurer la form 0 (uniquement le menu) width 0,800 : height 0,60 : border_small 0
' ===== création de tous les menus main_menu 10 sub_menu 11 : parent 11,10 : caption 11,"Fichier" sub_menu 12 : parent 12,11 : caption 12,"Nouveau" : on_click 12,nouveau sub_menu 13 : parent 13,11 : caption 13,"Ouvrir..." : on_click 13,ouvrir sub_menu 14 : parent 14,11 : caption 14,"Copier" : on_click 14,copier sub_menu 15 : parent 15,11 : caption 15,"Fermer" : on_click 15,fermer sub_menu 16 : parent 16,11 : caption 16,"Sauver" : on_click 16,sauver sub_menu 17 : parent 17,11 : caption 17,"Sauver dans..." : on_click 17,sauverdans sub_menu 18 : parent 18,11 : caption 18,"-" sub_menu 19 : parent 19,11 : caption 19,"Sortir" : on_click 19,sortir sub_menu 21 : parent 21,10 : caption 21,"Options" sub_menu 22 : parent 22,21 : caption 22,"N° de ligne" : on_click 22,lignes sub_menu 23 : parent 23,21 : caption 23,"Options de la page" : on_click 23,options sub_menu 24 : parent 24,21 : caption 24,"Options générales" : on_click 24,optionsgen sub_menu 25 : parent 25,21 : caption 25,"-" sub_menu 26 : parent 26,21 : caption 26,"Syntaxe de la page" : on_click 26,syntaxe sub_menu 400 : parent 400,10 : caption 400,"Edition" sub_menu 401 : parent 401,400 : caption 401,"pas encore implémenté" : ' on_click 401,??? sub_menu 430 : parent 430,10 : caption 430,"Outils" sub_menu 431 : parent 431,430 : caption 431,"Configuration" : on_click 431,outilsconfig sub_menu 432 : parent 432,430 : caption 432,"Exécution" : on_click 432,outilsexec sub_menu 440 : parent 440,10 : caption 440,"Macros" sub_menu 441 : parent 441,440 : caption 441,"Macros" : on_click 441,macrosconfig sub_menu 300 : parent 300,10 : caption 300,"Fenêtres" ' sub_menu 301 : parent 301,300 : caption 301,"Fenêtre" : on_click 301,fenetre sub_menu 420 : parent 420,10 : caption 420,"Aide" sub_menu 421 : parent 421,420 : caption 421,"Aide" : on_click 421,aide sub_menu 422 : parent 422,420 : caption 422,"A-propos" : on_click 422,apropos
' ===== création de la fenêtre des options de la page actuelle form 3000 : hide 3000 : caption 3000,"Options" : command_target_is 3000 top 3000,100 : left 3000,200 width 3000,550 :height 3000,400 : on_close 3000,close3000 check 3001 : top 3001,10 : left 3001,10 : width 3001,150 caption 3001,"Numéros de de ligne" container 3002 : caption 3002,"Format par défaut" top 3002,40 : left 3002,10 : width 3002,250 : height 3002,110 combo 3003 : parent 3003,3002 : top 3003,20 : left 3003,10 : width 3003,170 font_names_load 3003 : text 3003,"Courier" alpha 3004 : parent 3004,3002 : top 3004,50 : left 3004,10 : caption 3004,"Taille:" combo 3005 : parent 3005,3002 : top 3005,50 : left 3005,60 : width 3005,40 item_add 3005,"8" item_add 3005,"9" item_add 3005,"10" item_add 3005,"11" item_add 3005,"12" item_add 3005,"14" item_add 3005,"16" item_add 3005,"18" text 3005,"10" check 3006 : parent 3006,3002 : top 3006,80 : left 3006,10 : caption 3006,"Gras" font_bold 3006 check 3007 : parent 3007,3002 : top 3007,80 : left 3007,60 : caption 3007,"Italique" font_italic 3007 check 3008 : parent 3008,3002 : top 3008,80 : left 3008,120 : caption 3008,"Sousligné" font_underline 3008 check 3009 : parent 3009,3002 : top 3009,80 : left 3009,190 : caption 3009,"Barré" : width 3009,40 font_strike 3009 alpha 3010 : top 3010,160 : left 3010,10 : caption 3010,"Syntaxe:" combo 3011 : top 3011,160 : left 3011,80 : width 3011,150
button 3098 : top 3098,310 : left 3098,10 : caption 3098,"Abandon" on_click 3098,options_abandon button 3099 : top 3099,310 : left 3099,210 : caption 3099,"Valider" on_click 3099,options_valider
' ===== création de la fenêtre des options générales form 3200 : hide 3200 : caption 3200,"Options" : command_target_is 3200 top 3200,100 : left 3200,200 width 3200,550 :height 3200,400 : on_close 3200,close3200 check 3201 : top 3201,10 : left 3201,10 : width 3201,150 caption 3201,"Numéros de de ligne" container 3202 : caption 3202,"Format par défaut" top 3202,40 : left 3202,10 : width 3202,250 : height 3202,110 combo 3203 : parent 3203,3202 : top 3203,20 : left 3203,10 : width 3203,170 font_names_load 3203 : text 3203,"Courier" alpha 3204 : parent 3204,3202 : top 3204,50 : left 3204,10 : caption 3204,"Taille:" combo 3205 : parent 3205,3202 : top 3205,50 : left 3205,60 : width 3205,40 item_add 3205,"8" item_add 3205,"9" item_add 3205,"10" item_add 3205,"11" item_add 3205,"12" item_add 3205,"14" item_add 3205,"16" item_add 3205,"18" text 3205,"10" check 3206 : parent 3206,3202 : top 3206,80 : left 3206,10 : caption 3206,"Gras" font_bold 3206 check 3207 : parent 3207,3202 : top 3207,80 : left 3207,60 : caption 3207,"Italique" font_italic 3207 check 3208 : parent 3208,3202 : top 3208,80 : left 3208,120 : caption 3208,"Sousligné" font_underline 3208 check 3209 : parent 3209,3202 : top 3209,80 : left 3209,190 : caption 3209,"Barré" : width 3209,40 font_strike 3209 alpha 3210 : top 3210,160 : left 3210,10 : caption 3210,"Syntaxe:" combo 3211 : top 3211,160 : left 3211,80 : width 3211,150 container 3212 : caption 3212,"Style des mots-clé" top 3212,190 : left 3212,10 : width 3212,250 : height 3212,100 check 3213 : parent 3213,3212 : top 3213,20 : left 3213,10 : caption 3213,"Gras" : font_bold 3213 check 3214 : parent 3214,3212 : top 3214,20 : left 3214,60 : caption 3214,"Italique" : font_italic 3214 check 3215 : parent 3215,3212 : top 3215,20 : left 3215,120 : caption 3215,"Sousligné" : font_underline 3215 check 3216 : parent 3216,3212 : top 3216,20 : left 3216,190 : caption 3216,"Barré" : font_strike 3216 width 3216,50 alpha 3218 : parent 3218,3212 : top 3218,50 : left 3218,10 : caption 3218,"Couleur;" combo 3219 : parent 3219,3212 : top 3219,50 : left 3219,70 : width 3219,70
button 3298 : top 3298,310 : left 3298,10 : caption 3298,"Abandon" on_click 3298,optionsgen_abandon button 3299 : top 3299,310 : left 3299,210 : caption 3299,"Valider" on_click 3299,optionsgen_valider
' ===== création de la fenêtre des définitions des macros form 3300 : hide 3300 : caption 3300,"Configuration des macros" : command_target_is 3300 top 3300,0 : left 3300,width(0) : border_small 3300 width 3300,420 :height 3300,105 : on_close 3300,close3300 alpha 3301 : top 3301,10 : left 3301,10 : caption 3301,"Nom:" combo 3302 : top 3302,10 : left 3302,50 : width 3302,280 : sort_on 3302 : on_click 3302,macrosel button 3303 : top 3303,40 : left 3303,50 : width 3303,70 caption 3303,"Nouveau" : font_bold 3303 : on_click 3303,macroadd button 3304 : top 3304,40 : left 3304,120 : width 3304,70 caption 3304,"Supprimer" : font_bold 3304 : on_click 3304,macrodel button 3305 : top 3305,40 : left 3305,190 : width 3305,70 caption 3305,"Editer" : font_bold 3305 : on_click 3305,macromod button 3306 : top 3306,40 : left 3306,260 : width 3306,70 caption 3306,"Remplacer" : font_bold 3306 : on_click 3306,macroupd button 3307 : top 3307,9 : left 3307,330 : width 3307,70 : height 3307,56 caption 3307,"Insérer" : font_bold 3307 : on_click 3307,macroins
' ===== création de la fenêtre des définitions de syntaxe de la page form 3400 : hide 3400 : caption 3400,"Configuration de la syntaxe" : command_target_is 3400 top 3400,100 : left 3400,200 width 3400,750 :height 3400,610 : on_close 3400,close3400 Alpha 3401 : top 3401,10 : left 3401,10 : caption 3401,"Mots-clé:" edit 3402 : top 3402,30 : left 3402,10 : width 3402,200 list 3403 : top 3403,60 : left 3403,10 : width 3403,200 : height 3403,400 sort_on 3403 button 3404: top 3404,30 : left 3404,220 : width 3404,70 caption 3404,"Ajouter" : on_click 3404,keyajouter button 3405: top 3405,60 : left 3405,220 : width 3405,70 caption 3405,"Modifier" : on_click 3405,keymodifier button 3406: top 3406,90 : left 3406,220 : width 3406,70 caption 3406,"Supprimer" : on_click 3406,keysupprimer button 3409: top 3409,480 : left 3409,10 : width 3409,200 : height 3409,70 caption 3409,"Charger la syntaxe" : on_click 3409,keychargertout font_bold 3409 : font_size 3409,12 button 3410: top 3410,480 : left 3410,300 : width 3410,200 : height 3410,70 caption 3410,"Sauver la syntaxe" : on_click 3410,keysauvertout font_bold 3410 : font_size 3410,12 container 3417 : top 3417,10 : left 3417,310 : width 3417,300 : height 3417,90 caption 3417,"Attributs Keywords" alpha 3411 : parent 3411,3417 : top 3411,20 : left 3411,10 : caption 3411,"Styles;" check 3412 : parent 3412,3417 : top 3412,20 : left 3412,50 : caption 3412,"Gras" : font_bold 3412 check 3413 : parent 3413,3417 : top 3413,20 : left 3413,100 : caption 3413,"Italique" : font_italic 3413 check 3414 : parent 3414,3417 : top 3414,20 : left 3414,160 : caption 3414,"Sousligné" : font_underline 3414 check 3415 : parent 3415,3417 : top 3415,20 : left 3415,230 : caption 3415,"Barré" : font_strike 3415 width 3415,50 alpha 3418 : parent 3418,3417 : top 3418,50 : left 3418,10 : caption 3418,"Couleur;" combo 3419 : parent 3419,3417 : top 3419,50 : left 3419,70 : width 3419,70 button 3416 : parent 3416,3417 : top 3416,50 : left 3416,200 : caption 3416,"Appliquer" on_click 3416,appliquerkeyattrib
' ===== création de la fenêtre A-propos form 3100 : hide 3100 : top 3100,100 : left 3100,300 : command_target_is 3100 width 3100,400 : height 3100,200 : on_close 3100,apropos_fermer picture 3101 : full_space 3101 : print_target_is 3101 font_name 3101,"Courier" : font_size 3101,10 : font_bold 3101 print_locate 40,20 : print "Programme: "+"Synedit_Editor" print_locate 40,40 : print "Version: "+version$ print_locate 40,60 : print "Date: "+verdat$ print_locate 40,80 : print "Auteur: "+"Klaus"
' ===== quelques objets invisbles command_target_is 0 edit 95 : hide 95 : on_change 95,syneditalert memo 96 : hide 96 save_dialog 97 open_dialog 98 timer 99 : timer_off 99 : timer_interval 99,300 : on_timer 99,tick ' ===== activer la DLL dll_on KGF$
' === faire quelques initialialisations res% = dll_call0("SyneditInitialize") res% = DLL_call2("SetCloseBox",handle(0),0) : ' désactiver la croix rouge ! res% = dll_call3("SyneditMode",0,4,0) : ' récupérer la liste des définitions de syntaxe s$ = clipboard_string_paste$ : ' sauvegarder le presse-papier clipboard_paste 96 : ' la charger dans un mémo for i%=1 to count(96) : ' et recopier dans la combo item_add 3011,item_read$(96,i%) : ' options de la page item_add 3211,item_read$(96,i%) : ' options générales next i% clipboard_string_copy s$ : ' restaurer le presse-papier res% = dll_call2("SelectComboBoxItem",handle(3011),1) : ' sélectionner (aucune) res% = dll_call2("SelectComboBoxItem",handle(3211),1) : ' sélectionner (aucune) ' OptGen$ = "0100000Courier\(aucune)" : ' options générales par défaut OptGen$ = "01000001000Courier\(aucune)" : ' options générales par défaut if file_exists(ini$)=1 : ' si fichier INI existe, relire les options générales file_open_read 1,ini$ file_readln 1,OptGen$ file_close 1 if len(OptGen$)<27 OptGen$ = left$(OptGen$,7) + "1000" + mid$(OptGen$,8,len(OptGen$)) file_open_write 1,ini$ file_writeln 1,OptGen$ file_close 1 end_if else : ' si fichier INI n'existe pas, le créer file_open_write 1,ini$ file_writeln 1,OptGen$ file_close 1 end_if if dir_exists(dirmacros$)=0 then dir_make dirmacros$ : ' créer le dossier des macros olddir$ = dir_current$ : ' sauvegarder le dossier actuel dir_change dirmacros$ : ' aller dans le dossier des macros s$ = file_find_first$ : ' parcourir ce dossier while s$<>"_" : ' pour charger la liste des macros existantes if left$(s$,1)<>"." if right$(s$,6)=".macro" s$ = left$(s$,len(s$)-6) item_add 3302,s$ end_if end_if s$ = file_find_next$ end_while dir_change olddir$ : ' restaurer le dossier par défaut if count(3302)>0 then res% = dll_call2("SelectComboBoxItem",handle(3302),1) : ' sélectionner la première macro item_add 3419,"NOIR" item_add 3419,"BLEU" item_add 3419,"ROUGE" item_add 3419,"VERT" item_add 3419,"VIOLET" res% = dll_call2("SelectComboBoxItem",handle(3419),1) : ' sélectionner le noir for i%=1 to count(3419) item_add 3219,item_read$(3419,i%) next i% res% = dll_call2("SelectComboBoxItem",handle(3219),1) : ' sélectionner le noir end
' ===== évènement déclenché par Synedit, quelque soit la page ' l'objetinvisible 95 (un EDIT) contient: ' Cnnn = la page nnn a changé ' Hnnn = on a frappé F1 dans la page nnn syneditalert: salert$ = text$(95) nalert% = instr("CH",left$(salert$,1)) select nalert% case 1: ' une page a changé syneditchange(mid$(salert$,2,3)) case 2: ' on a frappé F1 synedithelp(mid$(salert$,2,3)) end_select return
' ===== à la fin, on supprime toutes les fenêtres ouvertes close0: while nsyn%>0 res% = dll_call1("SyneditDelete",SE%(nsyn%)) pause 500 : ' ce délai pourra éventuellement être réduit... delete 100+nsyn% nsyn% = nsyn% - 1 end_while return
' ===== fermeture de la fenêtre des paramètres de la page close3000: closeX(3000) return ' ===== fermeture de la fenêtre des paramètres généraux close3200: closeX(3200) return
' ===== fermeture de la fenêtre de configuration de la syntaxe de la page close3400: closeX(3400) return
' ===== fermeture de la fenêtre de configuration des macros close3300: closeX(3300) return
' ===== mode d'emploi aide: message "L'aide n'est pas encore implémentée." return ' ===== montrer la fenêtre A-propos apropos: show 3100 inactive 0 return ' ===== fermer la fenêtre A-propos et restaurer la fenêtre active apropos_fermer: hide 3100 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if return ' ===== sortir du programme sortir: if nsyn%>0 then purger() gosub close0 res% = dll_call1("KillProcessByHandle",handle(0)) ' *** on ne passera jamais ici !
' ===== choisir une fenêtre par le menu "Fenêtres" fenetre: mark_off 300+act% act% = number_click-300 mark_on 300+act% show 100 + act% to_foreground 100 + act% return
' ======================== fonctions du menu "Fichiers"
' ===== créer une nouvelle fenêtre d'édition vide nouveau: if nsyn%=100 then return if nsyn%>0 t% = top(100+nsyn%) l% = left(100+nsyn%) else t% = top(0) + 50 l% = left(0) + 50 end_if nsyn% = nsyn% + 1 if act%>0 then mark_off 300+act% act% = nsyn% d% = 20 nf% = 100 + nsyn% capt$(nsyn%) = "<nouveau "+str$(nsyn%)+">" form nf% : top nf%,t%+d% : left nf%,l%+d% : width nf%,600 : height nf%,400 caption nf%,capt$(nsyn%) hndSE%(nsyn%) = handle(nf%) opt$ = OptGen$ : ' par défaut, prendre les options générales OSE$(nsyn%) = opt$ FSE$(nsyn%) = "_" sub_menu 300+nsyn% : parent 300+nsyn%,300 : caption 300+nsyn%,capt$(nsyn%) : on_click 300+nsyn%,fenetre mark_on 300+act% SE%(nsyn%) = dll_call2("SyneditCreate",handle(nf%),handle(95)) res% = dll_call3("SyneditMode",SE%(nsyn%),3,adr(opt$)) res% = dll_call5("SyneditGeometry",SE%(nsyn%),M1%,M1%,M1%,M1%) if instr(opt$,"\Panoramic")>0 gosub keychargertout : ' charge les mots-clé dans Synedit gosub keychargerstyles : ' charge les attributs graphiques end_if res% = dll_call3("SyneditMode",SE%(act%),2,0) : ' donner le focus à Synedit if nsyn%=1 then timer_on 99 return ' ===== créer une nouvelle fenêtre d'édition et y charger un fichier ouvrir: f$ = file_name$(98) if f$="_" then return if file_exists(f$)=0 message "Ouverture impossible" return end_if gosub nouveau res% = dll_call2("SyneditOpen",SE%(act%),adr(f$)) if res%=0 FSE$(act%) = f$ f$ = file_extract_name$(f$) capt$(act%) = f$ caption 100+act%,f$ caption 300+act%,f$ end_if return ' ===== créer une nouvelle fenêtre d'édition et y charger une copie de la fenêtre active copier: if act%=0 then return org% = act% gosub nouveau if res%=0 res% = dll_call2("SyneditCopyObject",org%,act%) capt$(nsyn%) = "(copie) "+capt$(org%) caption 100+nsyn%,capt$(nsyn%) caption 300+nsyn%,capt$(nsyn%) FSE$(nsyn%) = "_" OSE$(nsyn%) = OSE$(org%) end_if return ' ===== fermer la fenêtre active fermer: if act%=0 then return if left$(caption$(100+act%),1)="*" then Confirmer("Le code a été modifié. Voulez-vous vraiment fermer la fenêtre ?") if confirm%<>1 then return res% = dll_call1("SyneditDelete",SE%(act%)) pause 500 delete 100+act% inactive 300+act% caption 300+act%,"<supprimé>" SE%(act%) = 0 act% = act% -1 while SE%(nsyn%)=0 delete 300+nsyn% nsyn% = nsyn% - 1 if nsyn%=0 then exit_while end_while if act%>nsyn% then act% = nsyn% return ' =====enregistrer la fenêtre active dans son fichier associé sauver: if act%=0 then return if FSE$(act%)="_" then goto sauverdans f$ = FSE$(act%) res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) if left$(caption(100+act%),1)="*" then caption 100+act%,mid$(caption 100+act%,3,200) return
' ===== enregistrer la fenêtre active dans un fichier choisi par dialogue sauverdans: if act%=0 then return f$ = file_name$(97) if f$="_" then return if file_exists(f$)=1 if message_confirmation_yes_no("Ce fichier existe déjà. Voulez-vous le remplacer ?")<>1 then return end_if res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) if res%=0 FSE$(act%) = f$ f$ = file_extract_name$(f$) caption 100+act%,f$ caption 300+act%,f$ capt$(act%) = f$ end_if return ' ======================== fonctions du menu "Outils"
' ===== configuration des outils outilsconfig: message "pas encore implémenté." return ' ===== exécution des outils outilsexec: message "pas encore implémenté." return
' ======================== fonctions du menu "Macros"
' ===== configuration des macros macrosconfig: optvalid% = 0 show 3300 inactive 0 return macrosel: to_foreground 0 to_foreground 100+act% set_focus 3307 return
' ===== ajouter une nouvelle macro à partir du presse-papier macroadd: if act%=0 then return f$ = trim$(text$(3302)) if f$="" then return i% = 0 while i%<count(3302) i% = i% + 1 if f$=item_read$(3302,i%) message "Cette macro existe déjà." return end_if end_while res% = dll_call1("SyneditCopyText",act%) if res%<1 message "Il n'y a rien dans le presse-papier." return end_if s$ = clipboard_string_paste$ file_open_write 1,dirmacros$+f$+".macro" file_writeln 1,s$ file_close 1 item_add 3302,f$ message "La macro "+f$+" a été créée." return ' ===== supprimer la macro sélectionnée macrodel: if count(3302)=0 then return s$ = item_index$(3302) i% = message_confirmation_yes_no("Voulez-vous vraiment supprimer la macro "+s$) if i%<>1 then return f$ = dirmacros$ + s$ + ".macro" file_delete f$ item_delete 3302,item_index(3302) if count(3302)>0 then res% = dll_call2("SelectComboBoxItem",handle(3302),1) message "La macro "+s$+" a été supprimée." return
' ===== remplacer la page actuelle par la macro sélectionnée macromod: if act%=0 then return if count(3302)=0 then return f$ = dirmacros$ + item_index$(3302)+".macro" res% = dll_call2("SyneditOpen",act%,adr(f$)) caption 100+act%,"(macro) "+item_index$(3302) caption 300+act%,"(macro) "+item_index$(3302) capt$(act%) = "(macro) "+item_index$(3302) return
' ===== remplacer la macro sélectionnée par la page actuelle macroupd: if act%=0 then return if count(3302)=0 then return f$ = dirmacros$ + item_index$(3302)+".macro" res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) message "La macro "+item_index$(3302)+" a été remplacée." return
' ===== insérer une macro macroins: if act%=0 then return if count(3302)=0 then return f$ = dirmacros$ + item_index$(3302)+".macro" s$ = "" file_open_read 1,f$ while file_eof(1)=0 file_readln 1,s1$ s$= s$ + s1$ + chr$(13) + chr$(10) end_while file_close 1 ' ici, charger s$ avec le contenu de la macro res% = dll_call2("SyneditInsertString",act%,adr(s$)) to_foreground 100+act% res% = dll_call3("SyneditMode",SE%(act%),2,0) : ' redonner le focus à Synedit return
' ======================== fonctions du menu "Options"
' ===== inverser l'indicateur de présence des numéros de ligne dans la fenêtre active lignes: ln%(act%) = 1 - ln%(act%) : ' basculer 0<-->1 res% = dll_call3("SyneditMode",SE%(act%),1,ln%(act%)) : ' signaler à Synedit res% = dll_call3("SyneditMode",SE%(act%),2,0) : ' redonner le focus à Synedit OSE$(act%) = str$(ln%(act%)) + mid$(OSE$(act%),2,20) : ' mémoriser dans les param_tres return ' ===== charger la fenêtre des options avec les valeurs de la fenêtre active, puis afficher options: if act%=0 then return optvalid% = 0 opt$ = OSE$(act%) if left$(opt$,1)="1" mark_on 3001 else mark_off 3001 end_if text 3005,mid$(opt$,2,2) if mid$(opt$,4,1)="1" mark_on 3006 else mark_off 3006 end_if if mid$(opt$,5,1)="1" mark_on 3007 else mark_off 3007 end_if if mid$(opt$,6,1)="1" mark_on 3008 else mark_off 3008 end_if if mid$(opt$,7,1)="1" mark_on 3009 else mark_off 3009 end_if i% = instr(opt$,"\") text 3003,mid$(opt$,8,i%-8) opt$ = mid$(opt$,i%+1,len(opt$)) for i%=1 to count(3011) if opt$=item_read$(3011,i%) res% = dll_call2("SelectComboBoxItem",handle(3011),i%) : ' restaurer la syntaxe exit_for end_if next i% show 3000 inactive 0 return ' ===== charger la fenêtre des options générales, puis afficher optionsgen: if left$(OptGen$,1)="1" mark_on 3201 else mark_off 3201 end_if text 3205,mid$(OptGen$,2,2) if mid$(OptGen$,4,1)="1" mark_on 3206 else mark_off 3206 end_if if mid$(OptGen$,5,1)="1" mark_on 3207 else mark_off 3207 end_if if mid$(OptGen$,6,1)="1" mark_on 3208 else mark_off 3208 end_if if mid$(OptGen$,7,1)="1" mark_on 3209 else mark_off 3209 end_if if mid$(OptGen$,8,1)="1" mark_on 3213 else mark_off 3213 end_if if mid$(OptGen$,9,1)="1" mark_on 3214 else mark_off 3214 end_if if mid$(OptGen$,10,1)="1" mark_on 3215 else mark_off 3215 end_if if mid$(OptGen$,11,1)="1" mark_on 3216 else mark_off 3216 end_if i% = instr(OptGen$,"\") text 3203,mid$(OptGen$,12,i%-12) opt$ = mid$(OptGen$,i%+1,len(OptGen$)) for i%=1 to count(3211) if opt$=item_read$(3211,i%) res% = dll_call2("SelectComboBoxItem",handle(3211),i%) : ' restaurer la syntaxe exit_for end_if next i% show 3200 inactive 0 return ' ===== sortie de la fenêtre des options de la page par "Abandon" options_abandon: hide 3000 show 0 active 0 to_foreground 0 return
' ===== sortie de la fenêtre des options générales par "Abandon" optionsgen_abandon: hide 3200 show 0 active 0 to_foreground 0 return
' =====sortie de la fenêtre des options de la page par "Valider" options_valider: ' construire le paramètre: ' xttgisbp\S ' x=numéros de ligne tt=taille g=gras i=italique s=souslgné b=barré ' p=police S=syntaxe optvalid% = 1 opt$ = str$(checked(3001))+right$("0"+text$(3005),2)+str$(checked(3006)) opt$ = opt$ + str$(checked(3007))+str$(checked(3008))+str$(checked(3009)) opt$ = opt$ + mid$(optgen$,8,4) opt$ = opt$ + text$(3003) + "\" + text$(3011) OSE$(act%) = opt$ ln%(act%) = checked(3001) res% = dll_call3("SyneditMode",SE%(act%),3,adr(opt$)) : ' activer les nouvelles options gosub keychargerstyles : ' charge les attributs graphiques hide 3000 show 0 active 0 to_foreground 0 return ' =====sortie de la fenêtre des options générales par "Valider" optionsgen_valider: ' construire le paramètre: ' xttgisbp\S ' x=numéros de ligne tt=taille g=gras i=italique s=souslgné b=barré ' p=police S=syntaxe optvalid% = 1 opt1$ = str$(checked(3201))+right$("0"+text$(3205),2)+str$(checked(3206)) opt1$ = opt1$ + str$(checked(3207))+str$(checked(3208))+str$(checked(3209)) opt1$ = opt1$ + str$(checked(3213))+str$(checked(3214))+str$(checked(3215))+str$(checked(3216)) opt1$ = opt1$ + text$(3203) + "\" + text$(3211) OptGen$ = opt1$ : ' mémoriser les options générales colorkey$ = text$(3219) res% = dll_call2("SelectComboBoxItem",handle(3419),item_index(3219)) file_open_write 1,ini$ file_writeln 1,OptGen$ file_close 1 hide 3200 active 0 to_foreground 0 if act%>0 then to_foreground 100+act% return
' ===== afficher la fenêtre "Syntaxe" syntaxe: if act%=0 then return opt$ = OSE$(act%) i% = instr(opt$,"\") s$ = mid$(opt$,i%+1,len(opt$)) : ' récupérer la syntaxe de la page if (s$<>"Panoramic") and (s$<>"General") message "Action impossible sur cette syntaxe." return end_if optvalid% = 0 caption 3400,"Configuration de la syntaxe - "+s$ if mid$(Opt$,8,1)="1" mark_on 3412 else mark_off 3412 end_if if mid$(Opt$,9,1)="1" mark_on 3413 else mark_off 3413 end_if if mid$(Opt$,10,1)="1" mark_on 3414 else mark_off 3414 end_if if mid$(Opt$,11,1)="1" mark_on 3415 else mark_off 3415 end_if
show 3400 inactive 0 return ' ===== nouveau mot-cle keyajouter: s$ = lower$(trim$(text$(3402))) if s$="" then return i% = 0 while i%<count(3403) i% = i% + 1 if s$=item_read$(3403,i%) message "Ce mot-clé existe déjà." return end_if end_while item_add 3403,s$ opt$ = OSE$(act%) i% = instr(opt$,"\") s$ = mid$(opt$,i%+1,len(opt$)) : ' récupérer la syntaxe de la page appliquer_syntax(s$) return
keymodifier: return
keysupprimer: return
keychargertout: opt$ = OSE$(act%) i% = instr(opt$,"\") s$ = mid$(opt$,i%+1,len(opt$)) : ' récupérer la syntaxe de la page f$ = dir$ + "Synedit_Editor_Syntax_"+s$+".txt" clear 3403 file_open_read 1,f$ file_readln 1,s1$ i% = 1 if s1$<>"#SYNTAX" then goto invalidsyntax file_readln 1,s1$ i% = i% + 1 if s1$<>s$ then goto invalidsyntax file_readln 1,s1$ i% = i% + 1 if s1$<>"#KEYS" then goto invalidsyntax while file_eof(1)=0 file_readln 1,s1$ i% = i% + 1 if s1$="#END" then exit_while item_add 3403,s1$ end_while ' ici, charger les attributs ' #KEYSTYLE ' STYLE=GRAS,ITALIQUE ' COLOR=BLEU ' #END file_readln 1,s1$ i% = 1 if s1$<>"#KEYSTYLE" then goto invalidsyntax file_readln 1,s1$ i% = 1 if left$(s1$,6)<>"STYLE=" then goto invalidsyntax s2$ = "" if instr(s1$,"GRAS")>0 s2$ = s2$ + "1" else s2$ = s2$ + "0" end_if if instr(s1$,"ITALIQUE")>0 s2$ = s2$ + "1" else s2$ = s2$ + "0" end_if if instr(s1$,"SOUSLIGNE")>0 s2$ = s2$ + "1" else s2$ = s2$ + "0" end_if if instr(s1$,"BARRE")>0 s2$ = s2$ + "1" else s2$ = s2$ + "0" end_if optgen$ = left$(optgen$,7) + s2$ + mid$(optgen$,12,len(optgen$)) opt$ = left$(opt$,7) + s2$ + mid$(opt$,12,len(opt$)) file_readln 1,s1$ i% = 1 if left$(s1$,6)<>"COLOR=" then goto invalidsyntax colorkey$ = mid$(s1$,7,len(s1$)) for i%=1 to count(3419) if colorkey$=item_read$(3419,i%) res% = dll_call2("SelectComboBoxItem",handle(3419),i%) res% = dll_call2("SelectComboBoxItem",handle(3219),i%) end_if next i% file_readln 1,s1$ i% = 1 if s1$<>"#END" then goto invalidsyntax file_close 1 appliquer_syntax(s$) return invalidsyntax: file_close 1 message "Fichier invalide en ligne "+str$(i%)+": "+s1$ return keychargerstyles: s$ = mid$(opt$,8,4) res% = dll_call4("SyneditConfigureHighlighter",act%,4,adr(s$),adr(colorkey$)) return
keysauvertout: ' format du fichier de la syntaxe: ' fichier Synedit_Editor_Syntax_Panoramic.txt ' #SYNTAX ' Panoramic (nom de la syntaxe en 1 ligne) ' #KEYS ' pause (une ligne par mot-clé) ' ... ' #END opt$ = OSE$(act%) i% = instr(opt$,"\") s$ = mid$(opt$,i%+1,len(opt$)) : ' récupérer la syntaxe de la page f$ = dir$ + "Synedit_Editor_Syntax_"+s$+".txt" file_open_write 1,f$ file_writeln 1,"#SYNTAX" file_writeln 1,s$ file_writeln 1,"#KEYS" i% = 0 while i%<count(3403) i% = i% + 1 file_writeln 1,item_read$(3403,i%) end_while file_writeln 1,"#END" ' ici, sauver les attributs file_writeln 1,"#KEYSTYLE" s$ = "" if mid$(optgen$,8,1)="1" then s$ = s$ + "GRAS" if mid$(optgen$,9,1)="1" if len(s$)>0 then s$ = s$ + "," s$ = s$ + "ITALIQUE" end_if if mid$(optgen$,10,1)="1" if len(s$)>0 then s$ = s$ + "," s$ = s$ + "SOUSLIGNE" end_if if mid$(optgen$,11,1)="1" if len(s$)>0 then s$ = s$ + "," s$ = s$ + "BARRE" end_if file_writeln 1,"STYLE="+s$ file_writeln 1,"COLOR="+colorkey$ file_writeln 1,"#END" file_close 1 message "La syntaxe est sauvée dans "+f$ return appliquerkeyattrib: s2$ = "" if checked(3412)=1 s2$ = s2$ + "1" else s2$ = s2$ + "0" end_if if checked(3413)=1 s2$ = s2$ + "1" else s2$ = s2$ + "0" end_if if checked(3414)=1 s2$ = s2$ + "1" else s2$ = s2$ + "0" end_if if checked(3415)=1 s2$ = s2$ + "1" else s2$ = s2$ + "0" end_if optgen$ = left$(optgen$,7) + s2$ + mid$(optgen$,12,len(optgen$)) opt$ = left$(opt$,7) + s2$ + mid$(opt$,12,len(opt$)) colorkey$ = text$(3419) res% = dll_call2("SelectComboBoxItem",handle(3219),item_index(3419)) gosub keychargerstyles return
' ======================== fonctions indépendantes
' ===== ce timer surveille la fenêtre active et ses dimensions tick: timer_off 99 res% = dll_call0("GetActiveWindow") : ' récupérer le handle de la fenêtre active for i%=1 to nsyn% : ' chercher dans la table des fenêtres d"édition if res%=hndSE%(i%) : ' est-ce qu'on a trouvé la fenêtre if i%<>act% : ' est-elle différente de la fenêtre active précédente ? mark_off 300+act% : ' alors changer le marquade du menu mark_on 300+i% end_if act% = i% : ' mémoriser le numéro de la fenêtre active res% = dll_call5("SyneditGeometry",SE%(act%),M1%,M1%,M1%,M1%) : ' ajuster la taille de Synedit à celle de la fenêtre exit_for end_if next i% timer_on 99 return
' ======================== SUBs internes
' ===== fermer une des fenêres auxiliaires modales sub CloseX(f%) if optvalid%=0 hide f% show 0 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if end_if end_sub
' ===== appliquer une syntaxe paramétrée sub appliquer_syntax(sy$) dim_local s$, i% s$ = sy$ i% = instr(s$,"\") if i%>0 then s$ = mid$(sy$,i%+1,len(s$)) ' imposer d'abord les mots-clé if (s$="Panoramic") or (s$="General") clear 96 i% = 0 while i%<count(3403) i% = i% + 1 item_add 96,item_read$(3403,i%) end_while res% = dll_call4("SyneditConfigureHighlighter",act%,3,handle(96),0) else message "La syntaxe "+sy$+" ne peut pas être configurée." end_if end_sub
' ===== une des pages a changé sub syneditchange(n$) dim_local n% n% = val(n$) if left$(caption$(100+n%),1)<>"*" then caption 100+n%,"* "+caption$(100+n%) end_sub
' ===== on a frappé F1 sub synedithelp(n$) dim_local n% n% = val(n$) message "Aide pas encore implémentée." end_sub
' ===== demande d'un message de confirmation sub confirmer(s$) confirm% = message_confirmation_yes_no(s$) end_sub ' ===== purger les pages non mises à jour sub purger() dim_local i% for i%=1 to nsyn% if left$(caption$(100+i%),1)="*" s$ = "La page ["+capt$(i%)+"] a été modifiée. Voulez-vous la sauvegarder ?" confirmer(s$) if confirm%=1 act% = i% message "on sauvegarde "+str$(act%) to_foreground 100+act% res% = dll_call3("SyneditMode",SE%(act%),2,0) : ' donner le focus à Synedit gosub sauver end_if end_if next i% end_sub
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 25 Aoû 2014 - 5:24 | |
| Bon, va falloir que je m' y mette. Dur de changer les habitudes, je ne me sers même pas de celui que j' ai créé... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Editeur avec marquage syntaxique Lun 25 Aoû 2014 - 10:07 | |
| Bonjour Klaus,
C'est étrange car je teste sur 2 PC seven 64 bits et j'ai le même problème.
J'ai fait en sorte d'ouvrir les programmes avec les droits administrateur. je ne vois pas d'ou cela provient !
J'ai bien le profil Panoramic avec la police, sa taille, sa couleur et couleur par défaut et couleur des mots clés.
Mais lorsque je décide de cliquer sur l'option 'OUVRIR' et de sélectionné le fichier .BAS dans un dossier documents le fichier qui s'ouvre est systématiquement "Synedit_Editor_Syntax_Panoramic.txt"
Je ne comprends pas !
EDIT : Je viens de faire un petit test. Si je selectionne AUCUN dans la syntaxe alors je peux ouvrir le fichier .BAS sans problème...
Peut-être une piste... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Lun 25 Aoû 2014 - 10:41 | |
| J'ai vu ! je regarde ça... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Editeur avec marquage syntaxique Lun 25 Aoû 2014 - 10:56 | |
| Je ne sais pas comment cela c'est produit mais j'ai même réussi a avoir le fichier "Synedit_Editor_Syntax_Panoramic.txt" qui a changé avec seulement quelles lignes :
#SYNTAX Panoramic #KEYS #END #KEYSTYLE STYLE=GRAS COLOR=BLEU #END
J’espère que cela te permettra de trouver d'ou vient l'erreur... Bon courage Klaus...
| |
| | | Contenu sponsorisé
| Sujet: Re: Editeur avec marquage syntaxique | |
| |
| | | | Editeur avec marquage syntaxique | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |