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 |
|
|
| Petit éditeur de textes | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Petit éditeur de textes Ven 11 Sep 2009 - 21:52 | |
| C'est un éditeur minimaliste, et c'est la commande MEMO qui fait tout le boulot, je n'ai fait que rajouter les gadgets autour. C'est un peu un exercice de style, ce n'est pas les éditeurs de texte qui manquent ! Remarques: - Je n'ai pas encore implémenté la présentation en hexadécimal ('Options') qui n'intéresse sûrement pas grand monde. - Ni l'impression: il n'y a pas de commande Panoramic pour imprimer, il faut faire appel à un programme externe. - Pour les polices utilisées, chacun peut faire à sa guise. Je n'ai mis le choix qu'entre deux polices, une proportionnelle (Times) et une fixe (Courier). Bug constaté: L'alarme sur 'Fichier non enregistré' se déclenche systématiquement même si on n'a pas modifié le contenu du Memo. Je teste cette modification par la commande ON_CHANGE N,ETIQ, il semble y avoir un problème avec ça. Pour la gestion de l'alarme: boîte d'alerte, j'ai utilisé les suggestions de Cosmos, merci à lui. Et voici le code (un peu long, pardonnez-moi) - Code:
-
Rem *** Minedit.bas éditeur de textes simplifié *** Label Quitter, Modi, Ficmod, New, Ouvr, Qui, clica Label DpHexa, nxf, ConvHex Label Nouveau, Ouvrir, Enreg, Enregs, Impr, Couper, Copier, Coller Label Ascii, Hexa, Times, Courier, Retour, Sizemoins, Sizeplus Label Retnou, Retouv, Retenr , Reta, Reth
Dim lf, hf, het, lb, n, f$, nfic, nedi, nvoi, nopt, nmes, modif, Anul, Typ Dim Police$, Size, hexa, fm$, fh$, fs$, cle, xf, xe, xv, xo, xm Dim gpol$, gsize, a$, b$, c$, h$, x$, ad, d, lof, i%, j%, lh%, ll%, nld% Dim bf%, b1%, b2% Dim LPrint$
modif = 0 lf = 700: hf = 800: het = 14: lb = 60 Police$ = "Times New Roman" Size = 12 hexa = 0 fm$ = "C:\Temp\Hexa.tmp" fh$ = "C:\Temp\Hexa.dat" LPrint$ = "C:\Outils\TxtPrint\TxtPrint.exe "
Top 0, 0: Left 0, 0: Width 0, lf: Height 0, hf
Main_menu 10 Rem **** création du menu principal xf = 2: Sub_Menu xf: Caption xf, "Fichier": Parent xf, 10 xe = 3: Sub_Menu xe: Caption xe, "Edition": Parent xe, 10 xv = 4: Sub_Menu xv: Caption xv, "Voir": Parent xv, 10 xo = 5: Sub_Menu xo: Caption xo, "Options": Parent xo, 10 Rem **** sous-menu Fichier xm = 21: Sub_Menu xm: Caption xm, "Nouveau": Parent xm, xf: On_Click xm, Nouveau xm=xm+1: Sub_Menu xm: Caption xm, "Ouvrir...": Parent xm, xf: On_Click xm, Ouvrir xm=xm+1: Sub_Menu xm: Caption xm, "Enregistrer": Parent xm, xf: On_Click xm, Enreg xm=xm+1: Sub_Menu xm: Caption xm, "Enregistrer sous...": Parent xm, xf: On_Click xm, Enregs xm=xm+1: Sub_Menu xm: Caption xm, "Imprimer...": Parent xm, xf: On_Click xm, Impr xm=xm+1: Sub_Menu xm: Caption xm, "Quitter": Parent xm, xf: On_Click xm, Quitter Rem **** sous-menu Edition xm = 31: Sub_Menu xm: Caption xm, "Couper": Parent xm, xe: On_Click xm, Couper xm=xm+1: Sub_Menu xm: Caption xm, "Copier": Parent xm, xe: On_Click xm, Copier xm=xm+1: Sub_Menu xm: Caption xm, "Coller": Parent xm, xe: On_Click xm, Coller Rem **** sous-menu Voir xm = 41: Sub_Menu xm: Caption xm, "Ascii": Parent xm, xv: On_Click xm, Ascii xm=xm+1: Sub_Menu xm: Caption xm, "Hexa": Parent xm, xv: On_Click xm, Hexa Rem **** sous-menu Options xm = 51: Sub_Menu xm: Caption xm, "Times New Roman": Parent xm, xo: On_Click xm, Times xm=xm+1: Sub_Menu xm: Caption xm, "Courier New": Parent xm, xo: On_Click xm, Courier xm=xm+1: Sub_Menu xm: Caption xm, "": Parent xm, xo: On_Click xm, Retour xm=xm+1: Sub_Menu xm: Caption xm, "Taille -1": Parent xm, xo: On_Click xm, Sizemoins xm=xm+1: Sub_Menu xm: Caption xm, "Taille +1": Parent xm, xo: On_Click xm, Sizeplus
Rem **** fenêtre de travail Memo 1 Top 1, het: Left 1, 2: Width 1, lf-40: Height 1, hf-het-40 Color 1, 248, 248, 255 Bar_Vertical 1 Font_Name 1, Police$: Font_Size 1, Size On_Change 1, Modi modif = 0
Open_Dialog 20
Rem **** boîte d'attente (patience...) pour l'hexa Form 40: Top 40, 100: Left 40, 100: Width 40, 200: Height 40, 80 Hide 40: Border_Hide 40: Color 40, 255, 255, 0: Font_Size 40, 14
Rem **** alarme fichier non enregistré (Form et deux boutons) bf% = 60 Form bf%: Top bf%, 100: Left bf%, 100: Width bf%, 260: Height bf%, 80 Hide bf%: Border_Hide bf% Color bf%, 255, 128, 128: Font_Size bf%, 12 b1% = bf% + 1: b2% = b1% + 1 Button b1%: Parent b1%, bf% Top b1%, 45: Left b1%, 30: Width b1%, 90: Height b1%, 25: Caption b1%, "Annuler" On_Click b1%, clica Button b2%: Parent b2%, bf% Top b2%, 45: Left b2%, 140: Width b2%, 90: Height b2%, 25: Caption b2%, "Continuer" On_Click b2%, clica
END: Rem --------------- FIN DU PROGRAMME PRINCIPAL --------------------------
Quitter: If modif = 1 Typ = 1: Gosub Ficmod: Return End_If Qui: If File_Exists(fm$) = 1 Then File_Delete fm$ If File_Exists(fh$) = 1 Then File_Delete fh$ TERMINATE
Modi: modif = 1 Return
Ficmod: Show bf% Print_Target_Is bf%: Print_Locate 20, 15: Print "FICHIER NON ENREGISTRÉ !" Return
Nouveau: If modif = 1 Typ = 2: Gosub Ficmod: Goto Retnou End_If New: Clear 1 modif = 0 Retnou: Return
Ouvrir: If modif = 1 Typ = 3: Gosub Ficmod: Goto Retouv End_If Ouvr: fs$ = File_Name$(20) If fs$ = "_" Then Goto Retouv Clear 1 f$ = fs$ File_Add 1, f$ Caption 0, f$ modif = 0 Retouv: Return
Enreg: File_Save 1, f$ modif = 0 Return
Enregs: fs$ = File_Name$(20) If fs$ = "_" Then Goto Retenr File_Save 1, fs$ f$ = fs$ Caption 0, f$ modif = 0 Retenr: Return
Impr: Rem EXECUTE LPrint$ + f$ Return
Couper: ClipBoard_Cut 1 Return
Copier: ClipBoard_Copy 1 Return
Coller: ClipBoard_Paste 1 Return
Ascii: If Hexa = 0 Then Goto Reta Hexa = 0 Rem If f$ = "" Then Goto Reta Clear 1 Font_Name 1, gpol$: Font_Size 1, gsize File_Add 1, fm$ Reta: Return
Hexa: If Hexa = 1 Then Goto Reth Hexa = 1 Show 40 : Print_Target_Is 40 Print: Print " Conversion Hexa": Print: Print " Patience svp..." File_Save 1, fm$: Rem pour avoir l'image exacte de la fenêtre (cas de modifs) Gosub DpHexa Hide 40 Clear 1 gpol$ = Police$: gsize = Size: Font_Name 1, "Courier New": Font_Size 1, 9 File_Add 1, fh$ Reth: Return
Times: Font_Name 1, "Times New Roman" Return
Courier: Font_Name 1, "Courier New" Return
Retour: Return
Sizemoins: If Size > 8 Then Size = Size - 1: Font_Size 1, Size Return
Sizeplus: Size = Size + 1: Font_Size 1, Size Return
clica: For i% = b1% to b2% If Clicked(i%) = 1 Then cle = i%-b1%+1: Rem 1: annuler, 2: confirmé Next i% Hide bf% If cle = 2 If Typ = 1 Then Goto Qui If Typ = 2 Then Goto New If Typ = 3 Then Goto Ouvr End_If Return
DpHexa: Rem dump (conversion hexadécimal) dans un fichier Ascii temporaire fh$ ll% = 16: Rem octets par ligne IF FILE_EXISTS(fh$) = 1 THEN FILE_DELETE fh$ FILEBIN_OPEN_READ 2, fm$: REM ouverture binaire du fichier image FILE_OPEN_WRITE 3, fh$ lof = FILEBIN_SIZE(2): REM taille du fichier ad = 0 Rem traitement très long pour un long fichier nld% = INT(lof/ll%): If FRAC(lof/ll%) > 0 Then nld% = nld% + 1 FOR j% = 1 TO nld% IF FILEBIN_POS(2) >= lof THEN GOTO nxf d = ad: lh% = 6: GOSUB ConvHex a$ = h$ + ": " b$ = " ": c$ = "" FOR i% = 1 TO ll% IF FILEBIN_POS(2) < lof FILEBIN_READ 2, d x$ = ".": IF d >= 32 THEN x$ = CHR$(d) b$ = b$ + x$ lh% = 2: GOSUB ConvHex c$ = c$ + h$ + " " END_IF NEXT i% IF LEN(c$) < ll%*3 THEN c$ = c$ + STRING$(3*ll% - LEN(c$), " ") FILE_WRITELN 3, a$ + c$ + b$ ad = ad + ll% NEXT j% nxf: FILEBIN_CLOSE 2 FILE_CLOSE 3 RETURN
ConvHex: Rem conversion décimal/hexa de d, résultat h$ sur lh% caractères h$="" REPEAT h$ = MID$("0123456789ABCDEF", 1+16*FRAC(d/16), 1) + h$ d = INT(d/16) UNTIL d <= 0 IF LEN(h$) < lh% THEN h$ = STRING$(lh% - LEN(h$), "0") + h$ RETURN
Dernière édition par JL35 le Dim 13 Sep 2009 - 21:47, édité 2 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Petit éditeur de textes Sam 12 Sep 2009 - 17:33 | |
| Hé bien çà foisonne les codes...
Et je ne m'en plaint pas. JL35 je n'arrive pas à me servir de VOIR ASCII ou HEXA. peus-tu m'expliquer.
A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Petit éditeur de textes Sam 12 Sep 2009 - 17:42 | |
| J'ai édité mon post ci-dessus pour mettre la dernière version du jour, avec quelques modifications cosmétiques mineures, et l'ajout de la visualisation en hexadécimal d'un fichier (Menu 'Voir'), à la demande de Cosmos. Mais je l'aurais mis de toute façon !
Cette conversion en hexa est trop longue pour un long fichier, je pense que c'est dû à la méthode Panoramic d'accès disque octet par octet pour un fichier binaire (contrairement au Basic où on peut lire bloc par bloc de taille voulue).
Je répète que tout est modifiable dans le source, les dimensions de la fenêtre, les polices utilisées, tailles etc
Jean Claude, pas de bol tu as dû charger la version juste avant que je ne mette la nouvelle. Recommence et tu auras l'hexa.
Edit: une précision, pour afficher l'hexa je fabrique un fichier temporaire où j'écris en clair toute la traduction en hexa du fichier, et j'affiche ensuite ce fichier dans le Memo. Ce fichier est chez moi C:\Temp\Hexa.dat. Il faut donc disposer d'un répertoire C:\Temp, ou changer fh$ à sa guise dans le source (ligne 16). | |
| | | Georges
Nombre de messages : 290 Age : 55 Localisation : Martinique Date d'inscription : 29/05/2009
| Sujet: re Sam 12 Sep 2009 - 19:25 | |
| je l'ai essayé, il n'est pas mauvais
georges @+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Petit éditeur de textes Sam 12 Sep 2009 - 20:27 | |
| Ce serait encore mieux s'il était bon... Mais il faut plus voir ça comme un exercice de style que comme une révolution dans le traitement de textes. | |
| | | Georges
Nombre de messages : 290 Age : 55 Localisation : Martinique Date d'inscription : 29/05/2009
| Sujet: re Sam 12 Sep 2009 - 20:41 | |
| salut
n'empêche que comme exercice de style, je le trouve pas mauvais du tout
georges @+ | |
| | | Invité Invité
| Sujet: Re: Petit éditeur de textes Dim 13 Sep 2009 - 0:39 | |
| Félicitation, tu te défends bien. Continu à nous étonner. A+ |
| | | Invité Invité
| Sujet: Re: Petit éditeur de textes Dim 13 Sep 2009 - 4:19 | |
| Je regarde de nouveau ton programme, et je sais qu'il est très long avec les accès disque, aussi tu devrais voir si au lieu d'utiliser cette méthode, tu n'aurez pas intérêt à te servir soit d'un tableau dimensionné, je pense que tu connais la syntaxe: par exemple dim a$(500) ou autre, ou alors une autre instruction que tu as utilisé: DLIST ou même provisoirement LIST que tu mettrais dans une forme supplémentaire provisoirement, qui permettrait de visualiser, ce que tu fais, le temps de la mise au point (en cliquant sur la forme suplémentaire, tu vois ta liste tel qu'elle se présente). A ce moment tu utilise la mémoire virtuelle, et là les résultats sont instantanés, normalement. Et pour sauvegarder, une simple instruction (dans le cas de list ou dlist) suffit. Dans le cas de cette solution, il ne faut pas oublier de tester count( de list), s'il n'y a rien, ou si tu retire par item_delete un élément de la liste, count() change et il y a erreur si la lecture d'un élément est absent. Pour ma part dans mon propre programme, j'ai été amené à procéder de cette façon, parce que mid$() était limité à 200, et moi j'avais des lignes de 500, même 800 caractères, j'avais dû revoir toute ma stratégie, mais ça va plus vite. Mais c'est bien pour toi. A+ |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Petit éditeur de textes Dim 13 Sep 2009 - 14:08 | |
| Merci pour tes suggestions, mais la lenteur étant uniquement dans le cas de l'affichage en hexa, et celui-ci n'étant sûrement quasiment pas utilisé, je crois que je ne vais pas trop me casser la nénette là-dessus. Et comme Panoramic parlait vaguement de pouvoir lire par blocs dans des fichiers binaires, j'attendrai... Par contre, suite aux exemples de Georges, j'ai remplacé mon système de menus par List par les main_menu et sub_menu, bien plus simples à gérer, et bien plus élégants. Je n'ai pas encore mis en ligne le source modifié. Et j'ai paramétré les numéros de menus et sous-menus, ainsi il est bien plus facile d'en intercaler de nouveaux, ou d'en supprimer, ou de changer l'ordre.
EDIT: 13/11 15h45 j'ai mis à jour le source ci-dessus. Et j'ai mis en Rem la commande d'impression, à chacun de remplacer par la commande de son choix (modifier la variable Lprint$)
Dernière édition par JL35 le Dim 13 Sep 2009 - 21:54, édité 3 fois | |
| | | Invité Invité
| Sujet: Re: Petit éditeur de textes Dim 13 Sep 2009 - 15:43 | |
| Ta raison, de même j'avais vite abandonné le menu, qui me prenait trop d'objet, alors que le nombre était limité, par COMBO, qui ne m'en prenait qu'un. J'ai fait juste une proposition pour d'autre programme, en utilisant dim ou dlist, ce qui te permettrais un traitement beaucoup plus rapide, en te servant des outils particuliers de Panoramic. C'est beaucoup plus rapide de se servir de la mémoire vive de l'ordi. Surtout ne te préoccupe pas pour moi, si je trouve cela nécessaire, je ferais mes propres modifications, tout comme j'encourage la même chose sur mes scriptes, qui sont pour moi que des exemples et modifiables. Parmi tous les intervenants sur ce site, on est tous des programmeurs, et je crois capable de modifier un code pour le mettre à sa convenance, et je suis certainement pas le meilleur. On a chacun ses spécissivités et pour ma part, j'interviends à mon niveau, sans plus. J'ai du mal souvent de mettre un commentaire élogieux sur tel ou tel scripte, car je me dis qui je suis?, quelle est ma valeur pour porter un jugement. Je suis comme ça, sans plus. Bon courage et merci A+ |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Petit éditeur de textes Dim 13 Sep 2009 - 15:50 | |
| On s'est croisés tous les deux... Je suis évidemment d'accord avec toi, personne ne donne de leçon à personne, eet bien au contraire il est toujours intéressant de voir comment les autres résolvent les problèmes, certains ont un peu plus de technique, d'autres plus d'imagination, et chacun a sa place.
Et les codes soumis ne demandent qu'à être modifiés, bidouillés et de préférence améliorés !
L'expérience montre que aucun programme n'est parfait, et même si on ne l'est pas au départ, on devient vite modeste en pratiquant ! | |
| | | Contenu sponsorisé
| Sujet: Re: Petit éditeur de textes | |
| |
| | | | Petit éditeur de textes | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |