Seite 1 von 1
Problem mit mehrzeiligem StringGadget()
Verfasst: 28.04.2008 17:08
von Fusselohr
Hallo an alle

,
ich hätte da ein kleines Problem mit dem mehrzeiligen StringGadget. Ich möchte nämlich 4 Zeilen auslesen, doch er liefert mir nur einen String ohne irgendeinen Zeilenumbruch... außer ich drücke eben jedes mal Enter. Könnte mir jemand helfen wie ich das anstellen sollte, damit ich endlich die einzelnen Zeilen bekommen

.
Schönen Gruß,
Fusselohr
Verfasst: 28.04.2008 17:11
von ts-soft
Code? Und wer ist er? Der Debugger zeigt keine Umbrüche an!
Verfasst: 28.04.2008 17:20
von Fusselohr
Ich hab hier einfach nur das Stringgadget genommen:
Code: Alles auswählen
StringGadget(4,20,25,270,60,"",#ES_MULTILINE|#ESB_DISABLE_LEFT|#ESB_DISABLE_RIGHT)
Und das (oder auch er

):
Code: Alles auswählen
If FindString(GetGadgetText(4),Chr(13)+Chr(10),0)
End
EndIf
Hier ist der komplette Code:
Code: Alles auswählen
If OpenWindow(0, 556, 332, 270, 158, "Kommentar",#PB_Window_SystemMenu|#PB_Window_Invisible|#PB_Window_ScreenCentered)
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,#WS_EX_TOOLWINDOW)
ResizeWindow(0,#PB_Ignore,#PB_Ignore, 310, 158)
ShowWindow_(WindowID(0),#SW_SHOW)
If CreateGadgetList(WindowID(0))
ButtonGadget(1, 70, 120, 80, 25, "Okay")
ButtonGadget(2, 165, 120, 80, 25, "Abbrechen")
Frame3DGadget(3, 10, 5, 290, 100, "Kommentar einfügen")
StringGadget(4,20,25,270,60,"",#ES_MULTILINE|#ESB_DISABLE_LEFT|#ESB_DISABLE_RIGHT)
EndIf
EndIf
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
If FindString(GetGadgetText(4),Chr(13)+Chr(10),0)
End
EndIf
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
Verfasst: 28.04.2008 17:36
von ts-soft
Bei mir beendet er, wenn ich einen Zeilenumbruch im Text habe und Okay
drücke.
Die Kombination Deiner Konstanten fürs Stringgadget ist IMHO nicht erlaubt,
müßte ich aber erstmal nachschauen.
Und FindString sollte bei dem ersten Zeichen und nicht bei 0 beginnen

Verfasst: 28.04.2008 17:50
von Fusselohr
Bei mir beendet er, wenn ich einen Zeilenumbruch im Text habe und Okay
drücke.
Jup bei mir auch. Aber wenn ich einfach nur ne Reihe von "g" eingebe bis er in die nächste Zeile hüpft dann aktzeptiert ers nich ^^.
Die Kombination Deiner Konstanten fürs Stringgadget ist IMHO nicht erlaubt,
müßte ich aber erstmal nachschauen.
Okay danke

.
Und FindString sollte bei dem ersten Zeichen und nicht bei 0 beginnen
Merk ich mir.
Gruß Fusselohr
Verfasst: 28.04.2008 18:01
von ts-soft
Fusselohr hat geschrieben:Bei mir beendet er, wenn ich einen Zeilenumbruch im Text habe und Okay
drücke.
Jup bei mir auch. Aber wenn ich einfach nur ne Reihe von "g" eingebe bis er in die nächste Zeile hüpft dann aktzeptiert ers nich ^^.
Dann ist ja auch kein LineFeed oder CarriageReturn (Chr(10/13)) vorhanden,
sondern es wird nur im Gadget umgebrochen (nur die Ansicht).
//edit
Das sind Scrollbarkonstanten, also falsch, auch wenn die Werte etwas bewirken.
Verfasst: 28.04.2008 19:08
von Fusselohr
aha, und kann man da dann irgendwie noch ein Zeilenumbruch oder so setzten, es gibt ja je nach schriftbreite eine unterschiedliche Zahl an Zeichen... ?
Verfasst: 28.04.2008 22:53
von hjbremer
wie wäre es mit folgender Idee ?
http://www.purebasic.fr/german/viewtopi ... textbreite
und da den Beitrag von Stargate die Prozedur Einlesen
1.Font Laden + SetFont
2.Fontzeichenbreiten einlesen
3.FindString durch Countstring ersetzen, finde ich besser
4.Chr(13)+Chr(10) durch #CRLF$ ersetzen
5.
Code: Alles auswählen
Case #button1
string$ = GetGadgetText(#string1)
anz = CountString(string$, #CRLF$)
If anz
Debug "CRLF vorhanden"
Else
x$ = string$
br = 0
For j = 0 To Len(x$)-1
br + ZeichenLen(PeekB(@x$+j))
If br > #string1br
Break
EndIf
Next
zeile1$ = Left(x$,j-1)
Debug zeile1$
EndIf
6.letztes Leerzeichen suchen
7.mit LEFT string abschneiden
8.solange wiederholen bis Kommentar abgearbeitet
9. oder so ähnlich wie du willst
Verfasst: 08.05.2008 19:29
von Fusselohr
Vielen Dank hjbremer klappt wunderbar ^^.
Mit sehr freundlichen Grüßen,
Fusselohr