Seite 1 von 1

EditorGadget und EM_STREAMIN

Verfasst: 23.02.2005 22:20
von javabean
Hallo!

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
Grüße, javabean!