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:
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:
das machst ?
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.
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...
^^
