Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash CS3 Professional

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-10-2011, 10:29   #16 (permalink)
Isch kucke
 
Registriert seit: Jan 2005
Beiträge: 1.616
Nochmal an shin. Super Job. Aber ich bin mit meiner Variante weitergekommen.
Ein paar Probleme habe ich noch.

Ich werde den Thread bis zur Lösung immer aktuell halten und meine Erfolge posten. Vieleicht hilft es ja auch anderen

So weit bin ich jetzt
PHP-Code:
//Farbboxcontainer erstellen
createEmptyMovieClip('boxes',3000);
//Textfeld erstellen
createTextField('inp',0,0,0,300,500);
inp.type='input';
inp.autoSize=false;
inp.html=true;
inp.wordWrap=true;
inp.multiline=true;
inp.border=true;
inp.htmlText='<P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">
<B>Testtext</B><FONT FACE="Times New Roman"><B> </B><FONT FACE="ARIAL" SIZE="40" COLOR="#FF0000"><B>Testtext 
Testtext</B></FONT></FONT></FONT></P><P ALIGN="LEFT"><FONT FACE="VERDANA" SIZE="40" COLOR="#FF0000"
 LETTERSPACING="0" KERNING="0"><B> sa asf </B></FONT></P><P ALIGN="LEFT"><FONT FACE="COMIC SANS MS" SIZE="10" 
COLOR="#FF0000" LETTERSPACING="0" KERNING="0"><B></B></FONT></P><P ALIGN="LEFT"><FONT FACE="Comic" SIZE="40"
 COLOR="#FF0000" LETTERSPACING="0" KERNING="0"><B>  asf  fsaasf </B></FONT></P><P ALIGN="LEFT"><FONT FACE="Comic"
 SIZE="40" COLOR="#FF0000" LETTERSPACING="0" KERNING="0"><B></B></FONT></P><P ALIGN="LEFT"><FONT FACE="COMIC SANS 
MS" SIZE="40" COLOR="#FF0000" LETTERSPACING="0" KERNING="0"><B> fsaasf fsaasf fsa</B></FONT></P>'
;

inp.onChanged=function(){
    
slicer=br2nl(inp,'\n');
    
makeDimBoxes(inp,slicer);
    
//trace(inp.htmlText);
    
}
createEmptyMovieClip('box',1);
box.beginFill(0x000000,100);
box.moveTo(0,0);
box.lineTo(10,0);
box.lineTo(10,10);
box.lineTo(0,10);
box.lineTo(0,0);
box.endFill();
box._x=inp._width;
box._y=inp._height;
box.onPress=function(){this.startDrag(false);
this.onMouseMove=function(){
    
    
inp._width=this._x;
    
inp._height=this._y;
}}
box.onRelease=box.onReleaseOutside=function(){
    
this.stopDrag();
    
delete this.onMouseMove;
    
slicer=br2nl(inp,'\n');
    
makeDimBoxes(inp,slicer);
}
slicer=br2nl(inp,'\n');
makeDimBoxes(inp,slicer);
createTextField('tr',7000,0,0,0,0);
tr.autoSize=true;
function 
makeDimBoxes(inp,breaktxt){
    
tr.text=breaktxt;
    
tr._x=Stage.width-tr._width;
    
absdown=0;
    
boxes.bo.removeMovieClip();
    
boxes.createEmptyMovieClip('bo',0);
    var 
org=inp.text.split('');
    var 
brea=breaktxt.split('');
    var 
y=0;
    var 
x=0;
    for(
i=0;i<org.length;i++){
        
nl=false;
        
nr=false;
        var 
format=inp.getTextFormat(i,(i+1));
        var 
extend:Object=format.getTextExtent(org[i]);
        var 
lformat=inp.getTextFormat((i-1),i);
        var 
lextend:Object=lformat.getTextExtent(org[(i-1)]);
        var 
nformat=inp.getTextFormat((i+1),(i+2));
        var 
nextend:Object=nformat.getTextExtent(org[(i+1)]);
        
        
w=extend.width+2;
        if(
extend.ascent>absdown){absdown=extend.ascent-extend.descent;}
        
top=(extend.descent)-extend.ascent+2;
        
h=extend.height-(extend.descent*2);
        
hbr=extend.height;
        if(
org[i]!=' ' && org[i]!='\n' && org[i]!='\r'){
        
lhbr=extend.height;
        
cur=org[i];
        
asc=extend.ascent;
        
des=extend.descent;
        
ww=extend.width;
        
hh=extend.height;
        }
        
        
nl=false;
        
nr=false;
        if(
brea[i]=='\n' || brea[i]=='\r' || org[i]=='\t'){
            if(
brea[i]=='\n' || brea[i]=='\r'){nl=true;}
            if(
brea[(i+1)]=='\n' || brea[(i+1)]=='\r'){nr=true;}
            
y+=lhbr;
            
abreak=i;
            if(
nl && nr){
                
                
y-=(asc-(des/2));
                
double=true;
                
                }
            
x=0;
            }
            
        
    if(
org[i]!='' && org[i]!=' ' && org[i]!='\n' && org[i]!='\r' && org[i]!='\t'){
    
boxes.bo.createEmptyMovieClip('l'+i,i);
    
boxes.bo['l'+i].lineStyle(0.5,0x000000,100);
    
col=new Array(0xFF0000,0x00FF00,0x0000FF);
    
boxes.bo['l'+i].beginFill(col[random(col.length)],30);
    
boxes.bo['l'+i].moveTo(0,0);
    
boxes.bo['l'+i].lineTo(w,0);
    
boxes.bo['l'+i].lineTo(w,(h));
    
boxes.bo['l'+i].lineTo(0,(h));
    
boxes.bo['l'+i].lineTo(0,0);
    
boxes.bo['l'+i].endFill();
    
boxes.bo['l'+i]._x=x;
    
boxes.bo['l'+i]._y=top+y;
}
if(
i!=abreak){
    
x+=(w-2);
    
}

    
    
        }
        
boxes._x=2;
        
boxes._y=absdown+4;
        
        
    }
function 
br2nl(inp){
    
tx=inp.text.split('\r').join('\n').split('');
    
absw=inp.textWidth+2;
    
trenner=new Array('  ',' ','-','.',',',':');
    
x=0;
    
lastbreak=0;
    for(
i=0;i<tx.length;i++){
        
        var 
format:Object=inp.getTextFormat(i,(i+1));
        var 
extent:Object=format.getTextExtent(tx[i]);
        for(
u=0;u<trenner.length;u++){
            if(
trenner[u]==tx[i]){lastbreak=i;
            }
            }
        
w=extent.width;
        
        
x+=(w);
        if(
tx[i]=='\n' || tx[i]=='\r'){x=0;
        
        }
        if(
x>((absw))){
            
x=0;
            
            if(
lastbreak<1){
                if(
tx[i]==' '){tx[i]='\n';}else{
                
tx[i]='\n'+tx[i];
                
                }
                
                }else{
            if(
tx[lastbreak]==' '){tx[lastbreak]='\n';}else{
            
tx[lastbreak]+='\n';
            }
            
            
lastbreak=0;
            
            }
            }
    }
        return 
tx.join('');
    } 
Ich werds im Edit gleich kommentieren. Jetzt will ich aber erstmal eine rauchen.

Jetzt der versprochene Edit:
Zunächst mal an alle die meinen ich möchte den Post pushen indem ich immer auf "Antworten" anstelle auf editieren klicke.
Nope. Aber ich denke es ist wichtig, dass hier alle Schritte für sich dargestellt werden, dass jeder der Interesse an dem Thema hat auch alles nachvollziehen kann.

Den schließlich ist der Weg das Ziel richtig?

Okay.
Erst mal zu den automatischen Umbrüchen

shin's Lösung funktioniert um Welten besser als die meine. Allerdings hinkt sie wenn der HTML Text mehrere Fontarten, Schriftgrößen usw. beinhaltet.
Die meine bricht dafür nicht richtig innerhalb eines Wortes um.
Da das allerdings im Moment meine kleinste Sorge ist, schiebe ich das mal hinten an.

Mir geht es Hauptrangig um das richtige Anordnen der Boxen. Wobei mir jetzt die tatsächliche Höhe der Boxen eigentlich egal ist. Also eine Box über einem u darf genau so hoch sein wie ein U da ich meinen späteren Pfademc eh nach der Breite skaliere.

Höhe und Breite stimmen also bei meiner jetzigen Version auch +-1Pixel. (Damit kann ich aber leben)
Ebenso stimmen die x Positionen.

Was jetzt aber kurios ist, sind die y Werte die gerade bei manuellen Umbrüchen nicht mehr stimmen.
Das wird mein nächster Schritt.

Spannend wird es dann bei align Geschichten. Also 'center' oder 'right'.
Da ich hier mit momentanen Versuchen nur die Möglichkeit habe, jede Textzeile für sich in ein Array zu packen und dann eben die einzelnen Elemente entsprechend mittig, rechtsbündig zu verschieben.

Was allerdings auch ziemliches Eiergecode ist, da das zwar im Prinzip funktioniert, aber eigentlich weit weg davon ist, was ich hier erreichen möchte.
Den was bei align schon Schwierigkeiten macht wird bei Zeilenabständen erst richtig Horror.

Also werde ich jetzt versuchen die Positione jedes Zeichens für sich zu ermitteln.
Hier gibt mir leider getTextExtent keinerlei Möglichkeiten mehr.
Besser könnte es(was ich in der Doku gelesen habe) mit textSnapshot werden.
Die Crux hierbei ist aber, dass dies nur mit dynamischen, bzw. statischen NON HTML Textfeldern funktioniert.

Aber vieleicht gibt es ja so eine Art Zwischending.

Lösungsvorschläge sind weiterhin sehr willkommen. Danke

PS:Nochmal Edit

Ich habe im Code den HTML Text mit Umbrüchen versehen, da der Thread ja ewig Breit war.
Wers also testen will, Bitte darauf achten. Flash mag manchmal keine Umbrüche in einem String
Angehängte Dateien
Dateityp: swf htmtest.swf (1,7 KB, 4x aufgerufen)
__________________
Gesehen auf einem Türschild:

Niederknien, anklopfen und um Audience betteln

Har Har

http://www.flashforum.de/forum/flash-mx-2004/uberblenden-tutorial-180341.html
Mp3 Player http://www.flashforum.de/forum/stuff/stuff-jukebox-196373.html

Geändert von labrar (30-10-2011 um 10:52 Uhr)
labrar ist offline   Mit Zitat antworten
Alt 31-10-2011, 22:19   #17 (permalink)
Isch kucke
 
Registriert seit: Jan 2005
Beiträge: 1.616
Habs fast

PHP-Code:
//Farbboxcontainer erstellen
createEmptyMovieClip('boxes',3000);
//Textfeld erstellen
createTextField('inp',0,0,0,650,500);
inp.type='input';
inp.autoSize=false;
inp.html=true;
inp.wordWrap=true;
inp.multiline=true;
inp.border=true;
inp.htmlText='<P ALIGN="CENTER" ><FONT  FACE="Verdana" SIZE="12" COLOR="#000000" LETTERSPACING="20"  KERNING="0"><B>Testtext</B><FONT FACE="Times New Roman"><B> </B><FONT FACE="ARIAL" SIZE="40" COLOR="#FF0000"><B>Testtext Testtext</B></FONT></FONT></FONT></P><P ALIGN="LEFT" LEADING="150"><FONT FACE="VERDANA" SIZE="40" COLOR="#FF0000" LETTERSPACING="0" KERNING="0"><B> sa asf </B></FONT></P><P ALIGN="LEFT"><FONT FACE="COMIC SANS MS" SIZE="10" COLOR="#FF0000" LETTERSPACING="0" KERNING="0"><B></B></FONT></P><P ALIGN="LEFT"><FONT FACE="Comic" SIZE="40" COLOR="#FF0000" LETTERSPACING="0" KERNING="0"><B>  asf  fsaasf </B></FONT></P><P ALIGN="RIGHT"><FONT FACE="Comic" SIZE="40" COLOR="#FF0000" LETTERSPACING="0" KERNING="0"><B></B></FONT></P><P ALIGN="RIGHT"><FONT FACE="COMIC SANS MS" SIZE="40" COLOR="#FF0000" LETTERSPACING="0" KERNING="0"><B> fsaasf fsaasf fsa</B></FONT></P>';
inp.onChanged=function(){
    
//slicer=br2nl(inp,'\n');
    //makeDimBoxes(inp,slicer);
    
getSnapshot(inp);
    
//trace(inp.htmlText);
    
}
createEmptyMovieClip('box',1);
box.beginFill(0x000000,100);
box.moveTo(0,0);
box.lineTo(10,0);
box.lineTo(10,10);
box.lineTo(0,10);
box.lineTo(0,0);
box.endFill();
box._x=inp._width;
box._y=inp._height;
box.onPress=function(){this.startDrag(false);
this.onMouseMove=function(){
    
    
inp._width=this._x;
    
inp._height=this._y;
}}
box.onRelease=box.onReleaseOutside=function(){
    
this.stopDrag();
    
delete this.onMouseMove;
    
getSnapshot(inp);
    
//slicer=br2nl(inp,'\n');
    //makeDimBoxes(inp,slicer);
}

function 
getSnapshot(t,paren){
    
fo=t.getTextFormat(0,1000);
    
fo.leading=10;
    
t.setTextFormat(fo);
    if(
paren==undefined){paren=t._parent;}
    
paren.snap_mc.removeMovieClip();
    
paren.createEmptyMovieClip('snap_mc',paren.getNextHighestDepth());
    var 
snapper:MovieClip=paren.snap_mc;
    var 
asText:String=br2nl(t).split('\r\n').join('\n').split('\r').join('\n');
    
tr.text=asText;
    
tr._x=Stage.width-tr._width;
    var 
letters:Array=asText.split('');
    var 
snaps=new Array();
    var 
line_width=new Array();
    var 
line_height=new Array();
    var 
line_boxes=new Array();
    
/*Objecte in ein Array packen. Width (w), Height(h) sowie x und y werden erstmal auf 0 gesetzt. Diese Werte werden später via getBounds ergänzt*/
    
var y:Number=0;
    var 
x:Number=0;
    var 
h:Number=0;
    var 
w:Number=0;
    var 
highest:Number=0;
    var 
bheight:Number=0;
    var 
starter:Number=0;
    
    for(var 
0letters.lengthi++){
        var 
format:Object=t.getTextFormat(i,(i+1));
        var 
align:String=format.align;
        var 
leading:Number=format.leading;
        if(
leading==undefined || isNaN(leading)){
            
leading=0;
            }
        
//Align auf Left zurücksetzten, damit eine exacte Positionierung Möglich ist
        
format.align='left';
        var 
extent:Object=format.getTextExtent(letters[i]);
        
bheight=extent.ascent+extent.descent;
        if(
bheight>highest){highest=bheight;}
        var 
obj:Object={string:letters[i],format:format,twidth:extent.width,tfwidth:extent.textFieldHeight,theight:extent.height,tfheight:extent.textFieldHeight,ascent:extent.ascent,descent:extent.descent,x:0,y:0,w:0,h:0};
        
snaps.push(obj);
        
x+=extent.width;
        if(
letters[i]=='\n'){
            
w=x+extent.width;
            
h=highest+leading;
            
snapper.createEmptyMovieClip('outline'+i,i);
            
snapper['outline'+i].lineStyle(1,0x000000,100);
            
snapper['outline'+i].moveTo(0,0);
            
snapper['outline'+i].lineTo(w,0);
            
snapper['outline'+i].lineTo(w,h);
            
snapper['outline'+i].lineTo(0,h);
            
snapper['outline'+i].lineTo(0,0);
            
snapper['outline'+i].beginIndex=starter;
            
snapper['outline'+i].endIndex=i;
            
snapper['outline'+i].align=align;
            
snapper['outline'+i].leading=leading;
            
starter=i;
            
line_boxes.push(snapper['outline'+i]);
            
highest=0;
            
x=0;
            
            }
        }
        
/*Lineboxen zunächst mal vertikal anordnen*/
        
for(i=0i<line_boxes.lengthi++){
            
line_boxes[i]._y=line_boxes[(i-1)]._y+line_boxes[(i-1)]._height;
            }
        
/*Lineboxen mit entsprechenden Boxen befüllen die später für getBounds benötigt werden*/
        
for(i=0i<line_boxes.lengthi++){
            
line_boxes[i]._y=line_boxes[(i-1)]._y+line_boxes[(i-1)]._height;
            var 
x:Number=0;
            
//Y Position der Boxen erstmal auf 0 setzen und dann das größte Feld als Referenz nutzen. Dazu benötigt man noch die Boxgröße
            
var absy:Number=0;
            var 
boxheight:Number=0;
            for(
a=line_boxes[i].beginIndexa<line_boxes[i].endIndexa++){
                    if(
snaps[a].string!='\n'){
                    var 
mov=line_boxes[i];
                    
w=snaps[a].twidth;
                    var 
absw=w-snaps[a].format.letterSpacing;
                    var 
th=(snaps[a].ascent-snaps[a].descent);
                    
mov.createEmptyMovieClip('b'+a,a);
                    
mov['b'+a].lineStyle(1,0x000000,100);
                    
mov['b'+a].beginFill(0xFF0000,30);
                    
mov['b'+a].moveTo(0,0);
                    
mov['b'+a].lineTo(absw,0);
                    
mov['b'+a].lineTo(absw,th);
                    
mov['b'+a].lineTo(0,th);
                    
mov['b'+a].lineTo(0,0);
                    
mov['b'+a].endFill();
                    
mov['b'+a]._x=x;
                    var 
lead:Number=line_boxes[i].leading;
                    
//Erstmal die Boxen auf y setzen. Kleinere Boxen müssen nachjustiert werden
                    
                    
mov['b'+a]._y=((line_boxes[i]._height-mov['b'+a]._height)-(snaps[a].descent)+1-lead);
                    
//mov['b'+a]._y-=snaps[a].descent/4;
                    //trace(snaps[a].descent);
                    
if(th>boxheight){
                        
boxheight=th;
                        
absy=mov['b'+a]._y;
                        }
                    
x+=w;
            }
            }
            
//Nachjustieren der kleineren Boxen
            
for(a=line_boxes[i].beginIndexa<line_boxes[i].endIndexa++){
                        if(
mov['b'+a]._height<boxheight){
                        
mov['b'+a]._y=absy+boxheight-mov['b'+a]._height+1;
                        }
            }
            
/*Entsprechend align anordnen*/
            
var align:String=line_boxes[i].align;
            if(
align=='center'){
                
line_boxes[i]._x=t._width/2-line_boxes[i]._width/2;
                }
            if(
align=='left'){
                
line_boxes[i]._x=0;
                }
            if(
align=='right'){
                
line_boxes[i]._x=t._width-line_boxes[i]._width;
                }
            }
    }

function 
br2nl(inp){
    
tx=inp.text.split('\r').join('\n').split('\r\n').join('\n').split('');
    
absw=inp.textWidth;
    
trenner=new Array('  ',' ','-','.',',',':');
    
x=0;
    
lastbreak=0;
    for(
i=0;i<tx.length;i++){
        
        var 
format:Object=inp.getTextFormat(i,(i+1));
        var 
extent:Object=format.getTextExtent(tx[i]);
        for(
u=0;u<trenner.length;u++){
            if(
trenner[u]==tx[i]){lastbreak=i;
            }
            }
        
w=(extent.width);
        
        
        
x+=(w);
        if(
tx[i]=='\n' || tx[i]=='\r'){x=0;
        
        }
        
trace(x+' '+absw);
        if(
x>((absw))){
            
x=0;
            
            if(
lastbreak<1){
                if(
tx[i]==' '){tx[i]='\n';}else{
                
tx[i]='\n'+tx[i];
                
                }
                
                }else{
            if(
tx[lastbreak]==' '){tx[lastbreak]='\n';}else{
            
tx[lastbreak]+='\n';
            }
            
            
lastbreak=0;
            
            }
            }
    }
    
        return 
tx.join('');
    }
    
createTextField('tr',7000,0,0,0,0);


tr.autoSize=true;
getSnapshot(inp); 
Probleme macht noch die funktion br2nl da diese nicht 100%ig korrekt arbeitet.
Ansonsten würde die eigentliche Sache funzen.
Unterstüzt wird auch letterSpacing, leading und align.

Vieleicht kann mir noch jemand bei der br2nl Funktion einen Tipp geben.
Angehängte Dateien
Dateityp: swf htmtest.swf (2,1 KB, 0x aufgerufen)
__________________
Gesehen auf einem Türschild:

Niederknien, anklopfen und um Audience betteln

Har Har

http://www.flashforum.de/forum/showthread.php?t=180341
Mp3 Player http://www.flashforum.de/forum/showthread.php?t=196373
labrar ist offline   Mit Zitat antworten
Alt 01-11-2011, 16:04   #18 (permalink)
Isch kucke
 
Registriert seit: Jan 2005
Beiträge: 1.616
So ganz toll ist es noch nicht
PHP-Code:
//Farbboxcontainer erstellen
createEmptyMovieClip('boxes',3000);
//Textfeld erstellen
createTextField('inp',0,0,0,450,500);
inp.type='input';
inp.autoSize=false;
inp.html=true;
inp.wordWrap=true;
inp.multiline=true;
inp.border=true;
inp.htmlText='<P ALIGN="CENTER" ><FONT  FACE="Verdana" SIZE="12" COLOR="#000000" LETTERSPACING="20"  KERNING="0"><B>Testtext</B><FONT FACE="Times New Roman"><B> </B><FONT FACE="ARIAL" SIZE="40" COLOR="#FF0000"><B>Testtext Testtext</B></FONT></FONT></FONT></P><P ALIGN="LEFT" LEADING="150"><FONT FACE="VERDANA" SIZE="40" COLOR="#FF0000" LETTERSPACING="0" KERNING="0"><B> sa asf </B></FONT></P><P ALIGN="LEFT"><FONT FACE="COMIC SANS MS" SIZE="10" COLOR="#FF0000" LETTERSPACING="0" KERNING="0"><B></B></FONT></P><P ALIGN="LEFT"><FONT FACE="Comic" SIZE="40" COLOR="#FF0000" LETTERSPACING="0" KERNING="0"><B>  asf  fsaasf </B></FONT></P><P ALIGN="RIGHT"><FONT FACE="Comic" SIZE="40" COLOR="#FF0000" LETTERSPACING="0" KERNING="0"><B></B></FONT></P><P ALIGN="RIGHT"><FONT FACE="COMIC SANS MS" SIZE="40" COLOR="#FF0000" LETTERSPACING="0" KERNING="0"><B> fsaasf fsaasf fsa</B></FONT></P>';
inp.onChanged=function(){
    
//slicer=br2nl(inp,'\n');
    //makeDimBoxes(inp,slicer);
    
getSnapshot(inp);
    
//trace(inp.htmlText);
    
}
createEmptyMovieClip('box',1);
box.beginFill(0x000000,100);
box.moveTo(0,0);
box.lineTo(10,0);
box.lineTo(10,10);
box.lineTo(0,10);
box.lineTo(0,0);
box.endFill();
box._x=inp._width;
box._y=inp._height;
box.onPress=function(){this.startDrag(false);
this.onMouseMove=function(){
    
    
inp._width=this._x;
    
inp._height=this._y;
}}
box.onRelease=box.onReleaseOutside=function(){
    
this.stopDrag();
    
delete this.onMouseMove;
    
getSnapshot(inp);
    
//slicer=br2nl(inp,'\n');
    //makeDimBoxes(inp,slicer);
}

function 
getSnapshot(t,paren){
    if(
paren==undefined){paren=t._parent;}
    
paren.snap_mc.removeMovieClip();
    
paren.createEmptyMovieClip('snap_mc',paren.getNextHighestDepth());
    var 
snapper:MovieClip=paren.snap_mc;
    var 
asText:String=br2nl(t).split('\r\n').join('\n').split('\r').join('\n');
    
tr.text=asText;
    
tr._x=Stage.width-tr._width;
    var 
letters:Array=asText.split('');
    var 
snaps=new Array();
    var 
line_width=new Array();
    var 
line_height=new Array();
    var 
line_boxes=new Array();
    var 
boxes=new Array();
    var 
back=new Array();
    
/*Objecte in ein Array packen. Width (w), Height(h) sowie x und y werden erstmal auf 0 gesetzt. Diese Werte werden später via getBounds ergänzt*/
    
var y:Number=0;
    var 
x:Number=0;
    var 
h:Number=0;
    var 
w:Number=0;
    var 
highest:Number=0;
    var 
bheight:Number=0;
    var 
starter:Number=0;
    
    for(var 
0letters.lengthi++){
        var 
format:Object=t.getTextFormat(i,(i+1));
        var 
align:String=format.align;
        var 
leading:Number=format.leading;
        if(
leading==undefined || isNaN(leading)){
            
leading=0;
            }
        
//Align auf Left zurücksetzten, damit eine exacte Positionierung Möglich ist
        
format.align='left';
        var 
extent:Object=format.getTextExtent(letters[i]);
        
bheight=extent.ascent+extent.descent;
        if(
bheight>highest){highest=bheight;}
        var 
obj:Object={string:letters[i],format:format,twidth:extent.width,tfwidth:extent.textFieldHeight,theight:extent.height,tfheight:extent.textFieldHeight,ascent:extent.ascent,descent:extent.descent,x:0,y:0,w:0,h:0};
        
snaps.push(obj);
        
x+=extent.width;
        if(
letters[i]=='\n'){
            
w=x+extent.width;
            
h=highest+leading;
            
snapper.createEmptyMovieClip('outline'+i,i);
            
snapper['outline'+i].lineStyle(1,0x000000,100);
            
snapper['outline'+i].moveTo(0,0);
            
snapper['outline'+i].lineTo(w,0);
            
snapper['outline'+i].lineTo(w,h);
            
snapper['outline'+i].lineTo(0,h);
            
snapper['outline'+i].lineTo(0,0);
            
snapper['outline'+i].beginIndex=starter;
            
snapper['outline'+i].endIndex=i;
            
snapper['outline'+i].align=align;
            
snapper['outline'+i].leading=leading;
            
starter=i;
            
line_boxes.push(snapper['outline'+i]);
            
highest=0;
            
x=0;
            
            }
        }
        
/*Lineboxen zunächst mal vertikal anordnen*/
        
for(i=0i<line_boxes.lengthi++){
            
line_boxes[i]._y=line_boxes[(i-1)]._y+line_boxes[(i-1)]._height;
            }
        
/*Lineboxen mit entsprechenden Boxen befüllen die später für getBounds benötigt werden*/
        
for(i=0i<line_boxes.lengthi++){
            var 
x:Number=0;
            
//Y Position der Boxen erstmal auf 0 setzen und dann das größte Feld als Referenz nutzen. Dazu benötigt man noch die Boxgröße
            
var absy:Number=0;
            var 
boxheight:Number=0;
            for(
a=line_boxes[i].beginIndexa<line_boxes[i].endIndexa++){
                    if(
snaps[a].string!='\n'){
                    var 
mov=line_boxes[i];
                    var 
w:Number=snaps[a].twidth;
                    var 
absw:Number=w-snaps[a].format.letterSpacing;
                    var 
th:Number=(snaps[a].ascent-snaps[a].descent);
                    
mov.createEmptyMovieClip('b'+a,a);
                    
mov['b'+a].lineStyle(1,0x000000,100);
                    
mov['b'+a].beginFill(0xFF0000,30);
                    
mov['b'+a].moveTo(0,0);
                    
mov['b'+a].lineTo(absw,0);
                    
mov['b'+a].lineTo(absw,th);
                    
mov['b'+a].lineTo(0,th);
                    
mov['b'+a].lineTo(0,0);
                    
mov['b'+a].endFill();
                    
boxes.push(mov['b'+a]);
                    
mov['b'+a]._x=x;
                    var 
lead:Number=line_boxes[i].leading;
                    
//Erstmal die Boxen auf y setzen. Kleinere Boxen müssen nachjustiert werden
                    
                    
mov['b'+a]._y=((line_boxes[i]._height-mov['b'+a]._height)-(snaps[a].descent)+1-lead);
                    
/*Hier wird nochmal um i nach unten verschoben. Leider gibt es hier keinen korrekten Wert. Mit i geht es einigermaßen. Keine Ahnung wie sich das bei großen Textblöcken verhält*/
                    
mov['b'+a]._y-=i;
                    
                    if(
th>boxheight){
                        
boxheight=th;
                        
absy=mov['b'+a]._y;
                        }
                    
x+=w;
            }
            }
            
//Nachjustieren der kleineren Boxen
            
for(a=line_boxes[i].beginIndexa<line_boxes[i].endIndexa++){
                        if(
mov['b'+a]._height<boxheight){
                        
mov['b'+a]._y=absy+boxheight-mov['b'+a]._height+1;
                        }
            }
            
/*Entsprechend align anordnen*/
            
var align:String=line_boxes[i].align;
            if(
align=='center'){
                
line_boxes[i]._x=t._width/2-line_boxes[i]._width/2;
                }
            if(
align=='left'){
                
line_boxes[i]._x=0;
                }
            if(
align=='right'){
                
line_boxes[i]._x=t._width-line_boxes[i]._width;
                }
            }
    }
function 
br2nl(t){
    
    
//Text aus HTL Text ermitteln und gleich mal die Umbrüche die eh schon da sind zu nl's wandeln. Dann das ganze noch in ein Array splitten
    
var tx:Array=t.text.split('\t').join('\n').split('\r').join('\n').split('\r\n').join('\n').split('');
    
//Trennzeichenfilter falls nicht innerhalb eines Wortes gebrochen wird
    
var trenner=new Array(' ','-','.',',',':');
    
//HTML Textbreite
    
var absw:Number=t.textWidth;
    
//Und los gehts
    //X auf 0 setzen;
    
function inner(tx){
    var 
x:Number=0;
    var 
trennfilter:Number=0;
    var 
startval:Number=50;
    var 
smallest:Number=400;
    var 
abstand:Number=startval;
    for(var 
0tx.lengthi++){
        var 
format:Object=t.getTextFormat(i,(i+1));
        var 
extent:Object=format.getTextExtent(tx[i]);
        var 
twidth:Number=extent.width;
        var 
theight:Number=extent.height;
        var 
tfwidth:Number=extent.textFieldWidth;
        var 
tfheight:Number=extent.textFieldHeight;
        var 
ascent:Number=extent.ascent;
        var 
descent:Number=extent.descent;
        if(
twidth>abstand){abstand=twidth;}
        if(
twidth<smallest){smallest=twidthstartval=smallest;}
        
//Es wird erstmal geschaut, ob hier ein Trennfilter zur Verfügung steht und wo dieser sitzt
        
for(var 0trenner.lengthu++){
                if(
trenner[u]==tx[i]){trennfilter=i;}
            }
        if(
tx[i]=='\n' || tx[i]=='\r'){x=0tx[i]='\n';}
        if(
x>(absw-abstand)){
            if(
trennfilter>0){
                
tx[trennfilter]=tx[trennfilter].split(' ').join('')+'\n';
                
tx[(trennfilter-1)]=tx[(trennfilter-1)].split('\n').join('');
                
                
trennfilter=0;
                
x=0;
                    }else{
                        
                    if(
tx[i]==' '){tx[i]='\n';
                            
x=0;
                        }else{
                        
tx[i]=tx[i].split('\n').join('');
                        
tx[(i+1)]='\n'+tx[(i+1)].split('\n').join('');
                        
x=0;
                        
                        
                    }
                    
                    
                    }
                
            
abstand=startval;
            
            
            
            }
        
x+=twidth;
        }
        
    }
    
inner(tx);
    var 
stri:String=tx.join('');
    
tx=stri.split('');
    
inner(tx);
    
        return 
tx.join('');
    }
    
createTextField('tr',7000,0,0,0,0);


tr.autoSize=true;
getSnapshot(inp);
//slicer=br2nl(inp,'\n');
//makeDimBoxes(inp,slicer); 
Angehängte Dateien
Dateityp: swf htmtest.swf (2,2 KB, 1x aufgerufen)
__________________
Gesehen auf einem Türschild:

Niederknien, anklopfen und um Audience betteln

Har Har

http://www.flashforum.de/forum/showthread.php?t=180341
Mp3 Player http://www.flashforum.de/forum/showthread.php?t=196373
labrar 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Automatische Umbrüche in HTML-Textfeld erkennen sonar ActionScript 3 19 30-03-2011 16:44
htmlText += htmlText macht neuen Absatz harego ActionScript 1 1 24-12-2006 12:16
umbrüche in txt-datei erkennen AneBanane Flash MX 11 25-04-2005 08:25
Umbrüche in XML gummipinsel ActionScript 1 11 11-03-2004 11:53
autmatische umbrüche in textfeld erkennen und daraus manuelle machen! kendal ActionScript 1 2 29-03-2003 21:50


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

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


Copyright ©1999 – 2012 Marc Thiele