Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: V3.22 du 21/08/2014 - ajout code 4 à SyneditMode Jeu 21 Aoû 2014 - 1:05 | |
| Nouvelle version: KGF.dll V3.22 du 21/08/2014Nouveauté: - ajout code 4 à SyneditModeModules modifiés: KGF.dllLa doc n'est pas encore mise à jour, ni les sources sur le WebDav. Ca viendra. Ce code 4 permet d'appliquer un profil à la page d'édition active. Le profil est l'ensemble des paramètres définis dans la page d'options pour la page active. Tout est actif sauf pour le moment l'analyse syntaxique. On peut déjà la programmer, et elle sera mémorisée pour la page concernée, elle sera même passée à la DLL. Mais là, ce n'est pas encore implémenté. C'est en cours. Le programme Synedit_Editor.bas, basé sur cette version, a quelques améliorations: - gestion d'un profil par défaut (options générales) qui s'appliquent initialement lors de la création d'une nouvelle page d'édition, que ce soit en page vierge ou par chargement d'un fichier - apparition d'un menu "Outils", avec les options "Configuration" et "Exécution" dont l'implémentation suivra. 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.
label close0, close3000, close3200 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
' ===== 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%
' ===== constantes dim M1% : M1% = 0 - 1 dim version$ : version$ = "Alpha 0.1" dim verdat$ : verdat$ = "21/08/2014" dim KGF$ : KGF$ = "KGF.dll" dim ini$ : ini$ = file_extract_path$(param_value$(0))+"Synedit_editor.ini"
' 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 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 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_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 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% res% = dll_call2("SelectComboBoxItem",handle(3011),1) : ' sélectionner (aucune) res% = dll_call2("SelectComboBoxItem",handle(3211),1) : ' sélectionner (aucune) OptGen$ = "0100000Courier\(aucune)" if file_exists(ini$)=1 file_open_read 1,ini$ file_readln 1,OptGen$ file_close 1 else file_open_write 1,ini$ file_writeln 1,OptGen$ file_close 1 end_if 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: if optvalid%=0 hide 3000 show 0 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if end_if return ' ===== fermeture de la fenêtre des paramètres généraux close3200: if optvalid%=0 hide 3200 show 0 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if end_if 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 "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
| |
|