dysti hat geschrieben:Das habe ich bisher herausgefunden, weiß aber nicht, ob man das so verwenden würde?
Bitte um Kritik.
Code: Alles auswählen
strl=Len(GetGadgetText(#Gadget_Main_Editor))
SendMessage_(GadgetID(Gadget),#EM_EXGETSEL,0,Range.CHARRANGE) ;Cursor abfragen / in cpMax speichern
For i=0 To strl
SendMessage_(GadgetID(#Gadget_Main_Editor),#EM_SETSEL,Range\cpMax+i, Range\cpMax+i+1)
SendMessage_(REG, #EM_GETSELTEXT, 0, *mem)
zeichen$= RichEdit_GetSelText(#Gadget_Main_Editor)
Debug zeichen$
SendMessage_(GadgetID(#Gadget_Main_Editor),#EM_SETSEL,Range\cpMax, Range\cpMax)
If zeichen$=" "
Debug "Ein Leerschritt"
EndIf
Next
Ich denke das geht einfacher für Anfänger. Trotzdem musst Du verschiedene Dinge beachten.
Erst holst Du Range.CHARRANGE. Dann solltest Du vergleichen ob Range\cpMax und Range\cpMin gleich sind.
Sind sie gleich, gibt es keinen selektierten Text. Den Text hast Du ja eh schon durch GetGadgetText() am Anfang.
Mit einem Character-Pointer hast Du so einfachen Zugriff auf den String, mit der Position in Range\cpMax bzw. cpMin.
Dann veränderst Du diesen String (cpMax+1 löschen) und schon hast Du Deinen überschriebenen String, den
Du wieder ins EditorGadget schiebst.
Sind cpMin und cpMax aber unterschiedlich gibt es eine Textselektion. Dann solltest Du genau diese Selection
entfernen, also nimmst du Left() + "neuer char" + Right() um einen String zu bauen, der die Mitte zwischen
cpMin und cpMax raus lässt und den neuen Character dort einsetzt.
Das ganze am Ende noch in einen Callback rein und diese Prozedur immer bei #WM_CHAR wiederholen.