Seite 2 von 2

Verfasst: 27.01.2006 20:19
von ts-soft
Thorsten1867 hat geschrieben: und beim zeilenweisem Auslesen werden die #CRLF$ unterschlagen. :cry:
Da wird nichts unterschlagen :wink:
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 :wink:
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. :wink:

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