Page 1 sur 1

EditorGadget() plante avec de gros fichiers [résolu-API]

Publié : mer. 14/mars/2007 12:50
par Jacobus
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

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 
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