Seite 2 von 2
Verfasst: 27.01.2006 20:19
von ts-soft
Thorsten1867 hat geschrieben: und beim zeilenweisem Auslesen werden die #CRLF$ unterschlagen.

Da wird nichts unterschlagen
Es sind ja keine Zeilenumbrüche vorhanden im Text, es wird nur ein Umbruch dargestellt, rein visuell
Verfasst: 27.01.2006 20:30
von Thorsten1867
ts-soft hat geschrieben:Da wird nichts unterschlagen
Es sind ja keine Zeilenumbrüche vorhanden im Text, es wird nur ein Umbruch dargestellt, rein visuell
Wenn ich es mit GetGadgetText() auslese, sind die manuell eingefügten Zeilenumbrüche vorhanden, bei GetGadgetItemText() aber nicht ???
Verfasst: 27.01.2006 20:34
von Thorsten1867
Ich teste gerade einen völlig anderen Ansatz. Ich fürchte, das ist eine sehr radikale Methode, aber vielleicht lässt sie sich ja noch verfeinern.
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
Verfasst: 27.01.2006 21:28
von ts-soft
ich meinte, wenn du dieses:
Code: Alles auswählen
SendMessage_(eg, #EM_SETTARGETDEVICE, 0, 0) ; automatischer Zeilenumbruch
verwendest, existiert der Zeilenumbruch nur in der Ansicht, aber nicht im Text, also nur visuell