Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-01-2005, 16:00   #1 (permalink)
Rübennase
 
Benutzerbild von thomiko
 
Registriert seit: Dec 2003
Ort: Niederrhein
Beiträge: 291
Textfelder: Bestimmung des aktuellen Wortes

Hallo miteinander,

grundsätzlich möchte ich folgendes erreichen: wenn man mit dem Cursor über ein Textfeld fährt, dann soll AS wissen, über welchem Wort sich derzeit der Cursor bewegt.

Mein Ansatz war folgender: Ich habe den Text der dann in einem scrollbaren Textfeld erscheint, Wort für Wort in ein anderes Test-Textfeld mit dem gleichen Format und der gleichen Breite eingelesen und immer dann, wenn die Zeile zu lang wurde für das Textfeld, diese Zeile in einem Zeilen-Array gespeichert. Das klappt grundsätzlich auch nicht schlecht (siehe beigefügte .fla). Nur ist diese Lösung leider nicht ganz genau aus Gründen, die sich mir leider nicht erschließen. So wird z.B. bei "90.000" (aus der letzten bzw. vorletzten Zeile) einmal umgebrochen, einmal nicht. Wenn ich die Breitenzahl variiere, geschieht der Umbruch im Test-Textfeld nie ganz genau so wie im Anzeige-Textfeld.

Irgendwelche Ideen dazu?

Andere Frage: Gibt es eine direkte Möglichkeit, bei einem mehrzeiligen scrollbaren Textfeld den Text aus einer bestimmten Zeile auszulesen (z.B. aus der aktuellen "scroll"-Zeile)?

Letzte Frage: Gibt es für das grundsätzliche Problem ("wenn man mit dem Cursor über ein Textfeld fährt, dann soll AS wissen, über welchem Wort sich derzeit der Cursor bewegt") eine einfachere elegantere Lösung (ohne für jedes Wort im Textfeld einen unsichtbaren MC zu kreieren)?

Vielen Dank im voraus,

Thomas
Angehängte Dateien
Dateityp: zip textlen.zip (30,6 KB, 3x aufgerufen)
thomiko ist offline   Mit Zitat antworten
Alt 26-01-2005, 20:12   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
sieht nicht gut aus.
hab ich selbst noch nie benützt, aber probier mal, ob du damit was anfangen kannst:
TextSnapshot.hitTestTextNearPos()
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 27-01-2005, 00:00   #3 (permalink)
Rübennase
 
Benutzerbild von thomiko
 
Registriert seit: Dec 2003
Ort: Niederrhein
Beiträge: 291
Zitat:
Zitat von hgseib
TextSnapshot.hitTestTextNearPos()
Das bringt leider nichts, da es laut Hilfe nur auf statischen Text anwendbar ist.

Mein bisheriges Vorhaben dürfte wohl nicht zu verwirklichen sein. Deshalb habe ich mein Ziel etwas angepasst und dafür eine einfache, gut funktionierende Lösung gefunden. Und zwar wird das aktuelle Wort unter dem Cursor nicht beim Drüberfahren, sondern beim Draufklicken bestimmt.

Hier der Code (vielleicht braucht's jemand):

ActionScript:
  1. var splitString:String = String.fromCharCode(13)//'return'
  2. ...
  3. ref["display"].onSetFocus = function() {   // ref["display"] ist das Textfeld
  4.     onEnterFrame = function () {
  5.         // bestimme die aktuelle Cursorposition im Textfeld
  6.         var val = Selection.getCaretIndex();
  7.         // die Bestimmung der aktuellen Cursorposition braucht ein paar Millisekunden (deshalb das onEnterFrame)
  8.         // solange val nicht die tatsächliche aktuelle Cursorposition bekommen hat, hat es den Wert -1
  9.         if (val != -1) {
  10.             // display_text ist der Text der zuvor ref["display"] zugewiesen wurde
  11.             // befindet sich der Cursor innerhalb eines Wortes??
  12.             if (display_text.charAt(val - 1) != " " && display_text.charAt(val) != " " && display_text.charAt(val - 1) != splitString && display_text.charAt(val) != splitString) {
  13.                // nun werden die Indizes des ersten und letzten Buchstaben des Wortes gesucht
  14.                // beiden Werten wird erst einmal die aktuelle Cursorposition zugewiesen
  15.                 before = after = val;
  16.                 // rückwärts laufen bis Leerstelle oder Zeilenumbruch kommt
  17.                 while (display_text.charAt(before) != " " && display_text.charAt(before) != splitString) {
  18.                     before--;
  19.                 }
  20.                 // vorwärts laufen bis Leerstelle oder Zeilenumbruch kommt
  21.                 while (display_text.charAt(after) != " " && display_text.charAt(after) != splitString) {
  22.                     after++;
  23.                 }
  24.                 // Bestimmung des aktuellen Wortes
  25.                 word = display_text.slice(before + 1, after);
  26.                 trace(word);
  27.                 // ... hier dann fröhliche Weiterverarbeitung des Wortes
  28.             }
  29.             // WICHTIG: hier wird dem Textfeld der Fokus "gestohlen"
  30.             // sonst passiert beim zweiten, dritten, etc. Klick nacheinander ins Textfeld nichts!
  31.             Selection.setFocus(null);
  32.             delete onEnterFrame;
  33.         }
  34.     };
  35. };


Grüßle,

Thomas
thomiko ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele