2 en 1 alors la...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
gadjet35
Messages : 190
Inscription : ven. 21/oct./2005 7:49
Localisation : Quelque part en france !

2 en 1 alors la...

Message 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???
bonne journer à tous !!!
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: 2 en 1 alors la...

Message 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
Pierre
Messages : 244
Inscription : ven. 23/janv./2004 20:29
Localisation : 77 (Région parisienne)

Message 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)
Image
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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:
gadjet35
Messages : 190
Inscription : ven. 21/oct./2005 7:49
Localisation : Quelque part en france !

Message par gadjet35 »

je ne sais pas si tu as remarquer chris mais on peut aussi imprimer dans mon editeur
bonne journer à tous !!!
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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.
Répondre