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 |
|
|
| Un éditeur MultiPlatforme Panoramic, FBpano, etc... | |
| | |
Auteur | Message |
---|
jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Sam 12 Oct 2019 - 16:35 | |
| A première vue c'est la variable n dans changer_taille_police qui n'est pas déclarée. Essaie de la remplacer par LNUM_WIDTH Pour les mots-clés j'utilise une chaîne de caractères commençant et finissant par un espace, avec un espace entre 2 mots-clés : - Code:
-
dim keywords$
keywords = " dim data print ... "
La recherche se fait par la fonction INSTR - Code:
-
if instr(keywords, " " + lcase(word) + " ") > 0 then ... ' word est un mot-clé
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Sam 12 Oct 2019 - 17:56 | |
| Mais oui bien sûr c'est LNUM_WIDTH au lieu de n% qui n'est pas déclarée ! Ahhhh moi je cherchais ailleurs... normal que je ne trouvais pas ! Oui pour les mots clé j'ai vu mais en fait c'est pour la mise en place des couleurs et de la syntaxe que je voulais un petit coup de pouce... J'ai vu dans la doc que tu parles de l’instruction gen_style prog$, keywords$, style$. Mais là je suis un peu largué. Pourrai tu me faire un exemple en quelques lignes... Merci Jean. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Sam 12 Oct 2019 - 20:36 | |
| Je me suis encore bien amusé avec FBPano aujourd'hui. J'ai mis en place l'interface de gestion des couleurs selon la syntaxe. Il me reste a réaliser la partie syntaxe mais j'attends les infos... Un grand merci à Jean Debord pour son fichier d'aide très bien réalisé et qui me permet d'avancer sans trop de difficultés. Je mets le code ici pour ceux que ça intéresse... Bien sûr ce n'est pas fonctionnel. C'est juste une présentation. - Code:
-
' ********************************************************************** ' Editeur FBPano, d'apres le programme de demonstration de FLTK : www.fltk.org/doc-1.3/editor.html ' Modification par MiNiBuG ' **********************************************************************
' #compile -gui
CONST FORM_WIDTH = 750 ' Largeur de la fenetre principale CONST FORM_HEIGHT = 500 ' Hauteur de la fenetre principale CONST FONT_SIZE = 16 ' Taille des caracteres CONST FONT_COLOR = FL_BLACK ' Couleur du texte CONST BKG_COLOR = FL_WHITE ' Couleur du fond CONST LNUM_COLOR = FL_BLACK ' Couleur des numeros de lignes CONST LNUM_WIDTH = 60 ' Largeur de la marge pour num. lignes
DIM search$ ' Chaine pour la recherche DIM find$, rep$ ' Chaines pour le remplacement DIM nf% ' Nb de polices DIM fontnum%() ' Numéros des polices DIM fontname$() ' Noms des polices DIM fontsize% : fontsize = 16 ' Taille de la police DIM font% = FL_COURIER ' Police selectionnee DIM i% ' Variable de boucle DIM keywords$ ' Liste des mots_cles
ENUM GUI fmMain ' Form principale menu1, editor1, buffer1 fmReplace ' Form rechercher/remplacer edFind, edReplace, btRepAll, btRepNext, btCancel fmParametres ' Form paramètres lsPolice, tbSize, btFermerParam, btWrap, btLine ctCouleur rdColFond, rdColText, rdColNomb, rdColCom, rdColMC, rdColPp, rdColAutr CoulChoix, edResult END_ENUM
FORM fmMain, 15, 35, FORM_WIDTH, FORM_HEIGHT, "Editeur" FORM_BEGIN fmMain MENU menu1, 0, 0, FORM_WIDTH, 25 TEXT_EDITOR editor1, 0, 25, FORM_WIDTH, FORM_HEIGHT - 25 TEXT_BUFFER buffer1 FORM_END fmMain
FORM fmReplace, 200, 200, 380, 110, "Remplacement" FORM_BEGIN fmReplace EDIT edFind, 110, 10, 260, 25, "Chercher :" EDIT edReplace, 110, 40, 260, 25, "Remplacer par :" BUTTON btRepAll, 10, 75, 110, 25, "Remplacer tout" BUTTON btRepNext, 130, 75, 170, 25, "Remplacer Suivant", , T_Button_Return BUTTON btCancel, 310, 75, 60, 25, "Fermer" FORM_END fmReplace
FORM fmParametres, 200, 200, 380, 420, "Liste des polices" FORM_BEGIN fmParametres LIST lsPolice, 5, 5, 180, 375 nf = FONT_LIST(fontnum(), fontname()) FOR i = 0 TO nf - 1 LIST_ITEM_ADD lsPolice, "@S12@F" & "@." & fontname(i) NEXT i LIST_ITEM_SELECT lsPolice, 1
TRACK_BAR tbSize, 225, 5, 150, 25, "Taille", FL_ALIGN_LEFT, T_Track_Val FONT_TEXT tbSize, font, 16 POSITION_RANGE tbSize, 8, 30, 1 POSITION tbSize, fontsize BUTTON btWrap, 190, 35, 185, 30, "Retour à la ligne", , T_Button_Light BUTTON btLine, 190, 65, 185, 30, "Affichage lignes", , T_Button_Light MARK_ON btLine
CONTAINER ctCouleur, 190, 100, 185, 280, "", , T_Container CONTAINER_BEGIN ctCouleur RADIO rdColFond, 195, 102, 175, 30, "Fond" RADIO rdColText, 195, 122, 175, 30, "Texte" RADIO rdColNomb, 195, 142, 175, 30, "Nombres" RADIO rdColCom, 195, 162, 175, 30, "Commentaires" RADIO rdColMC, 195, 182, 175, 30, "Mots clés" RADIO rdColPp, 195, 202, 175, 30, "Préprocesseur" RADIO rdColAutr, 195, 222, 175, 30, "Autre" MARK_ON rdColFond COLOR_CHOOSER CoulChoix, 195, 247, 175, 100, , , FL_COLORCHOOSER_BYTE EDIT edResult, 195, 350, 175, 25 CONTAINER_END ctCouleur
BUTTON btFermerParam, 5, 385, 370, 30, "Fermer" FORM_END fmParametres
ON_CLICK btRepAll, remplacer_tout ON_CLICK btRepNext, remplacer_suivant ON_CLICK btCancel, annuler_remplacer ON_CLICK lsPolice, changer_police ON_CLICK btFermerParam, cacher_parametres ON_CLICK tbSize, changer_taille_police ON_CLICK btWrap, wrap ON_CLICK btLine, affichage_numlines
ON_CLICK rdColFond, changer_couleur ON_CLICK rdColText, changer_couleur ON_CLICK rdColNomb, changer_couleur ON_CLICK rdColCom, changer_couleur ON_CLICK rdColMC, changer_couleur ON_CLICK rdColPp, changer_couleur ON_CLICK rdColAutr, changer_couleur ON_CLICK CoulChoix, changer_couleur
MENU_ITEM_ADD menu1, "&Fichier/&Nouveau ", "Ctrl+N", , nouveau MENU_ITEM_ADD menu1, "&Fichier/&Ouvrir ", "Ctrl+O", , ouvrir MENU_ITEM_ADD menu1, "&Fichier/&Enregistrer ", "Ctrl+E", FL_MENU_DIVIDER, enregistrer MENU_ITEM_ADD menu1, "&Fichier/&Quitter ", "Ctrl+Q", , quitter
MENU_ITEM_ADD menu1, "E&dition/Co&uper ", "Ctrl+X", , couper MENU_ITEM_ADD menu1, "E&dition/&Copier ", "Ctrl+C", , copier MENU_ITEM_ADD menu1, "E&dition/Co&ller ", "Ctrl+V", FL_MENU_DIVIDER, coller MENU_ITEM_ADD menu1, "E&dition/&Rechercher ", "Ctrl+F", , rechercher MENU_ITEM_ADD menu1, "E&dition/Rechercher le &suivant ", "F3", , rechercher_suivant MENU_ITEM_ADD menu1, "E&dition/R&emplacer ", "Ctrl+R", , remplacer
MENU_ITEM_ADD menu1, "&Exécution/E&xécuter ", "F9", , executer
MENU_ITEM_ADD menu1, "O&ptions/&Syntaxe/&Panoramic ", "F1", FL_MENU_RADIO + FL_MENU_VALUE, syntaxe_panoramic MENU_ITEM_ADD menu1, "O&ptions/&Syntaxe/&FBPano ", "F2", FL_MENU_RADIO, syntaxe_fbpano MENU_ITEM_ADD menu1, "O&ptions/&Paramètres ", "Ctrl+P", , choix_parametres
fontsize = 16
COLOR_FL editor1, BKG_COLOR FONT_TEXT editor1, font, fontsize COLOR_TEXT_FL editor1, FONT_COLOR COLOR_CURSOR_FL editor1, FONT_COLOR COLOR_NUMLINES_FL editor1, LNUM_COLOR EDITOR_NUMLINES editor1, LNUM_WIDTH, font, fontsize
EDITOR_SET_BUFFER editor1, buffer1
SET_RESIZABLE fmMain
START fmMain
' ---------------------------------------------------------------------- ' Sous-programmes utilitaires ' ----------------------------------------------------------------------
FUNCTION trouve% (s$, p%, msg%) ' Recherche la chaine s à partir de la position du curseur ' La position de la chaine trouvee est retournee dans p ' msg = TRUE pour afficher le message d'erreur
p = EDITOR_GET_INSERT_POS(editor1) IF BUFFER_SEARCH_FORWARD(buffer1, p, s, p) = 0 THEN IF msg THEN MESSAGE "Chaîne """ + s + """ non trouvée !" trouve = FALSE ELSE trouve = TRUE END_IF END_FUNCTION
SUB update_editor (p%, s1$, s2$, rpl%) ' Met a jour l'editeur apres recherche ou remplacement ' p = position de la chaine recherchee ' s1 = chaine recherchee ' s2 = chaine de remplacement ' rpl = indique si remplacement
DIM p1%
p1 = p + LEN(s1) BUFFER_SELECT buffer1, p, p1
IF rpl THEN BUFFER_REMOVE_SELECT buffer1 BUFFER_INSERT buffer1, p, s2 p1 = p + LEN(s2) BUFFER_SELECT buffer1, p, p1 p = p1 END_IF
EDITOR_SET_INSERT_POS editor1, p1 EDITOR_SHOW_INSERT_POS editor1 END_SUB
' ---------------------------------------------------------------------- ' Sous-programmes associes aux evenements ' ----------------------------------------------------------------------
SUB nouveau TEXT buffer1, "" CAPTION fmMain, "Editeur" END_SUB
SUB ouvrir DIM fname$ fname = FILE_NAME("Ouvrir", "Fichier texte (*.txt)", CURDIR, 0) IF fname = "" OR FILE_EXISTS(fname) = 0 THEN EXIT_SUB BUFFER_FILE_LOAD buffer1, fname CAPTION fmMain, fname END_SUB
SUB enregistrer DIM fname$ fname = FILE_NAME("Enregistrer", "Fichier texte (*.txt)", CURDIR, 0) IF fname = "" THEN EXIT_SUB BUFFER_FILE_SAVE buffer1, fname END_SUB
SUB quitter HIDE fmMain END_SUB
SUB couper EDITOR_CUT editor1 END_SUB
SUB copier EDITOR_COPY editor1 END_SUB
SUB coller EDITOR_PASTE editor1 END_SUB
SUB rechercher DIM p% search = MESSAGE_INPUT("Rechercher", "Rechercher", search) IF search <> "" THEN IF trouve(search, p, TRUE) THEN update_editor p, search, "", FALSE END_IF END_SUB
SUB rechercher_suivant DIM p% IF search = "" THEN search = message_input("Rechercher", "Rechercher", search) END_IF IF search <> "" THEN IF trouve(search, p, TRUE) THEN update_editor p, search, "", FALSE END_IF END_SUB
SUB remplacer SHOW fmReplace END_SUB
SUB remplacer_suivant DIM p% find = GET_TEXT(edFind) IF find = "" THEN EXIT_SUB rep = GET_TEXT(edReplace) IF trouve(find, p, TRUE) THEN update_editor p, find, rep, TRUE END_SUB
SUB remplacer_tout DIM p%, found%, n% find = GET_TEXT(edFind) IF find = "" THEN EXIT_SUB rep = GET_TEXT(edReplace) found = trouve(find, p, TRUE) IF NOT found THEN EXIT_SUB WHILE found n = n + 1 update_editor p, find, rep, TRUE found = trouve(find, p, FALSE) END_WHILE MESSAGE "Chaîne """ & find & """ remplacée " & n & " fois." END_SUB
SUB annuler_remplacer HIDE fmReplace END_SUB
SUB executer
END_SUB
SUB syntaxe_panoramic PRINT "syntaxe_panoramic" END_SUB
SUB syntaxe_fbpano PRINT "syntaxe_fbpano" END_SUB
SUB wrap DIM n% IF CHECKED(btWrap)=1 THEN n = 1 ELSE n = 0 EDITOR_WRAP editor1, n END_SUB
SUB affichage_numlines DIM n% fontsize = GET_POSITION(tbSize) IF CHECKED(btLine)=1 THEN n = LNUM_WIDTH ELSE n = 0 FONT_TEXT editor1, font, fontsize EDITOR_NUMLINES editor1, n, font, fontsize REDRAW END_SUB
SUB choix_parametres SHOW fmParametres END_SUB
SUB changer_taille_police fontsize = GET_POSITION(tbSize) FONT_TEXT editor1, font, fontsize EDITOR_NUMLINES editor1, LNUM_WIDTH, font, fontsize REDRAW END_SUB
SUB changer_police DIM f$ f = LIST_ITEM_READ(lsPolice, LIST_ITEM_INDEX(lsPolice)) f = MID(f, INSTR(f, ".") + 1) font = NUM_FONT(f) FONT_TEXT editor1, font, fontsize EDITOR_NUMLINES editor1, LNUM_WIDTH, font, fontsize REDRAW END_SUB
SUB changer_couleur DIM r%, g%, b% color_chooser_get_rgb CoulChoix, r, g, b IF checked(rdColFond)=1 THEN TEXT edResult, "Fond" : COLOR_RGB edResult, r, g, b IF checked(rdColText)=1 THEN TEXT edResult, "Texte" : COLOR_TEXT_RGB edResult, r, g, b IF checked(rdColNomb)=1 THEN TEXT edResult, "Nombre" : COLOR_TEXT_RGB edResult, r, g, b IF checked(rdColCom)=1 THEN TEXT edResult, "Commentaires" : COLOR_TEXT_RGB edResult, r, g, b IF checked(rdColMC)=1 THEN TEXT edResult, "Mots clés" : COLOR_TEXT_RGB edResult, r, g, b IF checked(rdColPp)=1 THEN TEXT edResult, "Préprocesseur" : COLOR_TEXT_RGB edResult, r, g, b IF checked(rdColAutr)=1 THEN TEXT edResult, "Autre" : COLOR_TEXT_RGB edResult, r, g, b END_SUB
SUB cacher_parametres HIDE fmParametres END_SUB
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 13 Oct 2019 - 4:04 | |
| Une petite suggestion à Jean, Mes connaissances sont trop limités pour aider dans le code mais je peux faire des suggestions sur le sujet. Pour pouvoir différencier un source FBPano d'un source Panoramic, il serait peut être intéressant que les fichiers sources aient des extensions différentes. Ceci n'est pas une suggestion gratuite pour em....der, cela permetrait de pouvoir identifier le langage d'un fichier en ouverture et donc de charger automatiquement la coloration syntaxique et les mots clefs appropriés. Voilà, j'ai compris, je sors... | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Dim 13 Oct 2019 - 8:16 | |
| Il faut garder l'extension .BAS par défaut pour que TOUS les éditeurs (FBIde, Geany, Synedit editor etc.) puissent reconnaître les fichiers.
Bien sûr l'utilisateur est libre de renommer ses fichiers comme il l'entend.
Le problème concerne surtout les fichiers à inclure : on peut nommer en .INC, .BAS, .BI etc. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Dim 13 Oct 2019 - 8:17 | |
| Ben c'est tous les 2 des fichiers Basic ! Mais rien n’empêche dans le fichier sauvegarde de mettre une sorte de ligne cachée avec une information correspondante ou plus subtile faire une analyse du code d'après les mots clés propre à chaque langage pour déterminer lequel est chargé. En fait une sorte de reconnaissance intelligente du code. A voir pour la suite... Yannick as tu regardé le code que j'ai mis dans mon dernier message ? J'attends l'intervention de Jean pour la coloration syntaxique. Edit : Bonjour Jean, on s'est croisé ! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Dim 13 Oct 2019 - 13:30 | |
| Je continu ma petite découverte et évolution dans FBPano avec l'éditeur... j'ai intégré un premier niveau d’intelligence pour reconnaître le type de code. Lorsque l'on ouvre un fichier, l'éditeur confirme s'il s'agit d'un code FBPano ou Panoramic. Je le ferai évoluer par la suite... Jean si tu passes par ici pourrai tu m'expliquer plus en détail comment ajouter la couleur syntaxique. Car je m'y perd un peu... Ci-joint la dernière version de l'éditeur : - Spoiler:
- Code:
-
' ********************************************************************** ' Editeur FBPano, d'apres le programme de demonstration de FLTK : www.fltk.org/doc-1.3/editor.html ' Modification par MiNiBuG ' 13.10.2019 - 13h30 ' **********************************************************************
#compile -gui
CONST FORM_WIDTH = 750 ' Largeur de la fenetre principale CONST FORM_HEIGHT = 500 ' Hauteur de la fenetre principale CONST LNUM_WIDTH = 60 ' Largeur de la marge pour num. lignes
DIM search$ ' Chaine pour la recherche DIM find$, rep$ ' Chaines pour le remplacement DIM nf% ' Nb de polices DIM fontnum%() ' Numéros des polices DIM fontname$() ' Noms des polices DIM fontsize% : fontsize = 16 ' Taille de la police DIM font% = FL_COURIER ' Police selectionnee DIM i% ' Variable de boucle DIM keywords$ ' Liste des mots_cles
ENUM GUI fmMain ' Form principale menu1, editor1, buffer1 fmReplace ' Form rechercher/remplacer edFind, edReplace, btRepAll, btRepNext, btCancel fmParametres ' Form paramètres lsPolice, tbSize, btFermerParam, btWrap, btLine ctCouleur ' Container couleurs rdColFond, rdColText, rdColNomb, rdColCom, rdColMC, rdColPp, rdColAutr CoulChoix, edResult END_ENUM
FORM fmMain, 15, 35, FORM_WIDTH, FORM_HEIGHT, "Editeur" FORM_BEGIN fmMain MENU menu1, 0, 0, FORM_WIDTH, 25 TEXT_EDITOR editor1, 0, 25, FORM_WIDTH, FORM_HEIGHT - 25 TEXT_BUFFER buffer1 FORM_END fmMain
FORM fmReplace, 200, 200, 380, 110, "Remplacement" FORM_BEGIN fmReplace EDIT edFind, 110, 10, 260, 25, "Chercher :" EDIT edReplace, 110, 40, 260, 25, "Remplacer par :" BUTTON btRepAll, 10, 75, 110, 25, "Remplacer tout" BUTTON btRepNext, 130, 75, 170, 25, "Remplacer Suivant", , T_Button_Return BUTTON btCancel, 310, 75, 60, 25, "Fermer" FORM_END fmReplace
FORM fmParametres, 200, 200, 380, 420, "Liste des polices" FORM_BEGIN fmParametres LIST lsPolice, 5, 5, 180, 375 nf = FONT_LIST(fontnum(), fontname()) FOR i = 0 TO nf - 1 LIST_ITEM_ADD lsPolice, "@S12@F" & "@." & fontname(i) NEXT i LIST_ITEM_SELECT lsPolice, 1
TRACK_BAR tbSize, 225, 5, 150, 25, "Taille", FL_ALIGN_LEFT, T_Track_Val FONT_TEXT tbSize, font, 16 POSITION_RANGE tbSize, 8, 30, 1 POSITION tbSize, fontsize BUTTON btWrap, 190, 35, 185, 30, "Retour à la ligne", , T_Button_Light BUTTON btLine, 190, 65, 185, 30, "Affichage lignes", , T_Button_Light MARK_ON btLine
CONTAINER ctCouleur, 190, 100, 185, 280, "", , T_Container CONTAINER_BEGIN ctCouleur RADIO rdColFond, 195, 102, 175, 30, "Fond" RADIO rdColText, 195, 122, 175, 30, "Texte" RADIO rdColNomb, 195, 142, 175, 30, "Nombres" RADIO rdColCom, 195, 162, 175, 30, "Commentaires" RADIO rdColMC, 195, 182, 175, 30, "Mots clés" RADIO rdColPp, 195, 202, 175, 30, "Préprocesseur" RADIO rdColAutr, 195, 222, 175, 30, "Autre" MARK_ON rdColFond COLOR_CHOOSER CoulChoix, 195, 247, 175, 100, , , FL_COLORCHOOSER_BYTE EDIT edResult, 195, 350, 175, 25 CONTAINER_END ctCouleur
BUTTON btFermerParam, 5, 385, 370, 30, "Fermer" FORM_END fmParametres
ON_CLICK btRepAll, remplacer_tout ON_CLICK btRepNext, remplacer_suivant ON_CLICK btCancel, annuler_remplacer ON_CLICK lsPolice, changer_police ON_CLICK btFermerParam, cacher_parametres ON_CLICK tbSize, changer_taille_police ON_CLICK btWrap, wrap ON_CLICK btLine, affichage_numlines
ON_CLICK rdColFond, changer_couleur ' Sélection de la couleur de fond ON_CLICK rdColText, changer_couleur ' Sélection de la couleur du texte ON_CLICK rdColNomb, changer_couleur ' Sélection de la couleur des nombres ON_CLICK rdColCom, changer_couleur ' Sélection de la couleur des commentaires ON_CLICK rdColMC, changer_couleur ' Sélection de la couleur des mots clés ON_CLICK rdColPp, changer_couleur ' Sélection de la couleur du préprocesseur ON_CLICK rdColAutr, changer_couleur ' Sélection de la couleur autre ON_CLICK CoulChoix, changer_couleur ' Sélection dans le Color_Chooser
MENU_ITEM_ADD menu1, "&Fichier/&Nouveau ", "Ctrl+N", , nouveau MENU_ITEM_ADD menu1, "&Fichier/&Ouvrir ", "Ctrl+O", , ouvrir MENU_ITEM_ADD menu1, "&Fichier/&Enregistrer ", "Ctrl+E", FL_MENU_DIVIDER, enregistrer MENU_ITEM_ADD menu1, "&Fichier/&Quitter ", "Ctrl+Q", , quitter
MENU_ITEM_ADD menu1, "E&dition/Co&uper ", "Ctrl+X", , couper MENU_ITEM_ADD menu1, "E&dition/&Copier ", "Ctrl+C", , copier MENU_ITEM_ADD menu1, "E&dition/Co&ller ", "Ctrl+V", , coller
MENU_ITEM_ADD menu1, "&Rechercher/&Rechercher ", "Ctrl+F", , rechercher MENU_ITEM_ADD menu1, "&Rechercher/Rechercher le &suivant ", "F3", , rechercher_suivant MENU_ITEM_ADD menu1, "&Rechercher/R&emplacer ", "Ctrl+R", , remplacer
MENU_ITEM_ADD menu1, "&Exécution/E&xécuter ", "F9", , executer
MENU_ITEM_ADD menu1, "O&ptions/&Paramètres ", "Ctrl+P", , choix_parametres
EDITOR_NUMLINES editor1, LNUM_WIDTH, font, fontsize
COLOR_NUMLINES_RGB editor1, 0, 0, 0, 255, 255, 255 ' Couleur du fond et du texte de la numérotation de l'éditeur COLOR_TEXT_RGB editor1, 0, 0, 0 ' Couleur du texte de l'éditeur COLOR_RGB editor1, 255, 255, 255 ' Couleur du fond de l'éditeur
EDITOR_SET_BUFFER editor1, buffer1
SET_RESIZABLE fmMain
START fmMain
' ---------------------------------------------------------------------- ' Sous-programmes utilitaires ' ----------------------------------------------------------------------
FUNCTION trouve% (s$, p%, msg%) ' Recherche la chaine s à partir de la position du curseur ' La position de la chaine trouvee est retournee dans p ' msg = TRUE pour afficher le message d'erreur
p = EDITOR_GET_INSERT_POS(editor1) IF BUFFER_SEARCH_FORWARD(buffer1, p, s, p) = 0 THEN IF msg THEN MESSAGE "Chaîne """ + s + """ non trouvée !" trouve = FALSE ELSE trouve = TRUE END_IF END_FUNCTION
SUB update_editor (p%, s1$, s2$, rpl%) ' Met a jour l'editeur apres recherche ou remplacement ' p = position de la chaine recherchee ' s1 = chaine recherchee ' s2 = chaine de remplacement ' rpl = indique si remplacement
DIM p1%
p1 = p + LEN(s1) BUFFER_SELECT buffer1, p, p1
IF rpl THEN BUFFER_REMOVE_SELECT buffer1 BUFFER_INSERT buffer1, p, s2 p1 = p + LEN(s2) BUFFER_SELECT buffer1, p, p1 p = p1 END_IF
EDITOR_SET_INSERT_POS editor1, p1 EDITOR_SHOW_INSERT_POS editor1 END_SUB
' ---------------------------------------------------------------------- ' Sous-programmes associes aux evenements ' ----------------------------------------------------------------------
SUB nouveau TEXT buffer1, "" CAPTION fmMain, "Editeur" END_SUB
SUB ouvrir DIM fname$, texte$, res% : res=0 fname = FILE_NAME("Ouvrir", "Fichier basic (*.bas)", CURDIR, 0) IF fname = "" OR FILE_EXISTS(fname) = 0 THEN EXIT_SUB BUFFER_FILE_LOAD buffer1, fname CAPTION fmMain, fname
texte=UCASE(GET_TEXT(buffer1)) PRINT texte IF INSTR(texte, "ENUM ")>0 THEN res=1 IF INSTR(texte, "FORM_BEGIN ")>0 THEN res=1 IF INSTR(texte, "START ")>0 THEN res=1 IF res=1 THEN charger_keyword_fbpano ELSE charger_keyword_panoramic END_IF END_SUB
SUB enregistrer DIM fname$ fname = FILE_NAME("Enregistrer", "Fichier texte (*.txt)", CURDIR, 0) IF fname = "" THEN EXIT_SUB BUFFER_FILE_SAVE buffer1, fname END_SUB
SUB quitter HIDE fmMain END_SUB
SUB couper EDITOR_CUT editor1 END_SUB
SUB copier EDITOR_COPY editor1 END_SUB
SUB coller EDITOR_PASTE editor1 END_SUB
SUB rechercher DIM p% search = MESSAGE_INPUT("Rechercher", "Rechercher", search) IF search <> "" THEN IF trouve(search, p, TRUE) THEN update_editor p, search, "", FALSE END_IF END_SUB
SUB rechercher_suivant DIM p% IF search = "" THEN search = message_input("Rechercher", "Rechercher", search) END_IF IF search <> "" THEN IF trouve(search, p, TRUE) THEN update_editor p, search, "", FALSE END_IF END_SUB
SUB remplacer SHOW fmReplace END_SUB
SUB remplacer_suivant DIM p% find = GET_TEXT(edFind) IF find = "" THEN EXIT_SUB rep = GET_TEXT(edReplace) IF trouve(find, p, TRUE) THEN update_editor p, find, rep, TRUE END_SUB
SUB remplacer_tout DIM p%, found%, n% find = GET_TEXT(edFind) IF find = "" THEN EXIT_SUB rep = GET_TEXT(edReplace) found = trouve(find, p, TRUE) IF NOT found THEN EXIT_SUB WHILE found n = n + 1 update_editor p, find, rep, TRUE found = trouve(find, p, FALSE) END_WHILE MESSAGE "Chaîne """ & find & """ remplacée " & n & " fois." END_SUB
SUB annuler_remplacer HIDE fmReplace END_SUB
SUB executer
END_SUB
SUB charger_keyword_fbpano MESSAGE "Votre programme contient une syntaxe_fbpano" END_SUB
SUB charger_keyword_panoramic MESSAGE "Votre programme contient une syntaxe_panoramic" END_SUB
SUB wrap DIM n% IF CHECKED(btWrap)=1 THEN n = 1 ELSE n = 0 EDITOR_WRAP editor1, n END_SUB
SUB affichage_numlines DIM n% fontsize = GET_POSITION(tbSize) IF CHECKED(btLine)=1 THEN n = LNUM_WIDTH ELSE n = 0 FONT_TEXT editor1, font, fontsize EDITOR_NUMLINES editor1, n, font, fontsize REDRAW END_SUB
SUB choix_parametres SHOW fmParametres END_SUB
SUB changer_taille_police fontsize = GET_POSITION(tbSize) FONT_TEXT editor1, font, fontsize EDITOR_NUMLINES editor1, LNUM_WIDTH, font, fontsize REDRAW END_SUB
SUB changer_police DIM f$ f = LIST_ITEM_READ(lsPolice, LIST_ITEM_INDEX(lsPolice)) f = MID(f, INSTR(f, ".") + 1) font = NUM_FONT(f) FONT_TEXT editor1, font, fontsize EDITOR_NUMLINES editor1, LNUM_WIDTH, font, fontsize REDRAW END_SUB
SUB changer_couleur DIM r%, g%, b% color_chooser_get_rgb CoulChoix, r, g, b IF checked(rdColFond)=1 THEN TEXT edResult, "Fond" : COLOR_RGB edResult, r, g, b IF checked(rdColText)=1 THEN TEXT edResult, "Texte" : COLOR_TEXT_RGB edResult, r, g, b IF checked(rdColNomb)=1 THEN TEXT edResult, "Nombre" : COLOR_TEXT_RGB edResult, r, g, b IF checked(rdColCom)=1 THEN TEXT edResult, "Commentaires" : COLOR_TEXT_RGB edResult, r, g, b IF checked(rdColMC)=1 THEN TEXT edResult, "Mots clés" : COLOR_TEXT_RGB edResult, r, g, b IF checked(rdColPp)=1 THEN TEXT edResult, "Préprocesseur" : COLOR_TEXT_RGB edResult, r, g, b IF checked(rdColAutr)=1 THEN TEXT edResult, "Autre" : COLOR_TEXT_RGB edResult, r, g, b END_SUB
SUB cacher_parametres HIDE fmParametres END_SUB
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 13 Oct 2019 - 13:39 | |
| Bon bin tant pis. Des fichiers *.bas il y en a à profusion : - FreeBasic - Panoramic - FBPano donc là je ne vois pas un très bon argument - Jean Debord a écrit:
- Il faut garder l'extension .BAS par défaut pour que TOUS les éditeurs (FBIde, Geany, Synedit editor etc.) puissent reconnaître les fichiers.
Aucun ne fait la différence entre les langages, il faut tous les paramétrés et encore. Perso, si je double-click sur un fichier *.bas, c'est Panoramic_Editor qui s'ouvre que ce soit n'importe quel langage. cqfd. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Dim 13 Oct 2019 - 13:48 | |
| Pourquoi t’embêter si tu ouvre tout avec le même éditeur Et c'est ton éditeur qui s'adapte. C'est simple non ? Essais de lancer mon fichier ci-dessus depuis l'éditeur FBPano de Jean... Par la suite je déposerai la version compilé (EXE) sur le Webdav. | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Dim 13 Oct 2019 - 19:04 | |
| Bonjour Minibug, Je regarde ton dernier code. En attendant voici ce qu'il faut faire pour la coloration syntaxique : 1) Definir un "style buffer" : stylebuffer1 - Code:
-
ENUM GUI fmMain ' Form principale menu1, editor1, buffer1, stylebuffer1
2) Creer l'objet stylebuffer1 et associer à l'objet buffer1 un sous-programme style_update - Code:
-
FORM fmMain, 15, 35, FORM_WIDTH, FORM_HEIGHT, "Editeur" FORM_BEGIN fmMain ..... TEXT_BUFFER buffer1, style_update TEXT_BUFFER stylebuffer1
3) Associer le "style buffer" à l'éditeur : - Code:
-
EDITOR_SET_BUFFER editor1, buffer1 EDITOR_SET_STYLEBUFFER editor1, stylebuffer1
4) Dans le sous-programme "changer couleur", définir les styles de la coloration syntaxique : - Code:
-
IF checked(rdColText)=1 THEN PRINT "Couleur Texte ", r, g, b add_style "T", fl_rgb(r, g, b), font, fontsize END_IF
.... etc (pareil pour les autres styles) ....
5) Ajouter le sous-programme style_update (ici celui de START_FBPANO) dans les sous-programmes associés aux événements. - Code:
-
sub style_update dim p1%, p2%, txt$, style$, last$
if fl_n_inserted = 0 and fl_n_deleted = 0 then buffer_unselect stylebuffer1 exit_sub end_if
if fl_n_inserted > 0 then style = string(fl_n_inserted, "A") buffer_replace stylebuffer1, fl_cursor_pos, fl_cursor_pos + fl_n_deleted, style else buffer_remove stylebuffer1, fl_cursor_pos, fl_cursor_pos + fl_n_deleted end_if
buffer_select stylebuffer1, fl_cursor_pos, fl_cursor_pos + fl_n_inserted - fl_n_deleted
p1 = buffer_line_start(buffer1, fl_cursor_pos) p2 = buffer_line_end(buffer1, fl_cursor_pos + fl_n_inserted - fl_n_deleted)
if p1 >= p2 then exit_sub
txt = buffer_text_range(buffer1, p1, p2) style = buffer_text_range(stylebuffer1, p1, p2) last = right(style, 1)
gen_style txt, keywords, style
buffer_replace stylebuffer1, p1, p2, style editor_redisplay_range buffer1, p1, p2 end_sub
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Dim 13 Oct 2019 - 19:12 | |
| Ok merci Jean !
Je regarde tout ça et je te tiens au courant...
Au fait as tu vu le message correspondant au bug sur MENU_ITEM_ADD_IMG ?! | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Dim 13 Oct 2019 - 19:37 | |
| Oui j'ai vu le problème.
Il faut savoir que l'ajout des icônes dans les menus n'est pas une procédure standard de FLTK. C'est une procédure spéciale ajoutée par D. J. Peters. Elle utilise le fait qu'il est possible de dessiner sur un objet FLTK, mais seulement après que celui-ci a été affiché, d'où l'instruction SHOW 0 placée avant les instructions MENU_ITEM_ADD_IMG.
Pour avoir des icônes correctes un TREEVIEW est sans doute préférable à un MENU. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Dim 13 Oct 2019 - 21:11 | |
| | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Lun 14 Oct 2019 - 9:06 | |
| - Minibug a écrit:
j'ai intégré un premier niveau d’intelligence pour reconnaître le type de code. Lorsque l'on ouvre un fichier, l'éditeur confirme s'il s'agit d'un code FBPano ou Panoramic.
Cela ne marchera pas si les mots-clés que tu testes ne figurent pas dans le code FBPano En revanche, FreeBASIC a une directive #lang pour définir le dialecte utilisé (pour nous c'est le dialecte "fb" qui est en fait l'option par défaut). Donc si tu mets ceci au début du programme FBPano : - Code:
-
#lang "fb"
Cela passera parfaitement et tu pourras tester la présence de cette ligne (il suffit de tester la présence du mot "#lang") pour identifier un code FBPano. Tu peux bien sûr programmer ton éditeur pour qu'il ajoute automatiquement la ligne lors de la sauvegarde. | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Lun 14 Oct 2019 - 10:12 | |
| - Minibug a écrit:
Par la suite je déposerai la version compilé (EXE) sur le Webdav. Il faudra aussi penser à fournir les 2 DLLs requises (pour ceux qui n'auront pas installé FBPano) Elles sont sur mon WebDav, dossier FBPano, fichier fbpano_dlls.zip | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Lun 14 Oct 2019 - 10:55 | |
| Merci pour ces infos complémentaires Jean ! Pour MENU_ITEM_ADD_IMG c'est dommage car dans l'état actuel c'est inutilisable puisque l'on ne peut pas appeler le sous-programme ! Mais c'est vrai qu'avec les exemples du TREEVIEW on peut faire des choses très sympas... | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Lun 14 Oct 2019 - 11:09 | |
| - Minibug a écrit:
Pour MENU_ITEM_ADD_IMG c'est dommage car dans l'état actuel c'est inutilisable puisque l'on ne peut pas appeler le sous-programme !
Oui quand j'avais mis cette instruction je n'avais pas encore introduit le TREEVIEW. Je crois que je vais la supprimer dans l'évolution de FBPano. Bien sûr il sera toujours possible de dessiner sur un objet avec les instructions 2d_ On peut aussi faire des "menus boutons". Là les icônes ne posent pas de problème. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Lun 14 Oct 2019 - 20:17 | |
| Au fait Jean comment peut on récupérer la liste des mots clé de FBPano ? A moins qu'il existe déjà une liste quelque pars dans le dossier... | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Mar 15 Oct 2019 - 9:16 | |
| La liste des mots-clés se trouve dans le fichier help_keywords.csv qui se trouve lui-même dans le répertoire FBPano\doc
Si tu ouvres ce fichier dans un tableur, la liste des mots-clés se trouve dans la troisième colonne.
Il faut transformer cette colonne en une chaîne de caractères unique, commençant et finissant par un espace. C'est cette chaîne keywords$ qui est passée à la procédure gen_style.
Attention : les mots-clés "_2d_" commencent par un trait de soulignement car FreeBASIC ne permet pas qu'un mot-clé commence par un chiffre. Toutefois, il n'est pas indispensable de taper ce trait dans l'éditeur. La coloration syntaxique devrait fonctionner quand même.
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Mer 16 Oct 2019 - 17:32 | |
| Merci Jean je vais regarder. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Mer 16 Oct 2019 - 22:33 | |
| Bonsoir Jean et bonsoir à tous ! Je viens de mettre la dernière avancé de Editor_FBPano sur mes Webdav. Jean si tu peux regardé, je n'ai pas la coloration syntaxique des mots clés. Je pense que c'est un problème de rafraîchissement mais là je ne vois pas... Pour le reste ça a l'air de fonctionner. J'ai aussi un problème avec la taille et la police qui ne se changent plus. La numérotation a gauche elle fonctionne et change de police et taille correctement. Il y a peut être un peu d'ordre a faire dans le code car pour le moment je fais comme ça vient... Je découvre au fur et à mesure. Une chose est certaine, développer sur un éditeur qui le plante pas c'est drôlement agréable ! Bon voila pour ce soir. Bonne soirée à tous ! | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Jeu 17 Oct 2019 - 9:17 | |
| J'ai téléchargé. Je vais voir ce qui ne va pas.
J'ai aussi téléchargé "Walking Mario" car c'est le genre de programme qui serait intéressant à adapter pour FBCroco quand il aura un peu évolué.
EDIT : Pour le rafraichissement, penser à faire REDRAW ! | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Jeu 17 Oct 2019 - 11:16 | |
| J'ai identifié deux (mini)bugs :
1. Le style "S" (pour les symboles) n'est pas défini
2. La liste des mots-clés (keywords$) doit être lue avant l'affichage de la fenêtre
Il reste encore quelques ajustements à faire.
| |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... Ven 18 Oct 2019 - 9:38 | |
| Bonjour Minibug, Voici une version modifiée : - ligne 12 : un seul type suffit puisqu'ils ont tous les mêmes champs - ligne 28 : forme simplifiée pour l'initialisation (ne marche qu'avec les variables numériques) - ligne 29 : suppression de l'initialisation de font : elle le sera en même temps que le LIST (lignes 70-71). J'ai pris "Courier New" comme police par défaut. - ligne 156 : lecture des mots-clés à ce niveau (il faudra choisir une syntaxe par défaut) - ligne 157 : appel d'un sous-programme pour définir les styles : en effet il faut les redéfinir chaque fois qu'on change la couleur, la police ou la taille du texte - lignes 203-212 : définition du programme changer_styles (pour le style "S" j'ai pris le même que "A" mais il faudra sans doute changer...) - lignes 360 et 370 : changer les styles quand on a changé la police ou sa taille ! - dans le SUB choix_couleurs : appel du sous-programme changer_styles après chaque modification de couleurs ATTENTION : FLTK est assez exigeant en ce qui concerne la coloration syntaxique : certaines combinaisons de couleurs peuvent ne pas être acceptées ! Je conseille de mettre un fond plutôt pâle (le blanc est l'idéal) - Code:
-
' ********************************************************************** ' Editeur FBPano, d'apres le programme de demonstration de FLTK : www.fltk.org/doc-1.3/editor.html ' Modification par MiNiBuG ' **********************************************************************
#compile -gui
CONST FORM_WIDTH = 750 ' Largeur de la fenetre principale CONST FORM_HEIGHT = 500 ' Hauteur de la fenetre principale CONST LNUM_WIDTH = 60 ' Largeur de la marge pour num. lignes
TYPE RGBCoul = (R%, G%, B%) ' Choix des Couleurs RGB
DIM Coul<RGBCoul> ' Choix des Couleurs RGB DIM Fond<RGBCoul> ' Couleur fond RGB DIM Lin<RGBCoul> ' Couleur texte lignes RGB DIM Nbr<RGBCoul> ' Couleur nombres RGB DIM Com<RGBCoul> ' Couleur commentaire RGB DIM Mc<RGBCoul> ' Couleur mots clés RGB DIM Pp<RGBCoul> ' Couleur Préprocesseur RGB DIM Autr<RGBCoul> ' Couleur autre RGB
DIM search$ ' Chaine pour la recherche DIM find$, rep$ ' Chaines pour le remplacement DIM nf% ' Nb de polices DIM fontnum%() ' Numéros des polices DIM fontname$() ' Noms des polices DIM fontsize% = 16 ' Taille de la police DIM font% ' Police selectionnee DIM i% ' Variable de boucle DIM keywords$ ' Liste des mots_cles
ENUM GUI fmMain ' Form principale menu1, editor1, buffer1, stylebuffer1 fmReplace ' Form rechercher/remplacer edFind, edReplace, btRepAll, btRepNext, btCancel fmParametres ' Form paramètres lsPolice, tbSize, btFermerParam, btWrap, btLin ctCouleur ' Container couleurs rdFond, rdText, rdNomb, rdCom, rdMc, rdPp, rdAutr CoulChoix, edResult END_ENUM
FORM fmMain, 15, 35, FORM_WIDTH, FORM_HEIGHT, "Editeur" FORM_BEGIN fmMain MENU menu1, 0, 0, FORM_WIDTH, 25 TEXT_EDITOR editor1, 0, 25, FORM_WIDTH, FORM_HEIGHT - 25 TEXT_BUFFER buffer1, style_update TEXT_BUFFER stylebuffer1 FORM_END fmMain
FORM fmReplace, 200, 200, 380, 110, "Remplacement" FORM_BEGIN fmReplace EDIT edFind, 110, 10, 260, 25, "Chercher :" EDIT edReplace, 110, 40, 260, 25, "Remplacer par :" BUTTON btRepAll, 10, 75, 110, 25, "Remplacer tout" BUTTON btRepNext, 130, 75, 170, 25, "Remplacer Suivant", , T_Button_Return BUTTON btCancel, 310, 75, 60, 25, "Fermer" FORM_END fmReplace
FORM fmParametres, 200, 200, 380, 420, "Liste des polices" FORM_BEGIN fmParametres LIST lsPolice, 5, 5, 180, 375 nf = FONT_LIST(fontnum(), fontname()) FOR i = 0 TO nf - 1 LIST_ITEM_ADD lsPolice, "@S12@F" & "@." & fontname(i) IF fontname(i) = "Courier New" THEN LIST_ITEM_SELECT lsPolice, i + 1 font = fontnum(i) END_IF NEXT i
TRACK_BAR tbSize, 225, 5, 150, 25, "Taille", FL_ALIGN_LEFT, T_Track_Val FONT_TEXT tbSize, font, 16 POSITION_RANGE tbSize, 8, 30, 1 POSITION tbSize, fontsize BUTTON btWrap, 190, 35, 185, 30, "Retour à la ligne", , T_Button_Light BUTTON btLin, 190, 65, 185, 30, "Affichage lignes", , T_Button_Light MARK_ON btLin
CONTAINER ctCouleur, 190, 100, 185, 280, "", , T_Container CONTAINER_BEGIN ctCouleur RADIO rdFond, 195, 102, 175, 30, "Fond" RADIO rdText, 195, 122, 175, 30, "Chaines texte" RADIO rdNomb, 195, 142, 175, 30, "Nombres" RADIO rdCom, 195, 162, 175, 30, "Commentaires" RADIO rdMc, 195, 182, 175, 30, "Mots clés" RADIO rdPp, 195, 202, 175, 30, "Préprocesseur" RADIO rdAutr, 195, 222, 175, 30, "Autre" MARK_ON rdFond COLOR_CHOOSER CoulChoix, 195, 247, 175, 100, , , FL_COLORCHOOSER_BYTE EDIT edResult, 195, 350, 175, 25 CONTAINER_END ctCouleur
BUTTON btFermerParam, 5, 385, 370, 30, "Fermer" FORM_END fmParametres
ON_CLICK btRepAll, remplacer_tout ON_CLICK btRepNext, remplacer_suivant ON_CLICK btCancel, annuler_remplacer ON_CLICK lsPolice, changer_police ON_CLICK btFermerParam, cacher_parametres ON_CLICK tbSize, changer_taille_police ON_CLICK btWrap, wrap ON_CLICK btLin, affichage_numLines
ON_CLICK CoulChoix, choix_couleur ' Sélection dans le Color_Chooser
ON_CLICK rdFond, changer_couleur_fond ' Sélection de la couleur de fond ON_CLICK rdText, changer_couleur_text ' Sélection de la couleur du texte ON_CLICK rdNomb, changer_couleur_nomb ' Sélection de la couleur des nombres ON_CLICK rdCom, changer_couleur_com ' Sélection de la couleur des commentaires ON_CLICK rdMc, changer_couleur_mc ' Sélection de la couleur des mots clés ON_CLICK rdPp, changer_couleur_pp ' Sélection de la couleur du préprocesseur ON_CLICK rdAutr, changer_couleur_autr ' Sélection de la couleur autre
MENU_ITEM_ADD menu1, "&Fichier/&Nouveau ", "Ctrl+N", , nouveau MENU_ITEM_ADD menu1, "&Fichier/&Ouvrir ", "Ctrl+O", , ouvrir MENU_ITEM_ADD menu1, "&Fichier/&Enregistrer ", "Ctrl+E", FL_MENU_DIVIDER, enregistrer MENU_ITEM_ADD menu1, "&Fichier/&Quitter ", "Ctrl+Q", , quitter
MENU_ITEM_ADD menu1, "E&dition/Co&uper ", "Ctrl+X", , couper MENU_ITEM_ADD menu1, "E&dition/&Copier ", "Ctrl+C", , copier MENU_ITEM_ADD menu1, "E&dition/Co&ller ", "Ctrl+V", , coller
MENU_ITEM_ADD menu1, "&Rechercher/&Rechercher ", "Ctrl+F", , rechercher MENU_ITEM_ADD menu1, "&Rechercher/Rechercher le &suivant ", "F3", , rechercher_suivant MENU_ITEM_ADD menu1, "&Rechercher/R&emplacer ", "Ctrl+R", , remplacer
MENU_ITEM_ADD menu1, "&Exécution/E&xécuter ", "F9", , executer
MENU_ITEM_ADD menu1, "O&ptions/&Paramètres ", "Ctrl+P", , choix_parametres
FORM_MINSIZE fmMain, 500, 300 ' Limitation de la taille minimum d'affichage SET_RESIZABLE fmMain, editor1 ' Taille modifiable uniquement pour l'éditeur
EDITOR_NUMLINES editor1, LNUM_WIDTH, font, fontsize
EDITOR_SET_BUFFER editor1, buffer1 EDITOR_SET_STYLEBUFFER editor1, stylebuffer1
IF FILE_EXISTS(exepath()+"\ini\coulsynt.ini")=TRUE THEN FILE_OPEN_READ(1, exepath()+"\ini\coulsynt.ini") FILE_READ_CSV 1, Fond.R, Fond.G, Fond.B : FILE_READ_CSV 1, Lin.R, Lin.G, Lin.B FILE_READ_CSV 1, Nbr.R, Nbr.G, Nbr.B FILE_READ_CSV 1, Com.R, Com.G, Com.B FILE_READ_CSV 1, Mc.R, Mc.G, Mc.B FILE_READ_CSV 1, Pp.R, Pp.G, Pp.B FILE_READ_CSV 1, Autr.R, Autr.G, Autr.B FILE_CLOSE(1) COLOR_NUMLINES_RGB editor1, Lin.R, Lin.G, Lin.B, Fond.R, Fond.G, Fond.B COLOR_RGB editor1,Fond.R, Fond.G, Fond.B END_IF
charger_keyword_fbpano changer_styles
START fmMain
' ---------------------------------------------------------------------- ' Sous-programmes utilitaires ' ----------------------------------------------------------------------
FUNCTION trouve% (s$, p%, msg%) ' Recherche la chaine s à partir de la position du curseur ' La position de la chaine trouvee est retournee dans p ' msg = TRUE pour afficher le message d'erreur
p = EDITOR_GET_INSERT_POS(editor1) IF BUFFER_SEARCH_FORWARD(buffer1, p, s, p) = 0 THEN IF msg THEN MESSAGE "Chaîne """ + s + """ non trouvée !" trouve = FALSE ELSE trouve = TRUE END_IF END_FUNCTION
SUB update_editor (p%, s1$, s2$, rpl%) ' Met a jour l'editeur apres recherche ou remplacement ' p = position de la chaine recherchee ' s1 = chaine recherchee ' s2 = chaine de remplacement ' rpl = indique si remplacement
DIM p1%
p1 = p + LEN(s1) BUFFER_SELECT buffer1, p, p1
IF rpl THEN BUFFER_REMOVE_SELECT buffer1 BUFFER_INSERT buffer1, p, s2 p1 = p + LEN(s2) BUFFER_SELECT buffer1, p, p1 p = p1 END_IF
EDITOR_SET_INSERT_POS editor1, p1 EDITOR_SHOW_INSERT_POS editor1 END_SUB
SUB changer_styles ADD_STYLE "T", FL_RGB(Lin.R, Lin.G, Lin.B), font, fontsize ADD_STYLE "N", FL_RGB(Nbr.R, Nbr.G, Nbr.B), font, fontsize ADD_STYLE "C", FL_RGB(Com.R, Com.G, Com.B), font, fontsize ADD_STYLE "M", FL_RGB(Mc.R, Mc.G, Mc.B), font, fontsize ADD_STYLE "P", FL_RGB(Pp.R, Pp.G, Pp.B), font, fontsize ADD_STYLE "A", FL_RGB(Autr.R, Autr.G, Autr.B), font, fontsize ADD_STYLE "S", FL_RGB(Autr.R, Autr.G, Autr.B), font, fontsize REDRAW END_SUB ' ---------------------------------------------------------------------- ' Sous-programmes associes aux evenements ' ----------------------------------------------------------------------
SUB nouveau TEXT buffer1, "" CAPTION fmMain, "Editeur" END_SUB
SUB ouvrir DIM fname$, texte$, res% : res=0 fname = FILE_NAME("Ouvrir", "Fichier basic (*.bas)", CURDIR, 0) IF fname = "" OR FILE_EXISTS(fname) = 0 THEN EXIT_SUB BUFFER_FILE_LOAD buffer1, fname CAPTION fmMain, fname
texte=UCASE(GET_TEXT(buffer1)) IF INSTR(texte, "ENUM ")>0 THEN res=1 IF INSTR(texte, "FORM_BEGIN ")>0 THEN res=1 ' IF INSTR(texte, "START ")>0 THEN res=1 IF res=1 THEN charger_keyword_fbpano ELSE charger_keyword_panoramic END_IF REDRAW END_SUB
SUB enregistrer DIM fname$ fname = FILE_NAME("Enregistrer", "Fichier texte (*.txt)", CURDIR, 0) IF fname = "" THEN EXIT_SUB BUFFER_FILE_SAVE buffer1, fname END_SUB
SUB quitter HIDE fmMain END_SUB
SUB couper EDITOR_CUT editor1 END_SUB
SUB copier EDITOR_COPY editor1 END_SUB
SUB coller EDITOR_PASTE editor1 END_SUB
SUB rechercher DIM p% search = MESSAGE_INPUT("Rechercher", "Rechercher", search) IF search <> "" THEN IF trouve(search, p, TRUE) THEN update_editor p, search, "", FALSE END_IF END_SUB
SUB rechercher_suivant DIM p% IF search = "" THEN search = message_input("Rechercher", "Rechercher", search) END_IF IF search <> "" THEN IF trouve(search, p, TRUE) THEN update_editor p, search, "", FALSE END_IF END_SUB
SUB remplacer SHOW fmReplace END_SUB
SUB remplacer_suivant DIM p% find = GET_TEXT(edFind) IF find = "" THEN EXIT_SUB rep = GET_TEXT(edReplace) IF trouve(find, p, TRUE) THEN update_editor p, find, rep, TRUE END_SUB
SUB remplacer_tout DIM p%, found%, n% find = GET_TEXT(edFind) IF find = "" THEN EXIT_SUB rep = GET_TEXT(edReplace) found = trouve(find, p, TRUE) IF NOT found THEN EXIT_SUB WHILE found n = n + 1 update_editor p, find, rep, TRUE found = trouve(find, p, FALSE) END_WHILE MESSAGE "Chaîne """ & find & """ remplacée " & n & " fois." END_SUB
SUB annuler_remplacer HIDE fmReplace END_SUB
SUB executer
END_SUB
SUB charger_keyword_fbpano FILE_OPEN_READ(1, exepath()+"\ini\mcfbpano.ini") FILE_READLN 1,keywords FILE_CLOSE(1) MESSAGE "Votre programme contient une syntaxe_fbpano" END_SUB
SUB charger_keyword_panoramic FILE_OPEN_READ(1, exepath()+"\ini\mcpano.ini") FILE_READLN 1,keywords FILE_CLOSE(1) MESSAGE "Votre programme contient une syntaxe_panoramic" END_SUB
SUB wrap DIM n% IF CHECKED(btWrap)=1 THEN n = 1 ELSE n = 0 EDITOR_WRAP editor1, n END_SUB
SUB affichage_numLines DIM n% fontsize = GET_POSITION(tbSize) IF CHECKED(btLin)=1 THEN n = LNUM_WIDTH ELSE n = 0 FONT_TEXT editor1, font, fontsize EDITOR_NUMLINES editor1, n, font, fontsize REDRAW END_SUB
SUB choix_parametres SHOW fmParametres END_SUB
SUB cacher_parametres HIDE fmParametres END_SUB
SUB changer_taille_police fontsize = GET_POSITION(tbSize) FONT_TEXT editor1, font, fontsize EDITOR_NUMLINES editor1, LNUM_WIDTH, font, fontsize changer_styles END_SUB
SUB changer_police DIM f$ f = LIST_ITEM_READ(lsPolice, LIST_ITEM_INDEX(lsPolice)) f = MID(f, INSTR(f, ".") + 1) font = NUM_FONT(f) EDITOR_NUMLINES editor1, LNUM_WIDTH, font, fontsize FONT_TEXT editor1, font, fontsize changer_styles END_SUB
SUB choix_couleur COLOR_CHOOSER_GET_RGB CoulChoix, Coul.R, Coul.G, Coul.B
IF CHECKED(rdFond)=1 THEN TEXT edResult, "Fond" : COLOR_RGB edResult, Coul.R, Coul.G, Coul.B Fond.R = Coul.R : Fond.G = Coul.G : Fond.B = Coul.B COLOR_NUMLINES_RGB editor1, Lin.R, Lin.G, Lin.B, Fond.R, Fond.G, Fond.B ' Couleur fond et texte des lignes de l'éditeur COLOR_RGB editor1,Fond.R, Fond.G, Fond.B ' Couleur fond de l'éditeur REDRAW END_IF IF CHECKED(rdText)=1 THEN TEXT edResult, "Texte" : COLOR_TEXT_RGB edResult, Coul.R, Coul.G, Coul.B Lin.R = Coul.R : Lin.G = Coul.G : Lin.B = Coul.B COLOR_NUMLINES_RGB editor1, Lin.R, Lin.G, Lin.B, Fond.R, Fond.G, Fond.B ' Couleur texte des lignes de l'éditeur changer_styles END_IF IF CHECKED(rdNomb)=1 THEN TEXT edResult, "Nombre" : COLOR_TEXT_RGB edResult, Coul.R, Coul.G, Coul.B Nbr.R = Coul.R : Nbr.G = Coul.G : Nbr.B = Coul.B changer_styles END_IF IF CHECKED(rdCom)=1 THEN TEXT edResult, "Commentaires" : COLOR_TEXT_RGB edResult, Coul.R, Coul.G, Coul.B Com.R = Coul.R : Com.G = Coul.G : Com.B = Coul.B changer_styles END_IF IF CHECKED(rdMc)=1 THEN TEXT edResult, "Mots clés" : COLOR_TEXT_RGB edResult, Coul.R, Coul.G, Coul.B Mc.R = Coul.R : Mc.G = Coul.G : Mc.B = Coul.B changer_styles END_IF IF CHECKED(rdPp)=1 THEN TEXT edResult, "Préprocesseur" : COLOR_TEXT_RGB edResult, Coul.R, Coul.G,Coul.B Pp.R = Coul.R : Pp.G = Coul.G : Pp.B = Coul.B changer_styles END_IF IF CHECKED(rdAutr)=1 THEN TEXT edResult, "Autre" : COLOR_TEXT_RGB edResult, Coul.R, Coul.G,Coul.B Autr.R = Coul.R : Autr.G = Coul.G : Autr.B = Coul.B changer_styles END_IF FILE_OPEN_WRITE(1, exepath()+"\ini\coulsynt.ini") FILE_WRITE_CSV 1, Fond.R, Fond.G, Fond.B FILE_WRITE_CSV 1, Lin.R, Lin.G, Lin.B FILE_WRITE_CSV 1, Nbr.R, Nbr.G, Nbr.B FILE_WRITE_CSV 1, Com.R, Com.G, Com.B FILE_WRITE_CSV 1, Mc.R, Mc.G, Mc.B FILE_WRITE_CSV 1, Pp.R, Pp.G, Pp.B FILE_WRITE_CSV 1, Autr.R, Autr.G, Autr.B FILE_CLOSE(1) END_SUB
SUB changer_couleur_fond COLOR_CHOOSER_SET_RGB CoulChoix, Fond.R, Fond.G, Fond.B END_SUB
SUB changer_couleur_text COLOR_CHOOSER_SET_RGB CoulChoix, Lin.R, Lin.G, Lin.B END_SUB
SUB changer_couleur_nomb COLOR_CHOOSER_SET_RGB CoulChoix, Nbr.R, Nbr.G, Nbr.B END_SUB
SUB changer_couleur_com COLOR_CHOOSER_SET_RGB CoulChoix, Com.R, Com.G, Com.B END_SUB
SUB changer_couleur_mc COLOR_CHOOSER_SET_RGB CoulChoix, Mc.R, Mc.G, Mc.B END_SUB
SUB changer_couleur_pp COLOR_CHOOSER_SET_RGB CoulChoix, Pp.R, Pp.G, Pp.B END_SUB
SUB changer_couleur_autr COLOR_CHOOSER_SET_RGB CoulChoix, Autr.R, Autr.G, Autr.B END_SUB
SUB style_update DIM p1%, p2%, txt$, style$, last$
IF fl_n_inserted = 0 AND fl_n_deleted = 0 THEN BUFFER_UNSELECT stylebuffer1 EXIT_SUB END_IF
IF fl_n_inserted > 0 THEN style = STRING(fl_n_inserted, "A") BUFFER_REPLACE stylebuffer1, fl_cursor_pos, fl_cursor_pos + fl_n_deleted, style else BUFFER_REMOVE stylebuffer1, fl_cursor_pos, fl_cursor_pos + fl_n_deleted END_IF
BUFFER_SELECT stylebuffer1, fl_cursor_pos, fl_cursor_pos + fl_n_inserted - fl_n_deleted
p1 = BUFFER_LINE_START(buffer1, fl_cursor_pos) p2 = BUFFER_LINE_END(buffer1, fl_cursor_pos + fl_n_inserted - fl_n_deleted)
IF p1 >= p2 THEN EXIT_SUB
txt = BUFFER_TEXT_RANGE(buffer1, p1, p2) style = BUFFER_TEXT_RANGE(stylebuffer1, p1, p2) last = RIGHT(style, 1)
GEN_STYLE txt, keywords, style
BUFFER_REPLACE stylebuffer1, p1, p2, style EDITOR_REDISPLAY_RANGE buffer1, p1, p2 END_SUB
| |
| | | Contenu sponsorisé
| Sujet: Re: Un éditeur MultiPlatforme Panoramic, FBpano, etc... | |
| |
| | | | Un éditeur MultiPlatforme Panoramic, FBpano, etc... | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |