Automatische skalierung von dyn. Textfeldern

FlorianR

Erfahrenes Mitglied
Guten Morgen,

ich arbeite zur Zeit an einem Flashfrontend für ein CMS.
Über eine XML Datei werden Inhalte ausgelesen und in ein über actionscript erstelltes Textfeld gelegt (danke Tobias :D). Nun sind die Inhalte meistens (logischerweise) mehrere Zeilen lang, das Textfeld besteht aber nur aus einer Zeile. Ist es möglich das sich das Textfeld dem Textinhalt anpasst und das sich ein zweites Textfeld mit dem zweiten Inhalt direkt unter das erste Textfeld legt (in der Regel sind es mehrere Inhalte, die sich über mehrere Zeilen erstrecken).

Ich bin gespannt.

Gruß,
Florian
 
Hi,

mit
Code:
textfeld.autoSize = true;
passt sich ein mehrzeiliges Textfeld automatisch der Texthöhe an (die Breite steht bei mehrzeiligen Textfeldern fest bzw. wird manuell gesetzt).

Um die Textfelder mit gleichbleibendem Abstand untereinander anzuordnen, schreibst Du sie am besten in ein Array, wartest mindestens einen Frame (bis Du lesend auf die automatisch angepasste Höhe zugreifen kannst) und verfährst dann wie folgt:
Code:
for (var i=0; i<textfelder.length; i++) {
    if (i == 0) textfelder[i]._y = 0; // Oder eine beliebige Standardposition
    if (i > 0) textfelder[i]._y = Math.round(textfelder[i - 1]._y + textfelder[i - 1]._height + abstand);
}
("abstand" ist eine Variable mit einem gewünschten Mindestabstand)

Gruß
.
 
Hallo,

mit den Eigenschaften "wordWrap", "multiline" und "autoSize" der TextField-Klasse kannst du ein Textfeld so konfigurieren, dass es sich automatisch seinem Inhalt anpasst. Mit den Eigenschaften "_width" und "_height" kannst du die Masse deines Textfeldes auf den Pixel genau festlegen, der Inhalt des Textfeldes wird nicht skaliert.
In der Flahs-Hilfe findest du genauere Erklärungen und Beispiele zu jeder erwähnten Eigenschaft.

Eine dynamische Anordnung von verschieden grossen Textfeldern müsstest du skripten, es gibt keine native Funktion dafür.


gruss

EDIT: ARRGH ;)
 
Vielen Dank für eure Antworten, werde ich gleich mal testen. Eine kleine Frage habe ich noch, ich habe dazu nichts in der Flash-Hilfe gefunden. Ich habe eine PIXELFont via Actionscript eingebettet und die größe auf "8" gesetzt. Nun ist diese Font natürlich unscharf. In der Flashoberfläche kann man das Anti-Aliasing aus und anschalten, aber wie stelle ich das in Actionscript ein?
 
Hallo,

bei den Konfigurationsoptionen des Font-Symbols in der Bibliothek kannst du diese Einstellung vornehmen. Ab Flash 8 kannst du die Antialiasing-Settings mit den Eigenschaften "sharpness", "thickness" und "antiAliasType" konfigurieren.


gruss
 
Ich habe es mal so gemacht, wobei er mir da die drei eigenschaften "antiAliasType", "gridFitType" und "sharpness" als Fehler kennzeichnet.

HTML:
var fff1:TextFormat = new TextFormat();
			fff1.font = "fff1";
			fff1.size = 8;
			fff1.antiAliasType = "advanced";
			fff1.gridFitType = "pixel";
			fff1.sharpness = 0;
 
Hallo,

es sind dies auch alles Eigenschaften der TextField- und nicht der TextFormat-Klasse. Dort musst du entsprechende Konfigurationen auch vornehmen.


gruss
 
Ah okay! Dann ist es kein Wunder, dass er mir einen Fehler ausgibt. Danke, wenn ich euch nicht hätte...
 
Hi,

mit
Code:
textfeld.autoSize = true;
passt sich ein mehrzeiliges Textfeld automatisch der Texthöhe an (die Breite steht bei mehrzeiligen Textfeldern fest bzw. wird manuell gesetzt).

Um die Textfelder mit gleichbleibendem Abstand untereinander anzuordnen, schreibst Du sie am besten in ein Array, wartest mindestens einen Frame (bis Du lesend auf die automatisch angepasste Höhe zugreifen kannst) und verfährst dann wie folgt:
Code:
for (var i=0; i<textfelder.length; i++) {
    if (i == 0) textfelder[i]._y = 0; // Oder eine beliebige Standardposition
    if (i > 0) textfelder[i]._y = Math.round(textfelder[i - 1]._y + textfelder[i - 1]._height + abstand);
}
("abstand" ist eine Variable mit einem gewünschten Mindestabstand)

Gruß
.

Zur Verständnis: textfelder wären dann bei meinem Beispiel

HTML:
Ueberschriften[i] = _root.inhalt.createTextField("fUeberschrift"+i, _root.inhalt.getNextHighestDepth(), 10, 10, 600, 100);
		Ueberschriften[i].text = XMLdaten.firstChild.childNodes[i].attributes.cmsUeberschrift;
		// Einstellungen:
		Ueberschriften[i].embedFonts = true;
		Ueberschriften[i].selectable = true;
		Ueberschriften[i].antiAliasType = "advanced";
		Ueberschriften[i].gridFitType = "pixel";
		Ueberschriften[i].sharpness = 5;
		Ueberschriften[i].setTextFormat(fff1);
		
		Texte[i] = _root.inhalt.createTextField("fText"+i, _root.inhalt.getNextHighestDepth(), 10, 10, 830, 100);
		Texte[i].text = XMLdaten.firstChild.childNodes[i].attributes.cmsText;
		// Einstellungen:
		Texte[i].border = true;
		Texte[i].autoSize = true;
		Texte[i].wordWrap = true;
		Texte[i].embedFonts = true;
		Texte[i].selectable = true;
		Texte[i].multiline = true;
		Texte[i].antiAliasType = "advanced";
		Texte[i].gridFitType = "pixel";
		Texte[i].sharpness = 5;
		Texte[i].setTextFormat(fff1);

Einmal Ueberschriften[ i ] und Texte[ i ] - oder?
 
Hi,

wenn die Überschriften und Inhalte untereinander angeordnet werden sollen, ist es sinnvoller, ein Array für alle Textfelder zu verwenden.

Gruß
.
 
Zurück