2012-09-26 2 views
1

Flash IDE/Flex 혼합 프로젝트에서 TextField가 있고이 TextField와 연결된 Font 클래스 객체를 가져와야합니다. TextField는 CS4 IDE에서 생성되고 Flex SWF로로드되는 SWF에 있습니다.AS3 - TextField의 글꼴 클래스 객체 가져 오기

  1. 글꼴이 아이 SWF의 라이브러리에 수출되고 있습니다 :

    현재, 나는 다음과 같은 조건이 충족 될 경우 작동 코드가 있습니다.

  2. TextField는 내 보낸 글꼴에 연결됩니다.
  3. 내 보낸 글꼴의 이름은 상위 SWF에 하드 코딩되어 있습니다.

코드를 다음과 같이 내가 정말로 원하는 무엇

fontClass = childSwf.loaderInfo.applicationDomain.getDefinition("CustomFont") as Class; 

입니다하지 보낸 글꼴의 이름을 알고 있어야합니다. 대신, 나는 TextField에서 글꼴의 클래스 또는 클래스 이름을 동적으로 가져 오려고합니다.

내 보낸 글꼴 없이도 클래스를 가져올 수있는 기능이 더 좋습니다.

FWIW, 최종 목표는 임의의 TextField를 잡고 포함 된 글꼴이 Font :: hasGlyphs()를 사용하여 표시 할 수없는 문자를 포함하는지 확인하는 것입니다. 그러나 하위 SWF의 글꼴은 Font :: enumerateFonts()에 표시되도록 등록되지 않았습니다.

답변

1

당신은 getTextFormat 기능을 사용하여 텍스트 필드 글꼴 이름을 가져올 수 있습니다. txt은 몇 가지 조사 후 다음

var format:TextFormat = txt.getTextFormat(); 
trace(format.font); 

, 텍스트 필드입니다 고려,이 솔루션을 발견하고 문제를 해결할 수 있습니다.

import flash.text.TextField; 
import flash.text.TextFormat; 

import flash.utils.getQualifiedClassName; 

import flash.text.Font; 
import flash.display.Loader; 
import flash.events.Event; 
import flash.net.URLRequest; 

var font:Font; 
var txt:TextField; 

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded); 
loader.load(new URLRequest("sub_fla.swf")); 

function onLoaded(e:Event){ 
    var cl:Class = e.currentTarget.applicationDomain.getDefinition("CustomFont") as Class; 
    Font.registerFont(cl); 
    trace(cl); 

    txt = new TextField(); 
    this.addChild(txt); 
    txt.text = "Moorthy"; 

    var format:TextFormat = new TextFormat();// = txt.getTextFormat(); 
    font = new cl(); 
    format.font = font.fontName; 
    txt.setTextFormat(format); 

    enumerateFonts(); 
} 

function enumerateFonts(){ 
    var embeddedFonts:Array = Font.enumerateFonts(false); 
    embeddedFonts.sortOn("fontName", Array.CASEINSENSITIVE); 

    trace("---->"+embeddedFonts.indexOf(txt.getTextFormat().font)); 
    for(var i:int = 0;i<embeddedFonts.length;i++){ 
     font = embeddedFonts[i]; 
     trace("embeddedFonts["+i+"]:"+font.fontName+":"+font); 

     if(txt.getTextFormat().font == font.fontName){ 
      trace("My font class is '"+getQualifiedClassName(font) +"'"); 
     } 
    } 
} 

enumerateFonts 목록에 그걸 얻기 위해 글꼴을 등록하는 것을 잊지 마십시오. 그렇지 않으면 사용자 정의 클래스가 아닌 기본 글꼴 클래스를 가져옵니다.

또는 다른 방법으로는 텍스트 필드가있는 무비 클립에 변수를 추가하여 글꼴 클래스 또는 글꼴 클래스 이름을 저장할 수 있습니다.

예 : holder가 텍스트 필드를 포함하는 무비 클립의 경우,

holder.fontClass = cl

대신

Font.registerFont

사용하고 단순히

하여 글꼴 클래스를 검색 할 수 있습니다

txt.parent.fontClass

이렇게하면 enumerateFonts이 필요하지 않습니다.

+0

답변 주셔서 감사합니다 :) 불행히도 이것은 글꼴의 이름 (String)이 아니고 글꼴의 연결된 Class 객체가 아닙니다. 폰트 이름에 getDefinition을 호출 해봤는데 충돌이 발생했습니다. 이 문자열을 사용하여 클래스를 가져 오는 방법을 알고 계십니까? – Sean

+0

@Sean이 (가) 글꼴 클래스를 찾기 위해 대답을 업데이트했습니다. – Moorthy

+0

감사합니다. 네가 한 같은 장소에 온 것 같아. 진정한 질문은 "CustomFont"라는 것을 모른 채 "CustomFont"를 얻는 방법입니다. – Sean