Ich versuch' schon die eine ganze Weile mittels #EM_STREAMIN Text (>64k) in das EditorGadget zu streamen, aber alles was ich auch versuche endet schließlich in einem Crash (siehe Code).
Der Code sollte eigentlich funktionieren, aber irgendwie krieg' ich ihn nicht zum Laufen.
Vielleicht hat ja einer von Euch eine Idee, was da falsch läuft!
Hier mein Code:
Code: Alles auswählen
Procedure SetStringManipulationBufferSize(Bytes)
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, Bytes)
!MOV dword [_PB_StringBase],eax
EndProcedure
; Set the buffer size for all strings to approx. 1 MB.
SetStringManipulationBufferSize(1000000)
Global InText$
Global InPtr
Procedure Editor_StreamCallback(dwCookie, *pbBuff, cb, *pcb.LONG)
If dwCookie = 0 ; Set GadgetText
length = MemoryStringLength(InText$)
If length > cb
CopyMemory(InPtr, *pbBuff, cb)
InPtr = InPtr + cb
length = length - cb
*pcb\l = cb
ElseIf length <= cb
CopyMemory(InPtr, *pbBuff, length)
InPtr = InPtr + length
*pcb\l = length
length = 0
EndIf
EndIf
result = 0
ProcedureReturn result
EndProcedure
Procedure Editor_SetText(Gadget.l, StreamIn$)
InText$ = StreamIn$
InPtr = @InText$
stream.EDITSTREAM
stream\dwCookie = 0
stream\pfnCallback = @Editor_StreamCallback()
SendMessage_(GadgetID(Gadget), #EM_STREAMIN, #SF_TEXT, @stream)
EndProcedure
OpenWindow(0,0,0,500,240,#PB_Window_ScreenCentered|#PB_Window_SystemMenu ,"StreamIn")
CreateGadgetList(WindowID())
EditorGadget(0,0,0,500,200)
SendMessage_(GadgetID(0), #EM_SETLIMITTEXT, -1, 0)
ButtonGadget(1,2,205,120,30,"Stream In")
ActivateGadget(0)
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit = 1
EndIf
If EventID = #PB_EventGadget
Select EventGadgetID()
Case 1
Editor_SetText(0, "Hello!")
EndSelect
EndIf
Until Quit = 1
End