Editeur de texte avec conversion RTF HTML, à debugger !

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Editeur de texte avec conversion RTF HTML, à debugger !

Message par Stefou »

Salut tous les accros de l'info

Aujourd'hui c'est noël ! Et je vous livre le code d'un editeur de texte avec les fonctions standards, police, taille de texte, gras italique souligner barrer, decallage des paragraphe, surlignage, couleur de texte.
Et aussi la conversion en HTML !

J'attends les bugs et votre avis.

Bonne journée à tous et à toutes

Stefou le ouf d'info !

http://www.tib-net.com/ecligne/03_notepad.zip
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message par Stefou »

Oups, un bug empechait la conversion de ma propre page de test :?

C'est corrigé !

PS : Le source est fournit dans le ZIP
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour Stefou

Bien que n'etant pas un des membres éminent (et loin de là) :lol: de ce forum, je suis content d'etre le premier a te féliciter de ce tres joli travail.

Il est super ton wordpad, (car il est bien supérieur au notepad) avec toutes ces fonctions supplémentaires.

Par contre, j'ai fait F5 et le pc s'est mis à tourner a 100%. 8O

Ce qui serait super, c'est de rajouter une sauvegarde plus complete avec le choix du chemin et la possibilité de sauvegarder ou charger une feuille de notre choix.

Voila une tres belle alternative aux logiciels de mr crosoft qui sont toujours trop cher, et en plus, fait avec un language que nous adorons. :wink:

Encore bravo.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message par Stefou »

Salut Kwai

Merci pour ta réponse et tes encouragements.
Par contre, j'ai fait F5 et le pc s'est mis à tourner a 100%. Shocked
C'est corrigé, enfin normalement :?
Bien que n'etant pas un des membres éminent (et loin de là)
Toujours aussi modeste.... mais un moment donné, il faudra bien que tu arrete de te faire passer pour un débutant ! :wink:
Ce qui serait super, c'est de rajouter une sauvegarde plus complete avec le choix du chemin et la possibilité de sauvegarder ou charger une feuille de notre choix.
C'est un simple rajout : openfilerequester ou savefilerequester. Mais lorsque tu es en periode de test c'est toujours pénible de rentrer à chauque fois un nom de fichier. :twisted:

Le but de ce notepad n'est pas de conccurencer word, j'en ai juste besoins pour faire une interface de saisi de News (ou autre) pour des entreprises à qui je fais un site.

a+
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

Bravo , c'est super comme programme
c'est ton premier?
en as tu d'autre et que compte tu en faire avec?
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

@Stefou

Je te remercie à mon tour de ton compliment qui me fait énormément plaisir, j'espere tellement etre un jour réellement utile à notre grande famille. :D

Hélas et sans fausse modestie lorsque l'on voit le niveau de ce forum, je vais encore rester un paillon dans la rubrique débutant, et pourtant j'suis les 2 pieds sur l'accélérateur :lol:
La bagnole n'est peut etre plus au top non plus .... :lol:

Bref je viens d'essayer le F5 et c'est de la balle, une jolie page HTML apparait, c'est magique 8)

En tout cas en plus du coté utile, t'as eu plein de bonnes idées et des petites fonctions qui sont bien au dessus du WORDPAD.

Encore une toute petite remarque, si je peux me permettre, quand on change la couleur, ça serait cool que l'on voit l'action se faire, car lorsque l'on surligne un texte et que l'on clique la couleur du texte par exemple rien ne se passe à l'oeil et l'on pourrait croire que l'action n'a pas été prise en compte.
On ne s'apperçois que le changement a été pris en compte que lorsque l'on supprime le surlignage.
Des boutons ou bien un changement de couleur du carré cliqué en bas confirmerais bien le changement.
Dans word le texte change de couleur dans le surlignage.

Bien sur, un petit module pour imprimer et ce serais bien pour avoir un petit utilitaire indépendant, mais je crois que c'est pas mal de boulot.

Voila c'est les premieres remarques qui me sont venues au premier abord.
En tout cas encore bravo et bon courage pour la finalisation.

Merci
Excelent journée à toi :wink:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

pas mal du tout...

pat
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

ajoute des racourcis pour le rendre encore plus sympa!

exemple Ctrl+G pour mettre en gras la sélection etc (comme dans word =)

Dri
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Un bug :
Qd on change la position du curseur (via un clic de la souris), l'information police de caractères n'est mise à jour que si on sélectionne du texte et non pas seulement par un simple clic.
Mais sinon c'est vrai que c'est pas mal du tout !!! :D

Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message par Stefou »

@Kwai chang caine
Voilà lorsque l'on colorie du texte, la selection ce retire laissans apparaitre la nouvel couleur.
Pour la fonction d'impression j'ai vu qu'elle trainait sur un forum et je devrais la mettre assez rapidement....

@Dr.Dri
Voila les raccourci sont en place, reste plus qu'a mettre une bulle sur les icones pour savoir à quoi il servent et le nom du raccourci
ctrl+ s:sauve, +n nouveau +b : barrer +i:italique +g:gras +< ou > taille de police ....

@lionel_om
En fait, lorsque l'on clic dans la fenetre de l'editor cela ne crée pas d'évenement dans purebasic. Il va certainement falloir passer par une callback....a moins que tu n'es une meilleur idée pour récupérer l'évenement "Clic" dans un editor gadget !

La nouvelle version est au même lien que la précédente
:wink:
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

C'est du bon boulot Stefou! je pense que ça va servir à pas mal d'entre nous. Du coup je viens d'essayer de faire un mode page par page à la Word, ça irait bien avec ton notepad.
C'est un début, ça fonctionne mais c'est à compléter.
Pour tester : cliquer sur le bouton "New" affichera une nouvelle page en plaçant le curseur au début.
Ajout de l'automatisation pour le passage d'une page à l'autre en cours d'écriture.
Ouverture d'un fichier texte et ajout dans l'editeur en cours. S'il fait plus de 64 lignes, une ou plusieurs nouvelles pages sont affichées.

Code : Tout sélectionner

; Simuler Word et le changement de page avec un éditeur
; Idée initiale de Jacobus pour le notepad de Stefou 
; Editeurs dynamique, méthode extraite d'un éditeur de Flaith
; Ca reste à peaufiner...

; Inclus la création d'une nouvelle page dès que la ligne 64 est atteinte dans l'éditeur précédent
; Sur la base d'utilisation de la police par défaut.

; Pour tester, (taper quelques lignes dans le premier éditeur, puis) descendre à l'aide de la touche "Entrée"
; On passe ainsi d'une page à l'autre tout en tapant son texte.
; A faire de même avec l'ouverture d'un fichier de plus de 64 lignes...

; Ouverture d'un fichier texte et ajout dans l'editeur en cours. S'il fait plus de 64 lignes, il est ouvert sur plusieurs pages. 

;-Constantes
Enumeration
  #WinPBWordpad
  #ToolBar 
  #ToolBar_new
  #ToolBar_open
  #ToolBar_save  
  #ScrollPages
  #Editeur
  #file
  #StatusBar
EndEnumeration 
#PROGRAMNAME = "PBWordpad"
#PROGVERSION = "1.0.03.07"
#Bureau = 0
#PageWidth = 595  ; 21 cm     pour simuler le format A4
#PageHeight = 842 ; 29,7 cm
#NbLines = 64

;-Variables globales 
Global Gadget_Editor.l = 0, Num_Editor.l = 0, hEdit.l, Editeur.l

Structure GadgetEditor
  Num_Gadget.l
  Num.l
  hEdit.l
EndStructure
Global NewList ListEditor.GadgetEditor()

Procedure Select_Editor()
 Resultat = GetActiveGadget()
 If Resultat<>-1 And Resultat = Num_Editor
     Editeur.l = Gadget_Editor   
 EndIf
   ProcedureReturn Editeur.l
EndProcedure 

