Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13-04-2004, 22:16   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Beiträge: 38
Textfeldschriftgröße dem Textfeld anpassen

Hallo,

ich habe folgende Idee/Problem:
Ich habe ein dynamisch erzeugtes mehrzeiliges Textfeld fester Breite und fester Höhe, sowie eine feste Schriftart und -Größe für das Feld.
Nun wird dynamisch ein Text in das mehrzeilige Textfeld geladen. Es soll jetzt überprüft werden, ob der Text vollständig in das Textfeld passt, wenn ja ist alles wunderbar, wenn nein, so soll die Schriftgröße um eins verkleinert werden und wieder überprüft werden usw.
Somit soll gewährleistet werden, dass ein Text (egal wie lange) immer komplett in dem Textfeld sichtbar ist.
Meine Idee, war abzufragen, ob textfield.maxscroll ungleich 1 ist, denn dann könnte man noch runterscrollen, also ist die Schrift (noch) zu groß.
Es funktioniert auch teilweise . Problematisch wird es, wenn nur ein paar Pixel von der Schrift abgeschnitten werden, denn dann ist maxscroll zwar 1, der Text passt aber nicht .
Ich habe mal eine fls Datei beigelegt, an der genau so ein Problem zu sehen ist.
Hat jemand eine bessere Idee, wie man abfragen kann, ob der Text ins Textfeld passt?
Angehängte Dateien
Dateityp: zip test.zip (2,2 KB, 3x aufgerufen)
realtigger ist offline   Mit Zitat antworten
Alt 13-04-2004, 23:51   #2 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
hm wie wärs mit textHeight:
ActionScript:
  1. function getMaxFontSize(mytextfield) {
  2.     while (mytextfield.textHeight>mytextfield._height) {
  3.         var mytextformat = mytextfield.getTextFormat();
  4.         mytextformat.size--;
  5.         mytextfield.setTextFormat(mytextformat);
  6.         trace("  _height: "+mytextfield._height+"  size: "+mytextformat.size+"  textHeight: "+mytextfield.textHeight);
  7.         if (mytextformat.size<4) {
  8.             break;
  9.         }
  10.     }
  11. }
  12. _root.createTextField(thetextfield, 100, 10, 10, 200, 30);
  13. thetextfield.wordWrap = true;
  14. var textformat = new TextFormat("arial", 30);
  15. thetextfield.setNewTextFormat(textformat);
  16. thetextfield.text = "everything wrong";
  17. getMaxFontSize(thetextfield);

Geändert von michael (13-04-2004 um 23:52 Uhr)
michael ist offline   Mit Zitat antworten
Alt 14-04-2004, 17:41   #3 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Beiträge: 38
Danke für die Antwort. Das war auch genau mein erster versuch und letztentlich bin ich zu diesem auch wieder zurückgekehrt.
Das Problem ist hierdurch aber nicht ganz aus dem weg geräumt, wenn man diesen Actionscriptcode benutzt:
ActionScript:
  1. function getMaxFontSize(mytextfield) {
  2.         while ((mytextfield.textHeight> mytextfield._height)) {
  3.                 var mytextformat = mytextfield.getTextFormat();
  4.                 mytextformat.size--;
  5.                 mytextfield.setTextFormat(mytextformat);
  6.                 trace(mytextfield + "  _height: "+mytextfield._height+"  size: "+mytextformat.size+"  textHeight: "+mytextfield.textHeight);
  7.                 if (mytextformat.size<4) {
  8.                         break;
  9.                 }
  10.         }
  11. }
  12.  
  13. var textformat = new TextFormat("arial", 30);
  14.  
  15. _root.createTextField("thetextfield", 100, 10, 10, 200, 30);
  16. thetextfield.wordWrap = true;
  17. thetextfield.border = 1;
  18. thetextfield.setNewTextFormat(textformat);
  19. thetextfield.text = "everything wrong";
  20. getMaxFontSize(thetextfield);

Das Ergebnis ist vielmehr identisch zu meiner Ausgangssituation mit der Abfrage nach maxscroll. Der Text "everything wrong" wird nicht korrekt angeziegt, da die g's unten abgeschnitten sind.
Der trace gibt zwar aus, dass die Schrift ins Textfeld reinpassen müsste (Schrifthöhe 28 Pixel und Textfeldhöhe 30 Pixel).
Meiner Meinung nach liegt das Problem daran, dass der text im Textfeld nicht an Pixelposition 0 beginnt sondern ein ca. 2px unterhalb. Wenn jetzt unten noch 2px "fehlen", so ist der Text eigentlich 32 Pixel groß und somit größer als 30 Pixel.
Mein workaround ist nun, dass ich bei der Abfrage einfach 4 Pixel zu der Größe des Textes dazuaddiere. Die Abfrage in der while-Schleife heißt also nun:
ActionScript:
  1. while (mytextfield.textHeight +4 > mytextfield._height) {
Für das Bsp. hier funktioniert das auch, d.h. der Text wird vollständig angezeigt, da er einmal mehr verkleinert wird. Wie soll ich jedoch sicher gehen, dass es bei einer anderen Kombination von Schriftart, -größe, Textfeldgröße und Textmenge nicht zu ähnlichen Problemen kommt?
Hat noch jemand vielleicht eine andere Idee?
realtigger ist offline   Mit Zitat antworten
Alt 14-04-2004, 22:57   #4 (permalink)
Banned
 
Benutzerbild von projecktx
 
Registriert seit: Sep 2003
Beiträge: 2.071
vielleicht so:
ActionScript:
  1. while ((mytextfield.textHeight> (Num(mytextfield._height)-2))) {

dann vergleichste ja mit höhe -2 px

gruss sascha
projecktx ist offline   Mit Zitat antworten
Alt 16-04-2004, 21:53   #5 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Beiträge: 38
Naja, genau das mache ich ja, nur eben nicht mit 2 Pixel Differenz, sondern 4 Pixel - 2 waren zu wenig, das hatte ich probiert.
Im Prinzip scheint die Lösung jetzt auch zu funktionieren. 100%ig sicher, dass man alle eventualitäten abgedeckt hat kann man sich aber leider nicht sein, da ja schon ein wenig getrickst wurde
realtigger 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:24 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele