Page 1 sur 1

2 en 1 alors la...

Publié : ven. 11/nov./2005 21:33
par gadjet35
bonjour tout le monde je viens de créer deux programmes en 2 heures
le record du monde battu...
un navigateur internet = ici
un editeur de text = ici
repondez moi sur les critiques et les bugs
comment les trouvez vous???

Publié : ven. 11/nov./2005 22:32
par Droopy
pour le navigateur :

Essaye de redimensionner le WebGadget quand on redimensionne la fenêtre, et de permettre le chargement/changement de la page quand on saisie une URL + presse ENTER.

Pas mal du tout 8)

Re: 2 en 1 alors la...

Publié : sam. 12/nov./2005 14:17
par Chris
gadjet35 a écrit :bonjour tout le monde je viens de créer deux programmes en 2 heures
le record du monde battu...
un navigateur internet = ici
un editeur de text = ici
repondez moi sur les critiques et les bugs
comment les trouvez vous???
Ton éditeur de texte n'édite rien du tout, il ne charge que la première ligne du fichier.

Voilà trois méthodes pour charger et sauvegarder les fichiers.
Pour les extensions des fichiers lors de la sauvegarde, c'est à toi de les mettre, je n'ai pas mis de vérification.

La méthode 1, c'est la plus lente. Elle lit les lignes une à une dans le fichier, et les place dans l'éditeur. A réserver pour de touts petits fichiers.

Code : Tout sélectionner

;/Constantes Window
Enumeration
  #Window_0
EndEnumeration

;/Constantes Gadget
Enumeration
  #Editeur
EndEnumeration

Enumeration
  #Menu
EndEnumeration

Enumeration
  #M_Ouvrir
  #M_Sauver
EndEnumeration