Procedure Nouvelle_page()
  If Select_Editor()
      NumLines = CountGadgetItems(Editeur.l)
      If NumLines = #NbLines
       ValScroll = GetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerHeight) 
       SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerHeight, ValScroll+#PageHeight+60); agrandi la scrollarea d'une nouvelle page  
        OpenGadgetList(#ScrollPages)       
         AddElement(ListEditor())
          Gadget_Editor + 1
          Num_Editor + 1        
          ListEditor()\Num_Gadget = Gadget_Editor
          ListEditor()\Num        = Num_Editor
          ListEditor()\hEdit = EditorGadget(ListEditor()\Num_Gadget, 20, ValScroll, #PageWidth, #PageHeight+40); on adapte l'éditeur à la scrollarea
          SetActiveGadget(ListEditor()\Num_Gadget); activation de l'éditeur
          SendMessage_(ListEditor()\hEdit, #EM_SETTARGETDEVICE, #Null, 0); retour à la ligne dans cette nouvelle page
          SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_Y, ValScroll-10)  ;on ramène la page au niveau des yeux de l'utilisateur      
        CloseGadgetList()
       EndIf
  EndIf 
EndProcedure

;-Fenêtre
 DesktopN = ExamineDesktops()
 If DesktopN<>0
 WinL = DesktopWidth(#Bureau)
 WinH = DesktopHeight(#Bureau)
 EndIf 
 
If OpenWindow(#WinPBWordpad, 0, 0, WinL-5, WinH-60, #PROGRAMNAME,  #PB_Window_SystemMenu) = 0 Or CreateGadgetList(WindowID(#WinPBWordpad)) = 0 
  End 
EndIf 
;-Toolbar 
   hToolBar = CreateToolBar(#ToolBar, WindowID(#WinPBWordpad)) 
      If hToolBar 
          ToolBarSeparator()       
          ToolBarStandardButton(#ToolBar_new, #PB_ToolBarIcon_New) :ToolBarToolTip(#ToolBar, #ToolBar_new, "Nouveau")
          ToolBarStandardButton(#ToolBar_open,  #PB_ToolBarIcon_Open) :ToolBarToolTip(#ToolBar, #ToolBar_open, "Ouvrir")
          ToolBarStandardButton(#ToolBar_save, #PB_ToolBarIcon_Save)  :ToolBarToolTip(#ToolBar, #ToolBar_save, "Enregistrer")
          ToolBarSeparator() 
      EndIf
      
ScrollFlags = #PB_ScrollArea_Center|#PB_ScrollArea_Flat 
ScrollAreaGadget(#ScrollPages,5,30,WinL-10,WindowHeight(#WinPBWordpad)-80,WindowWidth(#WinPBWordpad)-10,WindowHeight(#WinPBWordpad)*2,30,ScrollFlags)
    
    AddElement(ListEditor())
      Gadget_Editor + 1
      Num_Editor + 1        
      ListEditor()\Num_Gadget = Gadget_Editor
      ListEditor()\Num        = Num_Editor
      ListEditor()\hEdit = EditorGadget(ListEditor()\Num_Gadget, 20, ValScroll+20, #PageWidth, #PageHeight); on adapte l'éditeur à la scrollarea
      SetActiveGadget(ListEditor()\Num_Gadget); activation de l'éditeur
      SendMessage_(ListEditor()\hEdit, #EM_SETTARGETDEVICE, #Null, 0)
          
       SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerWidth, #PageWidth)
       SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerHeight, #PageHeight+40)
       
CloseGadgetList()


;-Statusbar  
  If CreateStatusBar(#StatusBar, WindowID(#WinPBWordpad))
      AddStatusBarField(WindowWidth(#WinPBWordpad)/2)
      AddStatusBarField(WindowWidth(#WinPBWordpad)/2)     
      StatusBarText(#StatusBar, 0,#PROGRAMNAME+" - "+#PROGVERSION,  #PB_StatusBar_Raised)    
      StatusBarText(#StatusBar, 1, "PB forums français"+Chr(169)+"2007", #PB_StatusBar_Raised|#PB_StatusBar_Center)
  EndIf
   

;-Programme
Repeat 
  Event = WaitWindowEvent() 
  
  If Event = #PB_Event_Menu 
      Select EventMenu()
      
      Case #ToolBar_new ; créer une nouvelle page avec un editeur
       ValScroll = GetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerHeight) 
       SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerHeight, ValScroll+#PageHeight+60); agrandi la scrollarea d'une nouvelle page  
        OpenGadgetList(#ScrollPages)       
         AddElement(ListEditor())
          Gadget_Editor + 1
          Num_Editor + 1        
          ListEditor()\Num_Gadget = Gadget_Editor
          ListEditor()\Num        = Num_Editor
          ListEditor()\hEdit = EditorGadget(ListEditor()\Num_Gadget, 20, ValScroll, #PageWidth, #PageHeight+40); on adapte l'éditeur à la scrollarea
          SetActiveGadget(ListEditor()\Num_Gadget); activation de l'éditeur
          SendMessage_(ListEditor()\hEdit, #EM_SETTARGETDEVICE, #Null, 0); retour à la ligne dans cette nouvelle page
          SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_Y, ValScroll-10)  ;on ramène la page au niveau des yeux de l'utilisateur      
        CloseGadgetList()
      
     Case #ToolBar_open
       file$=OpenFileRequester("Choisir fichier","c:\","*.txt",0)
       If file$
        Select_Editor()
         If ReadFile(#file,file$)
            While Eof(#file) = 0           
             AddGadgetItem(Editeur.l,-1,ReadString(#file))
             NumLines = CountGadgetItems(Editeur.l)    
             If NumLines = #NbLines
              ValScroll = GetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerHeight) 
               SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerHeight, ValScroll+#PageHeight+60); agrandi la scrollarea d'une nouvelle page  
                OpenGadgetList(#ScrollPages)       
                 AddElement(ListEditor())
                  Gadget_Editor + 1
                  Num_Editor + 1        
                  ListEditor()\Num_Gadget = Gadget_Editor
                  ListEditor()\Num        = Num_Editor
                  ListEditor()\hEdit = EditorGadget(ListEditor()\Num_Gadget, 20, ValScroll, #PageWidth, #PageHeight+40); on adapte l'éditeur à la scrollarea
                  SetActiveGadget(ListEditor()\Num_Gadget); activation de l'éditeur
                  SendMessage_(ListEditor()\hEdit, #EM_SETTARGETDEVICE, #Null, 0); retour à la ligne dans cette nouvelle page
                  SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_Y, ValScroll-10)  ;on ramène la page au niveau des yeux de l'utilisateur      
                CloseGadgetList()
               Select_Editor() 
               AddGadgetItem(Editeur.l,-1,ReadString(#file))
             EndIf                     
            Wend
             CloseFile(#file)
         EndIf 
       EndIf 

       
    ;  Case #ToolBar_save
      
      EndSelect 
  EndIf
  
  If Event = #PB_Event_Gadget 
    Select EventGadget()
      
     Case Gadget_Editor : Nouvelle_page() ; création auto d'une nouvelle page
         
    EndSelect
  EndIf 
    ;-End     
  If Event = #PB_Event_CloseWindow
     Quitter = 1       
  EndIf 
  
Until Quitter  
End
Dernière modification par Jacobus le sam. 10/mars/2007 20:45, modifié 6 fois.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

Tres bon Boulot Jacobus
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message par Stefou »

Super ce mode page, bien vue ! 8)
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

y a des défauts mais aussi des possibilités intéressantes mixé à ton notepad. Avec un rebargadget sur la gauche pour multiplier les fonctions ou encore un panelgadget pour ouvrir plusieurs documents de plusieurs pages. :)
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Re: Editeur de texte avec conversion RTF HTML, à debugger !

Message par Stefou »

Salut les accros ! 8)

Rien de neuf, et encore plus de tri à faire....

Je déterre ce bout de code que l'on ma demandé par MP

il est ici :
purebasic.ecligne.net/03_notepad.rar


Bonne prog à tous
Répondre