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

Archive.
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

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

Message 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
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.