Startseite › Foren › Deutsches LiveCode-Forum › Inhalt einer Zeile eines Textfeldes auslesen
Schlagwörter: Textfeld Zeile auslesen
- Dieses Thema hat 14 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 1 Jahr, 4 Monaten von Torsten.
-
AutorBeiträge
-
-
Juni 4, 2023 um 09:32 Uhr #47700
Hallo LiveCoder,
ist es möglich, den Textinhalt, den eine bestimmte Zeile eines Textfeldes hat, auszulesen? Danke für eure Antworten ?
Peter
-
Juni 4, 2023 um 11:16 Uhr #47701
Hi Peter,
meinst Du:
... put line X of fld y into die_gewünschte_zeile ...
Oder wäre das zu einfach? 😀
Gruß
Klaus
-
Juni 4, 2023 um 18:51 Uhr #47704
Hi Klaus, danke für deine Idee.
Leider wird durch den line-Befehl nicht die im Textfeld angezeigte Zeile ausgegeben, sondern die Zeilenangabe identifiziert ausschließlich per “cr” produzierte Zeilen.
LG
Peter
-
Juni 4, 2023 um 20:21 Uhr #47705
No capisce, bitte näher präzisieren!
Meinst Du nur den sichtbaren Teil einer Zeile im Feld? -
Juni 5, 2023 um 07:57 Uhr #47706
Genau, gemeint ist der Teil einer Zeile, der als komplette Zeile eines Textfeldes erscheint ( in Abhängigkeit von Textfeldbreite, Fontart und -größe,word wrap eingeschaltet). Das heißt, ich möchte meinem Programm mitteilen, welcher Teil meines Textes zum Beispiel in Zeile 6 des Textfeldes angezeigt wird….
-
Juni 5, 2023 um 13:09 Uhr #47707
OK, ich denke, ich habe eine Lösung mit “measuretext”.
Was genau möchtest Du sehen? Wieviele Buchstaben in angezeigt werden, also
eventuell auch mitten im Wort, oder wieviele GANZE Wörter angezeigt werden?Gruß
Klaus
-
Juni 10, 2023 um 19:26 Uhr #47708
<span style=”font-family: ‘courier new’, courier, monospace;”>Hallo Klaus, ich möchte den Inhalt einer bestimmten Zeile eines Textfeldes in einer Variablen abspeichern.</span>
-
Juni 11, 2023 um 14:26 Uhr #47709
Ja, ich glaube, soweit waren wir schon! 😎
Ich meine, möchtest du den Text eventuell abgeschnitten sehen, weil er so im Textfeld erscheint?
Z.B.:
Wir freuen uns, Sie hier in unserem Hause begrü| -> Feld rechts zu Ende (…ßen zu dürfen!)
Oder einen sichtbaren und SINNVOLLEN Teil des Satzes, auch wenn noch ein paar Buchstaben mehr zu sehen sind:
Wir freuen uns, Sie hier in unserem Hause |Versrtehst Du, was ich meine?
-
Juni 15, 2023 um 10:50 Uhr #47714
Hi Klaus,
ich habe mal kurz mit measureText probiert, indem ich eine Textbox mit Text dynamisch verändere (und damit ja auch die Umbrüche). Aber die Werte für measureText sind immer gleich. Wie willst Du da etwas rauslesen?
Beste Grüße
Torsten
-
Juni 15, 2023 um 11:21 Uhr #47715
Aber die Werte für measureText sind immer gleich.
Bei mir aber nicht! Wie misst Du denn?
Zeig mal Dein Skript, bitte. -
Juni 15, 2023 um 11:41 Uhr #47716
das card script:
on resizeStack showMeasureText pass resizeStack end resizeStack command showMeasureText put the text of field "Text" into tText put measureText(tText,field "Text","width") into tWidth put measureText(tText,field "Text","size") into tSize put measureText(tText,field "Text","bounds") into tBounds put "Width:" && tWidth & cr & \ "Size:" && tSize & cr & \ "Bounds:" && tBounds into field "measureText" end showMeasureText
Ergebnis ist immer:
Width: 2002
Size: 2002,14
Bounds: 0,-11,2002,3 -
Juni 15, 2023 um 11:56 Uhr #47717
Tja, wenn Du immer einen Text mit der SELBEN Länge misst, ist doch wohl nichts Anderes zu erwarten, oder? 😀
Hier mein Ergebnis und Skript.
1. Text Zeile 1 ist ein Werbetext von ADOBE:
“From Adobe docs: scaleMode Specifies the scaling mode of the Flash movie within the Stage. This string property has four legal values: “exactFit” , “showAll” , “noBorder” , and “noScale”.”
2. Feld ist 670 pixel breit.
3. Ich will wissen, wiewiel Text( welche Buchstaben) in der ersten Zeile angezeigt wird:Button Skript:
on mouseUp put line 1 of fld "f1" into tText put the millisecs into tMS ## Habe einen kleinen Wert genommen um auch zu sehen wie SCHNELL measuretext ## arbeitet. SEHR schnell, kann ich sagen :-) put char 1 to 9 of tText into tText2 put the width of fld 1 into Breite ## Ich messe den Text mit immer einem Buchstaben mehr, bis es nicht mehr passt. repeat with i = 10 to 5000 put char i of tText after tText2 put measuretext(tText2,fld "f1") into tWidth ## Hier müsste man die Breite des Scrollbalken abziehen. if tWidth = (Breite - 5) then exit repeat end if end repeat put the millisecs - tMS & CR & tWidth & CR & tText2 end mouseUp
Ergebnis, muss noch etwas feingestimmt werden, kommt aber ungefähr hin:
—————————————
1
665
From Adobe docs:scaleMode Specifies the scaling mode of the Flash movie within the Stage. This string property h
—————————————
GrußKlaus
-
Juni 15, 2023 um 14:10 Uhr #47718
Ah jetzt ja!
Ich verstehe, worauf Du hinauswillst, jetzt musst Du allerdings z.B. die vierte Zeile auslesen, d.h. Du musst den Wert der ersten Zeile messen, dann die Breite der zweiten Zeile etc.
Problem könnten dabei die unterschiedlich langen Räume am rechten Rand sein, wenn umgebrochen wird. Da musst Du das letzte Wort bzw. dessen erste Buchstaben wieder abziehen, um diese für diue nächste Zeile einzusetzen.In der jetzigen Form gehst Du davon aus, dass nicht umgebrochen wird, aber so kann man das Problem generell lösen, cool.
PS: mit dem Ansatz könnte man auch umgekehrt arbeiten, man hat einen Fliesstext im Field und will an anstatt der automatischen Umbrüche CRs setzen 😉
Beste Grüße
Torsten -
Juni 15, 2023 um 17:54 Uhr #47719
Die Aufgabe ist, herauszufinden, wieviel Text in einer Zeile zu sehen (sic!) ist.
Also füge ich einem kurzen Text immer einen weiteren Buchstaben hinzu und wenn das Ergebnis
measuretext() >= (Breite des Feldes – Scrollbarbreite)
ist, habe ich den SICHTBAREN String der X-ten Zeile des Feldes, den ich dann anzeigen kann.
Nicht mehr und nicht weniger, n’est-ce-pas?Quasi -> reverse enginered formattedwidth
Und ja, damit kann man noch eine Menge mehr machen!
Funktion des Monats: measuretext() 😀 -
Juni 16, 2023 um 15:29 Uhr #47722
Hallo Peter,
hier ist die Funktion, die das tut, was Du brauchst, nämlich die visuell sichtbare Zeile eines Feldes auszulesen.
Bedienung:
put textFromLine("die Zahl meiner Zeile", "der Name des Feldes") into tMeineZeile
also:
put textFromLine(3, "Text")
liefert den Text der dritten Zeile von field “Text”.Viel Spass damit!
PS: Muchas gracias an Klaus, der den entscheidenden Tipp gegeben hat. Man muss dazu sagen, dass measureText wirklich nur die Breite des visuellen Textes misst. Um zu ermitteln, ob dieser Text in ein Feld passt, muss man noch den Scrollbar (wenn vorhanden) und die Margins (2*!) von der Breite des Feldes abziehen.Happy Scripting!
TorstenLivecode:
------------------------------------------------ function textFromLine tLineIndex, tFieldName ------------------------------------------------ -- tLineIndex = Nummer der Zeile, deren Text man sehen möchte -- wenn tLineIndex empty oder ein Zeichen (z.B. "alle)") ist, werden alle sichtbaren Zeilen als getrennte Zeilen zurückgegeben -- tFieldName = Name des Feldes, in dem der Text steht ------------------------------------------------- put 16 into tvScrollOffset --> Breite des vertikalen Scrollbars (ist das immer so, keine Ahnung) put field tFieldName into tText put the width of field tFieldName into tFieldWidth put the margins of field tFieldName into tMargins put tFieldWidth - (tMargins * 2) into tFieldWidth if the vScrollbar of field tFieldName is true then put tFieldWidth - tvScrollOffset into tFieldWidth end if repeat for each line tLine in tText put empty into tCurrentLine put 1 into tWordIndex put 1 into tStartWord repeat if word tWordIndex of tLine is empty then put word tStartWord to tWordIndex - 1 of tLine into tDisplayedLine put tDisplayedLine & return after tReturnText exit repeat end if put word tStartWord to tWordIndex of tLine into tCurrentLine put measuretext(tCurrentLine,field tFieldName) into tCurrentLineWidth if tCurrentLineWidth > tFieldWidth then subtract 1 from tWordIndex put word tStartWord to tWordIndex of tLine into tDisplayedLine put tDisplayedLine & return after tReturnText put tWordIndex + 1 into tWordIndex put tWordIndex into tStartWord next repeat end if add 1 to tWordIndex end repeat end repeat ## Wird eine Zeilennummer angegeben, beklommt man den Text genau dieser Zeile zurück ## Wenn keine Nummer übergeben wurde, wird der gesamte Text mit eingefügten Returns zurückgegeben if tLineIndex is a number then return line tLineIndex of tReturnText else return tReturnText end if end textFromLine
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.