Seite 1 von 1
EditorGadget mit feste Anzal von Zeilen
Verfasst: 17.11.2011 17:34
von marcelx
Hallo,
ich möchte EditorGadget mit eine fest Anzahl von Zeilen verwenden.
Mit folgende code:
Code: Alles auswählen
EditorGadget(#edit, 10, 25, 230, 130)
SendMessage_(GadgetID(edit), #EM_SETTARGETDEVICE, #Null, 0)
wird die Eingabe der Text auf die Breite der Fenster realisiert. Wunderbar.
Wenn ich aber mehr Zeilen eingebe als mein Fenster, erscheint die Scroll-bar und in mein Gadget werden mehr Zeilen abgelegt.
Also, ich möchte mehere Zeilen als in mein Eingabefenster passt verbieten.
Gibt es dafür schon eine Lösung und wo?
Danke,
MarcelX
Re: EditorGadget mit feste Anzal von Zeilen
Verfasst: 17.11.2011 18:03
von c4s
Kurz und schmerzlos: Es geht nicht.
Du kannst höchstens die Zeilen zählen und wenn die maximale Anzahl erreicht ist, die letzte immer löschen.
Re: EditorGadget mit feste Anzal von Zeilen
Verfasst: 17.11.2011 18:04
von ts-soft
Mit #EM_SETLIMITTEXT kannst Du die Anzahl Zeichen begrenzen, was in diesem Falle eher nicht nutzt.
Mit SendMessage_(hwnd, #EM_GETLINECOUNT, 0, 0) kannst Du die Anzahl Zeilen ermitteln. Wenn über
Max, dann eben die letzte Zeile wieder löschen. Das ganze elegant umsetzen wirst Wohl selber machen
müssen.
Gruß
Thomas
Re: EditorGadget mit feste Anzal von Zeilen
Verfasst: 17.11.2011 18:42
von marcelx
Gut b.z.w. weniger gut.
Mit "letzte Zeile wieder löschen" wäre nur ok, wenn am Ende eine Zeile eingefügt wird.
Wenn in den Text ein CR eingefügt wird, müsste diese neue Zeile gelöscht erdenn.
Gruß
MarcelX
Re: EditorGadget mit feste Anzal von Zeilen
Verfasst: 17.11.2011 19:24
von ts-soft
Nicht sehr Elegant, aber als erster Ansatz
Code: Alles auswählen
EnableExplicit
Procedure Editor_GetLine(gadget)
Protected.CHARRANGE Range
SendMessage_(GadgetID(gadget), #EM_EXGETSEL, 0, @Range)
ProcedureReturn SendMessage_(GadgetID(gadget), #EM_EXLINEFROMCHAR, 0, Range\cpMin) + 1
EndProcedure
OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "")
EditorGadget(0, 0, 0, 640, 480)
SendMessage_(GadgetID(0), #EM_SETTARGETDEVICE, 0, 0)
SetActiveGadget(0)
Define Line, MaxLines = 10
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow : Break
Case #PB_Event_Gadget
Select EventGadget()
Case 0
If SendMessage_(GadgetID(0), #EM_GETLINECOUNT, 0, 0) > MaxLines
RemoveGadgetItem(0, line)
Else
line = Editor_GetLine(0)
EndIf
EndSelect
EndSelect
ForEver
Re: EditorGadget mit feste Anzal von Zeilen
Verfasst: 17.11.2011 19:47
von RSBasic
Falls du die Anzahl der Zeilen auf die Höhe des Gadgets begrenzen möchtet, könntest du vielleicht stattdessen ein StringGadget nehmen.
Mit Zeilenumbruch und Multiline:
Code: Alles auswählen
EnableExplicit
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
StringGadget(1,10,10,480,100,"Testzeile", #ES_MULTILINE|#ESB_DISABLE_LEFT|#ESB_DISABLE_RIGHT)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Da passen insgesamt 7 Zeilen hinein. Wenn du die Anzahl verringern oder erhöhen möchtest, musst du nur die Höhe des Gadgets anpassen. (Falls das für dich eine Lösung sein sollte. Wenn nicht, dann ist die Variante von ts-soft ganz gut.)
Re: EditorGadget mit feste Anzal von Zeilen
Verfasst: 18.11.2011 13:10
von marcelx
Danke für die Antworten.
Ich hatte am Anfang auch so probiert:
Code: Alles auswählen
StringGadget(1,10,10,480,100,"Testzeile", #ES_MULTILINE|#ESB_DISABLE_LEFT|#ESB_DISABLE_RIGHT)
Was wunderbar ist. Nun, ich habe als Text Z.b.:
In meine Variable text finde ich die neue Zeile, welche von mir sind(Chr(13)+Chr(10)) und welche von den StringGadget nicht.
Wenn ich ein split mit "Chr(13)+Chr(10)" finde ich die von StringGadget nicht.
Gruß
MarcelX