EditorGadget() plante avec de gros fichiers [résolu-API]
Publié : mer. 14/mars/2007 12:50
Pourriez vous me confirmer la chose en ouvrant un fichier texte contenant plus de 500 lignes voire plusieurs milliers.
Dès que le fichier est chargé/ouvert dans l'éditeur celui-ci perd le focus clavier et ne réagit plus. Seul moyen, taper sur <----- Return au clavier pour obtenir un semblant d'activité.
ts-soft (forum anglais) m'a trouvé une solution, voir ci-dessous
un code d'exemple qui utilise 2 méthodes pour ouvrir un fichier
pour générer un fichier txt de test de grande taille, il suffit d'en ouvrir un et de faire un collage multiple dedans.
merci de vos tests et confirmation/infirmation
Dès que le fichier est chargé/ouvert dans l'éditeur celui-ci perd le focus clavier et ne réagit plus. Seul moyen, taper sur <----- Return au clavier pour obtenir un semblant d'activité.
ts-soft (forum anglais) m'a trouvé une solution, voir ci-dessous
un code d'exemple qui utilise 2 méthodes pour ouvrir un fichier
Code : Tout sélectionner
Enumeration
#Win0
#BP0
#BP1
#Editor_0
#Fichier
EndEnumeration
Procedure.s FileToString(File.s)
OpenFile(1,File)
Txt.s=""
Rc.s = Chr(13)+Chr(10)
While Not Eof(1)
Txt.s+ReadString(1)+ Rc
Wend
CloseFile(1)
ProcedureReturn Txt
EndProcedure
Procedure Open_File_Txt()
FileT$=OpenFileRequester("Sélectionnez le fichier à ouvrir","c:\","*.txt",0)
If FileT$<>""
If OpenFile(#Fichier, FileT$)
ClearGadgetItemList(#Editor_0)
Repeat
Texte.s = ReadString(#Fichier)
AddGadgetItem(#Editor_0, -1, Texte)
Until Eof(#Fichier)
CloseFile(#Fichier)
EndIf
EndIf
EndProcedure
Procedure Open_Win0()
If OpenWindow(#Win0, 0, 0, 1011, 771, "Editeur Simple", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Win0))
ButtonGadget(#BP0, 30, 10, 150, 30, "Ouvrir Fichier méthode 1")
ButtonGadget(#BP1, 200, 10, 150, 30, "Ouvrir Fichier méthode 2")
EditorGadget(#Editor_0, 30, 50, 960, 690)
SendMessage_(GadgetID(#Editor_0), #EM_SETLIMITTEXT, -1, 0);solution de rechange avec API pour charger des fichiers trop gros pour l'éditeur de base.
EndIf
EndIf
EndProcedure
Open_Win0()
Repeat
Event = WaitWindowEvent()
GadgetID = EventGadget()
If Event = #PB_Event_Gadget
If GadgetID = #BP0
File.s=OpenFileRequester("Selection du fichier à éditer","*.*","*.txt",1)
SetGadgetText(#Editor_0,FileToString(File))
EndIf
If GadgetID = #BP1
Open_File_Txt()
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
End
merci de vos tests et confirmation/infirmation