Procedure OuvrirFichier(File.s)
  If ReadFile(0, File)
    Repeat
      AddGadgetItem(#Editeur, -1, ReadString())
    Until Eof(0)
    CloseFile(0)
  EndIf
  
  ProcedureReturn
EndProcedure

Procedure SauverFichier(File.s)
  If CreateFile(0, File)
    For i = 0 To CountGadgetItems(#Editeur) -1
      WriteStringN(GetGadgetItemText(#Editeur, i, 0))
    Next
    
    CloseFile(0)
  EndIf
  
  ProcedureReturn
EndProcedure

If OpenWindow(#Window_0, 0, 0, 600, 570, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "Editeur",0)
  If CreateMenu(#Menu, WindowID(#Window_0))
    MenuTitle("Fichiers")
    MenuItem(#M_Ouvrir, "Ouvrir")
    MenuItem(#M_Sauver, "Sauver")
  EndIf
  
  If CreateGadgetList(WindowID(#Window_0))
    EditorGadget(#Editeur, 0, 0, 600, 600-MenuHeight(), "Quitter")
  EndIf
EndIf

Repeat
  Select WaitWindowEvent()
    Case #PB_EventMenu
      Select EventMenuID()
        Case #M_Ouvrir
          Fichier$ = OpenFileRequester("Ouvrir un fichier","C:","Fichiers texte (*.txt)|*.txt",0)
          If Fichier$
            OuvrirFichier(Fichier$)
          EndIf
          
        Case #M_Sauver
          Fichier$ = SaveFileRequester("Sauver un fichier","C:","Fichiers texte (*.txt)|*.txt",0)
          If Fichier$
            SauverFichier(Fichier$)
          EndIf
          
      EndSelect
      
    Case #PB_EventCloseWindow : quit = 1
  EndSelect
Until quit = 1
End
La méthode 2 est un peu plus rapide, elle charge le fichier en mémoire et le place ensuite dans l'éditeur.
La sauvegarde se fait comme dans la méthode 1. Pour des fichiers de taille moyenne.

Code : Tout sélectionner

;/Constantes Window
Enumeration
  #Window_0
EndEnumeration

;/Constantes Gadget
Enumeration
  #Editeur
EndEnumeration

Enumeration
  #Menu
EndEnumeration

Enumeration
  #M_Ouvrir
  #M_Sauver
EndEnumeration

Procedure OuvrirFichier(Gagdet.l, Fichier.s)
  Size = FileSize(Fichier)
  Longueur = Size : Decalage = 0
  L_Max = 63999
  
  If Size = 0 
    ProcedureReturn
  Else
    If ReadFile(0,Fichier)
      *Buffer = AllocateMemory(Size)
      If *Buffer
        ReadData(*Buffer, Size)
      EndIf
      CloseFile(0)
    EndIf
  EndIf
  
  ;Vérification du chargement
  If MemoryStringLength(*Buffer) < Size
    MessageRequester("Erreur","Une erreur est survenue pendant le chargement du fichier",#MB_ICONERROR)
    FreeMemory(*Buffer)
    ProcedureReturn
  EndIf
  
  ; Affichage du texte
  If Longueur > L_Max
    While Longueur > L_Max
      Chaine.s = PeekS(*Buffer + Decalage, L_Max)
      AddGadgetItem(gadget,-1,Chaine)
      Longueur = Longueur - L_Max : Decalage = Decalage + L_Max
    Wend
    
    Chaine = PeekS(*Buffer + Decalage,Longueur)
    AddGadgetItem(gadget,-1,Chaine)
    
  Else
    Chaine.s = PeekS(*Buffer,Longueur)
    AddGadgetItem(gadget,-1,Chaine)
  EndIf
  FreeMemory(*Buffer)
EndProcedure

Procedure SauverFichier(File.s)
  If CreateFile(0, File)
    For i = 0 To CountGadgetItems(#Editeur) -1
      WriteStringN(GetGadgetItemText(#Editeur, i, 0))
    Next
    
    CloseFile(0)
  EndIf
  
  ProcedureReturn
EndProcedure


If OpenWindow(#Window_0, 0, 0, 600, 570, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "Editeur",0)
  If CreateMenu(#Menu, WindowID(#Window_0))
    MenuTitle("Fichiers")
    MenuItem(#M_Ouvrir, "Ouvrir")
    MenuItem(#M_Sauver, "Sauver")
  EndIf
  
  If CreateGadgetList(WindowID(#Window_0))
    EditorGadget(#Editeur, 0, 0, 600, 545, "Quitter")
  EndIf
EndIf

Repeat
  Select WaitWindowEvent()
    Case #PB_EventMenu
      Select EventMenuID()
        Case #M_Ouvrir
          Fichier$ = OpenFileRequester("Ouvrir un fichier","C:","Fichiers texte (*.txt)|*.txt",0)
          If Fichier$
            OuvrirFichier(#Editeur, Fichier$)
          EndIf
          
        Case #M_Sauver
          Fichier$ = SaveFileRequester("Sauver un fichier","C:","Fichiers texte (*.txt)|*.txt",0)
          
          If Fichier$ <> ""
            SauverFichier(Fichier$)
          EndIf
          
      EndSelect
      
    Case #PB_EventCloseWindow : quit = 1
  EndSelect
Until quit = 1
End
La troisième méthode est la plus rapide. Tu peux charger et sauvegarder de très gros fichiers.

Code : Tout sélectionner

;/Constantes Window
Enumeration
  #Window_0
EndEnumeration

;/Constantes Gadget
Enumeration
  #Editeur
EndEnumeration

Enumeration
  #Menu
EndEnumeration

Enumeration
  #M_Ouvrir
  #M_Sauver
EndEnumeration

Procedure StreamFileIn_Callback(hFile, pbBuff, cb, pcb)
  ProcedureReturn ReadFile_(hFile, pbBuff, cb, pcb, 0)!1
EndProcedure

Procedure StreamFileOut_Callback(hFile, pbBuff, cb, pcb)
  ProcedureReturn WriteFile_(hFile, pbBuff, cb, pcb, 0)!1
EndProcedure

Procedure FileStreamIn(FileID.l, File.s, gadget.l, Mode.l)
  Protected File
  Protected FileID
  Protected gadget
  Protected StreamData.EDITSTREAM
  
  If Mode <> #SF_RTF : Mode = #SF_TEXT : EndIf
  
  If ReadFile(FileID, File)
    StreamData\dwCookie = UseFile(FileID)
    StreamData\dwError = #Null
    StreamData\pfnCallback = @StreamFileIn_Callback()
    SendMessage_(GadgetID(gadget), #EM_STREAMIN, Mode, @StreamData)
    CloseFile(FileID)
  EndIf
EndProcedure
  
Procedure FileStreamOut(FileID.l, File.s, gadget.l, Mode.l)
  Protected File
  Protected FileID
  Protected gadget
  Protected StreamData.EDITSTREAM
  
  If Mode <> #SF_RTF : Mode = #SF_TEXT : EndIf
  
  If CreateFile(FileID, File)
    StreamData\dwCookie = UseFile(FileID)
    StreamData\dwError = #Null
    StreamData\pfnCallback = @StreamFileOut_Callback()
    SendMessage_(GadgetID(gadget), #EM_STREAMOUT, Mode, @StreamData)
    CloseFile(FileID)
  EndIf
EndProcedure


If OpenWindow(#Window_0, 0, 0, 600, 570, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "Editeur",0)
  If CreateMenu(#Menu, WindowID(#Window_0))
    MenuTitle("Fichiers")
    MenuItem(#M_Ouvrir, "Ouvrir")
    MenuItem(#M_Sauver, "Sauver")
  EndIf
  
  If CreateGadgetList(WindowID(#Window_0))
    EditorGadget(#Editeur, 0, 0, 600, 545, "Quitter")
  EndIf
EndIf

Repeat
  Select WaitWindowEvent()
    Case #PB_EventMenu
      Select EventMenuID()
        Case #M_Ouvrir
          Fichier$ = OpenFileRequester("Ouvrir un fichier","C:","Fichiers texte (*.txt)|*.txt",0)
          If Fichier$
            FileStreamIn(0, Fichier$, #Editeur, #SF_TEXT)
          EndIf
          
        Case #M_Sauver
          Fichier$ = SaveFileRequester("Sauver un fichier","C:","Fichiers texte (*.txt)|*.txt",0)
          
          If Fichier$ <> ""
            FileStreamOut(0, Fichier$, #Editeur, #SF_TEXT)
          EndIf
          
      EndSelect
      
    Case #PB_EventCloseWindow : quit = 1
  EndSelect
Until quit = 1
End

Publié : sam. 12/nov./2005 15:25
par Pierre
Chris, tu peuux juste me dire comment marche en gros le 3ème code? (j'ai juste compris les 2 premier en regardant vite fais :S)

Publié : sam. 12/nov./2005 15:31
par Chris
Pierre a écrit :Chris, tu peuux juste me dire comment marche en gros le 3ème code? (j'ai juste compris les 2 premier en regardant vite fais :S)
Ben non, parce que j'ai piqué les procédures dans CodeArchiv, mais je n'ai jamais vraiment pris le temps de chercher à comprendre comment ça fonctionne exactement. (Et en plus, j'ai même pas honte...! :lol: )

Mais l'essentiel, c'est que ça fonctionne... non? :lol:

Publié : dim. 13/nov./2005 20:10
par gadjet35
je ne sais pas si tu as remarquer chris mais on peut aussi imprimer dans mon editeur

Publié : dim. 13/nov./2005 20:20
par Chris
Ah oui, sauf que quand tu imprimes, toutes les lignes sont mises l'une au bout de l'autre, même si tu as fait des retour chariot en tapant le texte.