I started to have a look at scintilla.
I manged to write colored text to the gadget.
But now I got trouble to get the text back from the gadget.
Why do I not get the whole written text back?
Output ends always at 19693.
Here my test code:
Code: Select all
EnableExplicit
#SciWindow = 2
#SciTextGadget = 3
Define *t
Define.i i, Pos, L, Range, Buffer, Event
Define Text$
Procedure SciPrint(Gadget, Text.s, Pos)
Protected *T, L.i
*T=UTF8(Text.s)
L=Len(Text.s)
ScintillaSendMessage(Gadget, #SCI_ADDTEXT, L, *T)
FreeMemory(*T)
ScintillaSendMessage(Gadget, #SCI_NEWLINE)
ProcedureReturn L
EndProcedure
OpenWindow(#SciWindow, 10, 10, 640, 480, "", #PB_Window_SystemMenu)
ScintillaGadget(#SciTextGadget, 0, 0, WindowWidth(#SciWindow), WindowHeight(#SciWindow), 0)
*t = UTF8("Arial")
ScintillaSendMessage(#SciTextGadget, #SCI_STYLESETFONT, #STYLE_DEFAULT, *t)
FreeMemory(*t)
ScintillaSendMessage(#SciTextGadget, #SCI_STYLESETSIZE, #STYLE_DEFAULT, 10)
ScintillaSendMessage(#SciTextGadget, #SCI_STYLECLEARALL)
#StyleBlack = 1
#StyleBlue = 2
#StyleRed = 3
ScintillaSendMessage(#SciTextGadget, #SCI_STYLESETFORE, #StyleBlack, #Black)
ScintillaSendMessage(#SciTextGadget, #SCI_STYLESETFORE, #StyleBlue, #Blue)
ScintillaSendMessage(#SciTextGadget, #SCI_STYLESETFORE, #StyleRed, #Red)
SendMessage_(GadgetID(#SciTextGadget),#WM_SETREDRAW,#False,0)
Pos=0
For i=1 To 20000; Limit: 19692 ?
Text$=RSet(Str(i), 6, "0")+". Row"
L=SciPrint(#SciTextGadget, Text$, Pos)
If i&1
ScintillaSendMessage(#SciTextGadget, #SCI_STARTSTYLING, Pos, #StyleBlue)
ScintillaSendMessage(#SciTextGadget, #SCI_SETSTYLING, L, #StyleBlue)
Else
ScintillaSendMessage(#SciTextGadget, #SCI_STARTSTYLING, Pos, #StyleRed)
ScintillaSendMessage(#SciTextGadget, #SCI_SETSTYLING, L, #StyleRed)
EndIf
Pos+L+2
Next
SendMessage_(GadgetID(#SciTextGadget),#WM_SETREDRAW,#True,0)
Range= ScintillaSendMessage(#SciTextGadget, #SCI_GETLENGTH)
Debug Range
Buffer=AllocateMemory(Range+2)
Debug Buffer
Debug MemorySize(Buffer)
If Buffer
Debug ScintillaSendMessage(#SciTextGadget, #SCI_GETTEXT, range, Buffer)
Debug PeekS(Buffer, Range, #PB_UTF8)
FreeMemory(Buffer)
EndIf
Repeat
Event=WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver

