Da wird nichts unterschlagenThorsten1867 hat geschrieben: und beim zeilenweisem Auslesen werden die #CRLF$ unterschlagen.

Es sind ja keine Zeilenumbrüche vorhanden im Text, es wird nur ein Umbruch dargestellt, rein visuell
Da wird nichts unterschlagenThorsten1867 hat geschrieben: und beim zeilenweisem Auslesen werden die #CRLF$ unterschlagen.
Code: Alles auswählen
#frmMain = 0
#EditorGadget = 1
Procedure LastLineEG(GID)
sel.CHARRANGE
sel\cpMin = SendMessage_(GadgetID(GID), #EM_LINEINDEX, LineStart, 0) + CharStart - 1
If LineEnd = -1
LineEnd = SendMessage_(GadgetID(GID), #EM_GETLINECOUNT, 0, 0)-1
EndIf
sel\cpMax = SendMessage_(GadgetID(GID), #EM_LINEINDEX, LineEnd, 0)
If CharEnd = -1
sel\cpMax + SendMessage_(GadgetID(GID), #EM_LINELENGTH, sel\cpMax, 0)
Else
sel\cpMax + CharEnd - 1
EndIf
SendMessage_(GadgetID(GID), #EM_EXSETSEL, 0, @sel)
EndProcedure
Procedure LimitEGRows(GID.l, max.b)
If IsGadget(GID)
anz = CountGadgetItems(GID)
zeile = -1
For r = 0 To anz-1 ; Auf Leerzeilen testen
zeile + 1
If Trim(GetGadgetItemText(GID, zeile, #Null)) = ""
RemoveGadgetItem(GID, zeile)
zeile - 1
EndIf
Next
anz = CountGadgetItems(GID)
If anz > max
For r = anz-1 To max Step -1
RemoveGadgetItem(GID, r)
Next r
text$ = GetGadgetText(GID)
If Right(text$,2) = #CRLF$
SetGadgetText(GID, Left(text$, Len(text$)-2))
EndIf
LastLineEG(GID)
EndIf
SetFocus_(GadgetID(GID))
EndIf
EndProcedure
OpenWindow(#frmMain,0,0,200,100,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Maximal 5 Zeilen")
CreateGadgetList(WindowID(#frmMain))
eg = EditorGadget(#EditorGadget,8,8,184,84)
SendMessage_(eg, #EM_SETTARGETDEVICE, 0, 0) ; automatischer Zeilenumbruch
SendMessage_(eg, #EM_SHOWSCROLLBAR, #SB_VERT, #False) ; kein Scrollbar
SetFocus_(eg)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadgetID()
Case #EditorGadget
If CountGadgetItems(#EditorGadget) > 5
MessageRequester(" Zeilenzahl begrenzen", "Der Text ist zu lang!", #MB_OK|#MB_ICONWARNING)
LimitEGRows(#EditorGadget, 5)
EndIf
EndSelect
Case #PB_Event_CloseWindow
quitWindow = 1
EndSelect
Until quitWindow
Code: Alles auswählen
SendMessage_(eg, #EM_SETTARGETDEVICE, 0, 0) ; automatischer Zeilenumbruch