Zurück   Flashforum > Flash > Flash Einsteiger

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25-09-2009, 16:33   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2006
Beiträge: 491
Exclamation StaticText zu DynamicText

Ich möchte in einer externen, nicht mehr editierbaren, kompilierten SWF-Datei ein Objekt des Typs StaticText als DynamicText darstellen lassen.
Grund dafür ist, dass ich den StaticText für den Benutzer selektierbar machen möchte - was allerdings nur bei DynamicText möglich ist (ist doch so?).

Normalerweise würde man das Textfeld im Designmodus einfach anwählen und dann statt "Statisch" "Dynamisch" auswählen.
- Das geht hier so einfach leider nicht - denn ich muss das ganze direkt über ActionScript durchführen (warum: s.o.).

Der StaticText beinhaltet außerdem farbliche und schriftgewichtige (fett, kursiv, unterstrichen) Formatierungen - und zwar passagenweise.
Diese Formatierungen würde ich gerne verlustfrei beibehalten.

Vielleicht kann mir ja jemand hierzu einen Tip geben.
Vielen Dank für eure Antworten im Voraus!
Mit freundlichen Grüßen
Firemice
Firemice ist offline   Mit Zitat antworten
Alt 25-09-2009, 23:13   #2 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.499
Zitat:
was allerdings nur bei DynamicText möglich ist (ist doch so?).
nein - is es nicht.

mfg

sx
shin10 ist offline   Mit Zitat antworten
Alt 26-09-2009, 00:48   #3 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Über AS kannst du nur auf Textfeldinstanznamen zugreifen. Statische Texte haben aber leider keine Instanznamen, höchstens programminterne Bezeichner... Du müsstest dir also einen Decompiler besorgen, die swf als fla neuaufbereiten und die Textfelder manuell auf dynamisch setzen. Aber bitte das Urheberrecht berücksichtigen...
  Mit Zitat antworten
Alt 26-09-2009, 13:47   #4 (permalink)
Neuer User
 
Registriert seit: Aug 2006
Beiträge: 491
Arrow

Zitat:
Zitat von agedoubleju Beitrag anzeigen
Über AS kannst du nur auf Textfeldinstanznamen zugreifen. Statische Texte haben aber leider keine Instanznamen, höchstens programminterne Bezeichner... Du müsstest dir also einen Decompiler besorgen, die swf als fla neuaufbereiten und die Textfelder manuell auf dynamisch setzen. Aber bitte das Urheberrecht berücksichtigen...
Ich habe mich in verschiedenen Foren erkundigt und habe mir schließlich etwas zurechtgebastelt - vielen Dank an alle Beteiligten.
Der unteren Funktion übergebe ich das DisplayObjekt einer externen SWF. - Dann werden alle dort enhaltenen statischen Textfelder iteriert:
Code:
function iterateObject(obj:DisplayObject) {
	var container:DisplayObjectContainer=obj as DisplayObjectContainer;

	if(getQualifiedClassName(obj) == "flash.text::StaticText")
	{
		
		var actualTextField:StaticText = obj as StaticText;
		if(actualTextField){
						
		}
	}
	
	if (container) {
		trace("iterating...");
		for (var i:uint; i<container.numChildren; ++i) {
			var child:DisplayObject=container.getChildAt(i);
			trace("recursive...");
			iterateObject(child);
		}
	}
}
Gut - jetzt habe ich also Zugriff auf alle Instanzen eines statischen Textfeldes.
Als nächstes müsste ich diese irgendwie umwandeln.
Als Alternative zum Umwandeln (wenn das nicht gehen sollte) stelle ich mir auch ein Neuerstellen eines dynamischen Textfeldes vor, wo dann die Parameter aus dem statischen Textfeld übernommen werden.
- Nur wie mache ich das z.B. mit den Formatierungen?

Vielen Dank für eure Antworten!
Mit freundlichen Grüßen
Firemice

Geändert von Firemice (26-09-2009 um 13:48 Uhr)
Firemice ist offline   Mit Zitat antworten
Alt 26-09-2009, 14:05   #5 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.499
Schau dir mal die TextSnapshot klasse an.

ein bisserl code zum schnellen antesten. einfach in eine neue fla kopieren und darin etwas statischen text anlegen.
zum markieren werden aber immer metrische daten der schrift benötigt und die hast du nur, wenn die schriftart irgendwo in deiner datei eingebettet wurde.
PHP-Code:
var tss:TextSnapshot this.textSnapshot;

var 
info tss.getTextRunInfo(0this.textSnapshot.charCount);
for (var 
i in info){
    
trace(iinfo[i]);
    var 
iObj info[i];
    for(var 
ii in iObj){
        
trace(iiiObj[ii]);
    }
}

tss.setSelectColor(0xff0000);

stage.addEventListener(MouseEvent.MOUSE_DOWNbeginSelectStaticText);
stage.addEventListener(MouseEvent.MOUSE_UPendSelectStaticText);
var 
idxA = -1;
var 
idxB = -1;

function 
beginSelectStaticText(e:MouseEvent):void{
    
idxA tss.hitTestTextNearPos(e.stageXe.stageY10);
    
trace(idxA);
}
function 
endSelectStaticText(e:MouseEvent):void{
    
idxB tss.hitTestTextNearPos(e.stageXe.stageY10);
    
tss.setSelected(0tss.charCountfalse);
    
    
tss.setSelected(Math.min(idxAidxB), Math.max(idxAidxB), true);
    
trace(idxB);

mfg
sx
shin10 ist offline   Mit Zitat antworten
Alt 26-09-2009, 14:44   #6 (permalink)
Neuer User
 
Registriert seit: Aug 2006
Beiträge: 491
Arrow

Vielen Dank für Deine Antwort.
Ich habe dieses Quellcode-Stück übernommen.
- Immer, wenn ich mit der Maus den Text zu markieren versuche, erhalte ich als Trace in der Ausgabe lediglich ein "-1".
- Was bedeutet das jetzt konkret?

Vielen Dank für die Antworten im Voraus!
Mit freundlichen Grüßen
Firemice
Firemice ist offline   Mit Zitat antworten
Alt 26-09-2009, 14:59   #7 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.499
das was getraced wird ist der index des zeichens in der nähe des cursors. einmal beim drücken, einmal beim loslassen der maustaste. -1 wäre also irgendwo neben dem text, oder bedeutet, dass der text nicht direkt in diesem displayobjectcontainer (hier this, also der bühne) liegt.

aber du hast ja schon ein script um tieferliegende texte zu finden.

//EDIT: du bekommst auch immer -1, wenn die schriftart nicht eingebettet ist.

Geändert von shin10 (26-09-2009 um 15:04 Uhr)
shin10 ist offline   Mit Zitat antworten
Alt 26-09-2009, 15:54   #8 (permalink)
Neuer User
 
Registriert seit: Aug 2006
Beiträge: 491
Arrow

Zitat:
Zitat von shin10 Beitrag anzeigen
[...]

//EDIT: du bekommst auch immer -1, wenn die schriftart nicht eingebettet ist.
Wenn die Schriftart nicht eingebettet ist... dann wird der Text doch trotzdem beim Endbenutzer korrekt angezeigt (wenn er dort nicht direkt im System installiert wurde)?

Vielen Dank für Deine Antwort!
Mit freundlichen Grüßen
Firemice
Firemice ist offline   Mit Zitat antworten
Alt 26-09-2009, 16:05   #9 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.499
angezeigt wird sie schon, aber die maße zum markieren der einzelnen zeichen bekommt man nur wenn die schriftart eingebettet ist.
shin10 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
actionscript, dynamictext, statictext, textfeld

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
dynamicText+Bild lueti25 Flash MX 2004 6 21-11-2005 16:09
X bzw. Y Position vom Kreis in DynamicText ausgeben ToNEK2K ActionScript 1 9 28-03-2003 12:06


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele