Seite 1 von 1

Problem beim File in Editor schreiben

Verfasst: 28.08.2005 10:09
von Goofy
Hallo ,ich möchte eine TextDatei in den Editor einlesen.
Nur der untere Code funktioniert nicht.
liegt vermutlich am "SetGadgetText".
Nur wie funktioniert's


Code: Alles auswählen


If Window_Form1()

  quitForm1=0
  Repeat
    EventID=WaitWindowEvent()
    Select EventID
      Case #PB_Event_CloseWindow
        If EventWindowID()=#Window_Form1
          quitForm1=1
        EndIf


      Case #PB_Event_Gadget
        Select EventGadgetID()
          Case #Gadget_Form1_Button2
            
            OpenPath.s=OpenFileRequester("Öffnen","","Text-Dateien | *.txt",0)
            Debug OpenPath
            
          If ReadFile(1,OpenPath.s) <>0
            
         Debug     DateiGroesse.l = Lof()
              
              Pointer=AllocateMemory(DateiGroesse.l)
             
            Debug  OpenText.s = PeekS(Pointer)
      
              SetGadgetText(#Gadget_Form1_Editor3,OpenText.s)
              CloseFile(1)
              
              FreeMemory(0)
            EndIf
          Case #Gadget_Form1_Editor3
        EndSelect

    EndSelect
  Until quitForm1
  CloseWindow(#Window_Form1)
EndIf
End



Cu Goofy

Verfasst: 28.08.2005 10:33
von Christi
Ich glaub die Zeile wär recht wichtig:

Code: Alles auswählen

ReadData(Pointer.l, DateiGroesse.l)

Läuft nich

Verfasst: 28.08.2005 10:58
von Goofy
Hallo, Du meinst sicher so nur dann stürzt das Programm ab.


Code: Alles auswählen


If Window_Form1()

  quitForm1=0
  Repeat
    EventID=WaitWindowEvent()
    Select EventID
      Case #PB_Event_CloseWindow
        If EventWindowID()=#Window_Form1
          quitForm1=1
        EndIf


      Case #PB_Event_Gadget
        Select EventGadgetID()
          Case #Gadget_Form1_Button2
            
            OpenPath.s=OpenFileRequester("Öffnen","","Text-Dateien | txt",0)
           
            
          If ReadFile(1,OpenPath.s) <>0
            
              DateiGroesse.l = Lof()
             
              Pointer=AllocateMemory(DateiGroesse.l)
              ReadData(Pointer, DateiGroesse.l)
              OpenText.s = PeekS(Pointer)
      
              SetGadgetText(#Gadget_Form1_Editor3,OpenText.s)
              CloseFile(1)
              
              FreeMemory(0)
            EndIf
          Case #Gadget_Form1_Editor3
        EndSelect

    EndSelect
  Until quitForm1
  CloseWindow(#Window_Form1)
EndIf
End

Cu Goofy

Verfasst: 28.08.2005 12:54
von Christi
Und wenn du aus:

Code: Alles auswählen

OpenText.s = PeekS(Pointer)
das machst ?

Code: Alles auswählen

OpenText.s = PeekS(Pointer.l, DateiGroesse.l) 

Re: Problem beim File in Editor schreiben

Verfasst: 28.08.2005 13:59
von Kiffi
Goofy hat geschrieben:

Code: Alles auswählen

          If ReadFile(1,OpenPath.s) <>0
            
         Debug     DateiGroesse.l = Lof()
              
              Pointer=AllocateMemory(DateiGroesse.l)
             
            Debug  OpenText.s = PeekS(Pointer)
      
              SetGadgetText(#Gadget_Form1_Editor3,OpenText.s)
              CloseFile(1)
              
              FreeMemory(0)
            EndIf
die Daten müssen auch aus der geöffneten Datei eingelesen werden.
Das machst Du am besten mit [c]ReadData()[/c]

Code: Alles auswählen

If ReadFile(1,OpenPath.s) <>0
  
  DateiGroesse.l = Lof()
  
  Pointer=AllocateMemory(DateiGroesse.l)
  
  ReadData(Pointer, DateiGroesse) ; Daten aus Datei einlesen
  
  OpenText.s = PeekS(Pointer)
  
  FreeMemory(Pointer)

  SetGadgetText(#Gadget_Form1_Editor3,OpenText.s)
  
  CloseFile(1)
  
EndIf 
Grüße ... Kiffi

Verfasst: 28.08.2005 14:50
von Christi
was du nicht sagst...

Verfasst: 28.08.2005 18:38
von Kiffi
Christi hat geschrieben:was du nicht sagst...
oh, sorry, ich habe nur das erste Posting gelesen. :oops:

doppelt gemoppelt hält besser. ;-)

Funktioniert nicht

Verfasst: 28.08.2005 20:56
von Goofy
Danke für eure Hilfe,aber das Programm verabschiedet sich nach dem aufrufen des Openrequester.
Finde den Fehler nicht.
Ich poste mal den ganzen Code

Code: Alles auswählen


Global BubbleTipStyle.l:BubbleTipStyle=0
#PB_Image_BorderRaised =$1

Enumeration 1
  #Window_Form1
EndEnumeration
#WindowIndex=#PB_Compiler_EnumerationValue


Enumeration 1
  
  #Gadget_Form1_Button2
  #Gadget_Form1_Editor3
  
  
EndEnumeration
#GadgetIndex=#PB_Compiler_EnumerationValue




Procedure.l Window_Form1()
  If OpenWindow(#Window_Form1,80,80,400,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible,"Work Form1")
    If CreateGadgetList(WindowID(#Window_Form1))
      ButtonGadget(#Gadget_Form1_Button2,0,0,60,20,"Button2")
      EditorGadget(#Gadget_Form1_Editor3,70,0,270,295)
     HideWindow(#Window_Form1,0)
      ProcedureReturn WindowID()
    EndIf
  EndIf
EndProcedure







If Window_Form1()
  
  quitForm1=0
  Repeat
    EventID=WaitWindowEvent()
    Select EventID
      Case #PB_Event_CloseWindow
        If EventWindowID()=#Window_Form1
          quitForm1=1
        EndIf
        
        
      Case #PB_Event_Gadget
        Select EventGadgetID()
          Case #Gadget_Form1_Button2
            
            OpenPath.s=OpenFileRequester("Öffnen","","Text-Dateien | *.txt",0)
            
            
            If ReadFile(1,OpenPath.s) <>0
              
              DateiGroesse.l = Lof()
              
              Pointer=AllocateMemory(DateiGroesse.l)
              
              ReadData(Pointer, DateiGroesse) ; Daten aus Datei einlesen
              
              OpenText.s = PeekS(Pointer)
              
              FreeMemory(Pointer)
              
              SetGadgetText(#Gadget_Form1_Editor3,OpenText.s)
              
              CloseFile(1)
              
            EndIf
            
            
            
          Case #Gadget_Form1_Editor3
        EndSelect
        
    EndSelect
  Until quitForm1
  CloseWindow(#Window_Form1)
EndIf
End


Cu Goofy

Verfasst: 28.08.2005 22:30
von Christi
Du musst aufpassen dass der Variablenbereich für Strings nicht überschritten wird. So gehts auch ohne diese Begrenzung.:

Code: Alles auswählen

            If ReadFile(1,OpenPath.s) <>0 
              DateiGroesse.l = Lof() 
              Pointer=AllocateMemory(DateiGroesse.l + 1) 
              ReadData(Pointer, DateiGroesse) ; Daten aus Datei einlesen 
              SendMessage_(GadgetID(#Gadget_Form1_Editor3), #wm_settext, 0, Pointer)
              FreeMemory(Pointer) 
              CloseFile(1) 
            EndIf 

Verfasst: 28.08.2005 23:10
von AndyX
Oder so: :)

Code: Alles auswählen

Procedure SetStringManipulationBufferSize(Size)
  PBStringBase.l = 0
  PBMemoryBase.l = 0
  !MOV Eax, dword [PB_StringBase]
  !MOV [esp+4],Eax
  !MOV Eax, dword [PB_MemoryBase]
  !MOV [esp+8],Eax
  HeapReAlloc_(PBMemoryBase, #GMEM_ZEROINIT, PBStringBase, Size)
  !MOV dword [_PB_StringBase],Eax 
EndProcedure

SetStringManipulationBufferSize(200000) ;- 200 KB statt 64 KB für Stings nutzen...
^^ :allright: