2 en 1 alors la...
Publié : ven. 11/nov./2005 21:33
Ton éditeur de texte n'édite rien du tout, il ne charge que la première ligne du fichier.
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
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
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
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...!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)