JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Un petit éditeur Mer 27 Mar 2013 - 21:14 | |
| En fait j'avais besoin dans un programme Panoramic de pouvoir appeler un éditeur de texte élémentaire, avec une fenêtre de dimensions précises à un emplacement précis. Il s'agit donc d'un exécutable, dont les paramètres d'activation sont le nom du fichier à charger, les top, left, width, height de la fenêtre d'affichage. Les numéros de lignes s'affichent implicitement (c'est prévu pour des programmes sources), mais c'est désactivable dans le menu affichage. Il est également possible de redimensionner la fenêtre de l'éditeur en cours d'utilisation. - Code:
-
' *** EdiPan.bas *** éditeur simplifié pour Panoramic ' Activation avec paramètres éventuels: nom du fichier, position et dimensions ' de la fenêtre de l'éditeur, sous la forme: ' [pathfichier[ x=valeur[ y=valeur[ w=valeur[ h=valeur]]]]] ' chacun de ces paramètres étant facultatif LABEL Loadf, Ldf, Savef, Savefr, Printf, Printff, Quit, Surv, Cfnt, Numl, Copcol LABEL Chremp, Drec, Dremp, Frec, Anapar, Aide DIM x0%, y0%, w0%, h0%, i%, k%, nl%, a$, b$, f$, s$, sr$, nr%, ftm$, fnt$, sz% DIM nml%, wnl%, va%, timr%, mg%, mh%
ftm$ = "C:\TEMP\Tmp.txt" fnt$ = "Bitstream Vera Sans Mono" sz% = 10 nml% = 1: ' affichage implicite des numéros de lignes wnl% = 4: ' taille des numéros de lignes
x0% = 0: y0% = 0: w0% = 640: h0% = 800: f$ = "" IF PARAM_NUMBER > 0 THEN GOSUB Anapar
TOP 0,y0%: LEFT 0,x0%: WIDTH 0,w0%: HEIGHT 0,h0%: BORDER_SMALL 0 MAIN_MENU 1 SUB_MENU 2: PARENT 2,1: CAPTION 2, "Fichier" SUB_MENU 3: PARENT 3,1: CAPTION 3, "Edit" SUB_MENU 4: PARENT 4,1: CAPTION 4, "Affichage" SUB_MENU 5: PARENT 5,1: CAPTION 5, "?": ON_CLICK 5, Aide
SUB_MENU 21: PARENT 21,2: CAPTION 21,"Ouvrir ..." SUB_MENU 22: PARENT 22,2: CAPTION 22,"Enregistrer" SUB_MENU 23: PARENT 23,2: CAPTION 23,"Enregistrer sous ..." SUB_MENU 24: PARENT 24,2: CAPTION 24,"Imprimer ..." SUB_MENU 25: PARENT 25,2: CAPTION 25,"Quitter" ON_CLICK 21, Loadf: ON_CLICK 22, Savefr: ON_CLICK 23, Savef: ON_CLICK 24, Printf ON_CLICK 25, Quit
SUB_MENU 31: PARENT 31,3: CAPTION 31,"Couper" SUB_MENU 32: PARENT 32,3: CAPTION 32,"Copier" SUB_MENU 33: PARENT 33,3: CAPTION 33,"Coller" SUB_MENU 34: PARENT 34,3: CAPTION 34,"Chercher ..." SUB_MENU 35: PARENT 35,3: CAPTION 35,"Remplacer ..." FOR i% = 31 TO 33: ON_CLICK i%, Copcol: NEXT i% ON_CLICK 34, Chremp: ON_CLICK 35, Chremp
SUB_MENU 41: PARENT 41,4: CAPTION 41," Police/Taille": ON_CLICK 41, Cfnt SUB_MENU 42: PARENT 42,4: CAPTION 42,CHR$(7)+" N°s de lignes": ON_CLICK 42, Numl
MEMO 60: WIDTH 60,w0%-16: HEIGHT 60,h0%-55 COLOR 60,255,255,200 FONT_NAME 60,fnt$: FONT_SIZE 60,sz% BAR_BOTH 60
OPEN_DIALOG 197 SAVE_DIALOG 198 DLIST 199
FORM 400: TOP 400,TOP(0)+50: LEFT 400,LEFT(0)+100: WIDTH 400,205: HEIGHT 400,60 COLOR 400,180,128,80: BORDER_HIDE 400: HIDE 400 EDIT 401: PARENT 401,400: TOP 401,10: LEFT 401,5: WIDTH 401,150 TEXT 401,fnt$: ON_CLICK 401, Cfnt SPIN 402: PARENT 402,400: TOP 402,8: LEFT 402,WIDTH(401)+7: WIDTH 402,45 MIN 402,6: MAX 402,20: POSITION 402, sz% LIST 403: PARENT 403,400: TOP 403,35: LEFT 403,5: WIDTH 403,WIDTH(401) HEIGHT 403,HEIGHT(400)-40: FONT_NAMES_LOAD 403: HIDE 403 ON_CLICK 403, Cfnt BUTTON 404: PARENT 404,400: TOP 404,TOP(403): LEFT 404,LEFT(402): WIDTH 404,45 CAPTION 404,"OK": ON_CLICK 404, Cfnt
FORM 500: TOP 500,TOP(0)+50: LEFT 500,LEFT(0)+100: HEIGHT 500,140 COLOR 500,180,255,180: FONT_BOLD 500 CAPTION 500," CHERCHER / REMPLACER (casse stricte)" BORDER_SMALL 500: HIDE 500 ALPHA 501: PARENT 501,500: TOP 501,5: CAPTION 501,"Chercher:" EDIT 502: PARENT 502,500: TOP 502,5: LEFT 502,70: WIDTH 502,WIDTH(500)-100 ALPHA 503: PARENT 503,500: TOP 503,30: CAPTION 503," par:" EDIT 504: PARENT 504,500: TOP 504,30: LEFT 504,70: WIDTH 504,WIDTH(502) BUTTON 505: PARENT 505,500: TOP 505,60: LEFT 505,70: CAPTION 505,"Chercher" BUTTON 506: PARENT 506,500: TOP 506,60: LEFT 506,150: CAPTION 506,"Quitter" ON_CLICK 505, Drec: ON_CLICK 506, Frec ALPHA 507: PARENT 507,500: TOP 507,90: LEFT 507,5
FORM 600: TOP 600,TOP(0)+50: LEFT 600,LEFT(0)+30: WIDTH 600,210: HEIGHT 600,110 COLOR 600,180,255,180: BORDER_SMALL 600: FONT_BOLD 600: HIDE 600 CAPTION 600,"MISE EN PAGE D'IMPRESSION" ALPHA 605: PARENT 605,600: LEFT 605,50: CAPTION 605,"Marges en mm:" ALPHA 601: PARENT 601,600: TOP 601,20: CAPTION 601,"Gauche:" SPIN 602: PARENT 602,600: TOP 602,18: LEFT 602,50: WIDTH 602,45 MIN 602,1: MAX 602,100: POSITION 602,10 ALPHA 603: PARENT 603,600: TOP 603,TOP(601): LEFT 603,110: CAPTION 603,"Haut:" SPIN 604: PARENT 604,600: TOP 604,TOP(602): WIDTH 604,45: LEFT 604,140 MIN 604,10: MAX 604,100: POSITION 604,10 BUTTON 606: PARENT 606,600: TOP 606,50: LEFT 606,20: CAPTION 606,"Imprimer" BUTTON 607: PARENT 607,600: TOP 607,50: LEFT 607,100: CAPTION 607,"Annuler" ON_CLICK 606, Printff: ON_CLICK 607, Printff
IF f$ <> "" THEN GOSUB Ldf
timr% = 300: TIMER timr%: TIMER_INTERVAL timr%,300: ON_TIMER timr%,Surv
END ' ============================================================================== ' ////////////////////////////////////////////////////////////////////////////// SUB Tim01(v) IF v = 0 TIMER_OFF timr% ELSE TIMER_ON timr% END_IF END_SUB ' ////////////////////////////////////////////////////////////////////////////// Quit: Tim01(0) TERMINATE ' ////////////////////////////////////////////////////////////////////////////// Loadf: a$ = FILE_NAME$(197): IF LEN(a$) < 4 THEN RETURN f$ = a$ Tim01(0) GOSUB Ldf Tim01(1) RETURN ' ////////////////////////////////////////////////////////////////////////////// Ldf: FILE_LOAD 199,f$ FILE_OPEN_WRITE 1, ftm$ FOR i% = 1 TO COUNT(199) a$ = ITEM_READ$(199, i%) a$ = RIGHT$(" "+STR$(i%),wnl%)+" "+a$ FILE_WRITELN 1, a$ NEXT i% FILE_CLOSE 1: FILE_LOAD 60, ftm$ CAPTION 0, f$ + " ( "+STR$(i%-1)+" lignes.)" RETURN ' ////////////////////////////////////////////////////////////////////////////// Savef: a$ = FILE_NAME$(198): IF LEN(a$) < 4 THEN RETURN f$ = a$ Savefr: Tim01(0) IF COUNT(60) > 0 FILE_OPEN_WRITE 1, f$ FOR i% = 1 TO COUNT(60) a$ = ITEM_READ$(60, i%) IF nml% = 1 THEN a$ = MID$(a$, wnl%+2, 1000) FILE_WRITELN 1, a$ NEXT i% FILE_CLOSE 1 CAPTION 0, f$ + " ( "+STR$(i%-1)+" lignes.)" END_IF Tim01(1) RETURN ' ////////////////////////////////////////////////////////////////////////////// Printf: IF COUNT(60) > 0 Tim01(0) SHOW 600 END_IF RETURN ' ////////////////////////////////////////////////////////////////////////////// Printff: HIDE 600 IF NUMBER_CLICK = 606 mg% = POSITION(602)-1: mg% = .47*mg%: ' nb de caractères mh% = POSITION(604)-10: mh% = .284*mh% CLEAR 199 IF mh% > 0 FOR i% = 1 TO mh%: ITEM_ADD 199, "": NEXT i% : ' marge haut END_IF b$ = "": IF mg% > 0 THEN b$ = STRING$(mg%, " "): ' marge gauche FOR i% = 1 TO COUNT(60) a$ = ITEM_READ$(60, i%) IF nml% = 1 THEN a$ = MID$(a$, wnl%+2, 1000) ITEM_ADD 199, b$+a$ NEXT i% FILE_SAVE 199, ftm$ EXECUTE_WAIT "NOTEPAD.exe /P " + ftm$: ' Impression passante FILE_DELETE ftm$ END_iF Tim01(1) RETURN ' ////////////////////////////////////////////////////////////////////////////// Surv: IF WIDTH(0)=w0% AND HEIGHT(0)=h0% THEN RETURN w0% = WIDTH(0): h0% = HEIGHT(0) WIDTH 60,w0%-16: HEIGHT 60,h0%-60 RETURN ' ////////////////////////////////////////////////////////////////////////////// Cfnt: i% = NUMBER_CLICK SELECT i% CASE 41: SHOW 400 CASE 401: HEIGHT 400,500: HEIGHT 403,HEIGHT(400)-40: SHOW 403 CASE 403: TEXT 401, ITEM_INDEX$(403): HIDE 403: HEIGHT 400,60 CASE 404: fnt$ = TEXT$(401): sz% = POSITION(402) FONT_NAME 60,fnt$: FONT_SIZE 60,sz% HIDE 400 END_SELECT RETURN ' ////////////////////////////////////////////////////////////////////////////// Numl: Tim01(0) IF nml% = 1 IF COUNT(60) > 0 CLEAR 199 FOR i% = 1 TO COUNT(60) ITEM_ADD 199, MID$(ITEM_READ$(60,i%), wnl%+2, 1000) NEXT i% FILE_SAVE 199, ftm$: FILE_LOAD 60, ftm$: FILE_DELETE ftm$ END_IF nml% = 0 CAPTION 42," N°s de lignes" ELSE IF COUNT(60) > 0 CLEAR 199 FOR i% = 1 TO COUNT(60) ITEM_ADD 199, RIGHT$(" "+STR$(i%),wnl%)+" "+ITEM_READ$(60, i%) NEXT i% FILE_SAVE 199, ftm$: FILE_LOAD 60, ftm$: FILE_DELETE ftm$ END_IF nml% = 1 CAPTION 42,CHR$(7)+" N°s de lignes" END_IF Tim01(1) RETURN ' ////////////////////////////////////////////////////////////////////////////// Copcol: i% = NUMBER_CLICK SELECT i% CASE 31: CLIPBOARD_CUT 60: ' couper CASE 32: CLIPBOARD_COPY 60: ' copier CASE 33: CLIPBOARD_PASTE 60: ' coller END_SELECT RETURN ' ////////////////////////////////////////////////////////////////////////////// Chremp: IF COUNT(60) = 0 THEN RETURN Tim01(0) IF NUMBER_CLICK = 34 CAPTION 501,"Chercher:": CAPTION 505,"Chercher": HIDE 503: HIDE 504: k% = 0 ELSE CAPTION 501,"Remplacer:": CAPTION 505,"Remplacer": SHOW 503: SHOW 504: k% = 1 END_IF CAPTION 507, "" SHOW 500 RETURN ' ////////////////////////////////////////////////////////////////////////////// Drec: IF TEXT$(502) = "" OR COUNT(60) = 0 THEN RETURN s$ = TEXT$(502): b$ = "" IF k% = 1 THEN GOTO Dremp FOR i% = 1 TO COUNT(60) a$ = ITEM_READ$(60, i%): IF nml% = 1 THEN a$ = MID$(a$, wnl%+2, 1000) IF INSTR(a$, s$) > 0 THEN b$ = b$ + STR$(i%)+", " NEXT i% IF b$ <> "" CAPTION 507, "Trouvé lignes: " + LEFT$(b$, LEN(b$)-2) ELSE CAPTION 507, "Non trouvé !" END_IF RETURN ' ////////////////////////////////////////////////////////////////////////////// Dremp: sr$ = TEXT$(504): nr% = 0 FOR i% = 1 TO COUNT(60) a$ = ITEM_READ$(60, i%): IF nml% = 1 THEN a$ = MID$(a$, wnl%+2, 1000) k% = INSTR(a$, s$) IF k% > 0 a$ = LEFT$(a$,k%-1) + sr$ + MID$(a$, k%+LEN(s$), 1000) IF nml% = 1 THEN a$ = RIGHT$(" "+STR$(i%),wnl%)+" "+a$ ITEM_DELETE 60, i%: ITEM_INSERT 60,i%,a$ nr% = nr% + 1 END_IF NEXT i% IF nr% > 0 CAPTION 507, "Remplacé: " + STR$(nr%) + " fois." ELSE CAPTION 507, "Non trouvé !" END_IF RETURN ' ////////////////////////////////////////////////////////////////////////////// Frec: HIDE 500 Tim01(1) RETURN ' ////////////////////////////////////////////////////////////////////////////// Anapar: FOR i% = 1 TO PARAM_NUMBER b$ = PARAM_VALUE$(i%) k% = INSTR("X=Y=W=H=", UPPER$(LEFT$(b$,2))) IF k% = 0 f$ = b$ ELSE va% = VAL(MID$(b$,3,10)) SELECT k% CASE 1: x0% = va% CASE 3: y0% = va% CASE 5: w0% = va% CASE 7: h0% = va% END_SELECT END_IF NEXT i% RETURN ' ////////////////////////////////////////////////////////////////////////////// Aide: Tim01(0) MESSAGE "Éditeur simplifié !" Tim01(1) RETURN ' //////////////////////////////////////////////////////////////////////////////
L'appel est donc de la forme: - Code:
-
EXECUTE_WAIT C:\...\EdiPan.exe PathFichier x=100 y=200 w=400 h=600 Il est prévu de pouvoir l'activer sans paramètres, ou avec seulement certains paramètres. Il y a cependant un cas que je n'ai pas réussi à résoudre, c'est l'appel avec le nom du fichier à éditer seul, tous les autres cas fonctionnent: sans paramètres, fichier + paramètres de taille/position, etc. Dans le cas que je cite, j'ai systématiquement dès le lancement l'erreur: (48) Not correct expression. Line 1et je ne vois pas du tout ce qui provoque ceci, ça ne correspond à rien du tout ! Ça ne me gêne pas outre mesure, mais ça m'intrigue quand même... Edit 28/3: rectification dans le commentaire en tête du programme: les paramètres éventuels sont bien à passer dans la ligne de commande, et non pas dans le clipboard comme c'était indiqué. Ça a été le cas un moment, pour pallier l'erreur dont je parle ci-dessus, mais c'est moins pratique.
Dernière édition par JL35 le Jeu 28 Mar 2013 - 20:02, édité 1 fois | |
|