본문 바로가기

플래시 텍스트필드(text filed_) 헤비어(behavior) 세가지 속성(한줄,여러줄,워드랩)

반응형

출처 - http://cafe.naver.com/flx.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=18&

텍스트필드의 종류가 세가지입니다.

Single line : 텍스트를 한줄에 보여지게 함

Multiline : 텍스트를 여러줄로 보이게 함

Multiline no wrap : 텍스트를 개행문자("\n")가 있을때에만 다음줄로 보이게 함

 

 

그런데 플래시 텍스트 필드는 자동으로 워드랩을 하더란 말이죠..

워드랩 하지 않고 텍스트를 개행하게 해주는 함수를 만들었습니다.

 

워드랩(Word Wrap)이란?

워드랩은 하나의 단어를 행의 맨 뒤에 모두 표현할 수 없는 경우 그 단어를 다음 행으로 보내는 기능 이다

- 오픈사전 참조 - 

----------------------------------------------------       파라미터

mc : 텍스트 필드가 들어가 있는 모(_parent) 무비클립

field : mc 안에 있는 텍스트 필드

limit : 텍스트 한계 너비

----------------------------------------------------       함수 설명

아래의 함수는 워드랩을 시키지 않고 텍스트를 멀티라인으로 보여지게 해주는 함수입니다.

----------------------------------------------------       기타

limit 에 대해서.. (창피하게도 전 여기서 많이 헤맸더랍니다)

만약 fla 파일에 텍스트 필드의 너비가 170이라고 가정할때.. limit는 166 이어야 합니다.

TextField 구조 자체가.. 필드안에 좌우 2픽셀씩 간격을 두고 텍스트를 쓰게 됩니다.

따라서, 텍스트 한계숫자(limit)는 양쪽 margin을 뺀 값..

170 -(2+2) = 166 이 되는겁니다. 

----------------------------------------------------       함수
 function splitText(mc:MovieClip, field:TextField, limit:Number) {
  var limit:Number = limit;//170-4;
  var oTxt:String = field.text;
  // 텍스트 너비 (textWidth) 알아보기 위해 사용하는 스트링
  var tempTxt:String = "";
  // 잘린 스트링을 저장하기 위한 임시 스트링
  var oldline:Number = 1;
  // 라인수를 체크하기 위함
  var startIdx:Number = 0;
  // 라인당 자를 스트링의 위치 인덱스
  var splitNum:Number = 1;
  // 라인당 자를 스트링의 개수
  mc.createTextField("tf4", 1000, 0, 500, 170, 25);
  var myformat:TextFormat = new TextFormat();
  myformat.font = "HelveticaNeueBold";

  mc.tf4.size = 12;//fontSize;
  mc.tf4.setTextFormat(myformat);
  for (var i = 0; i<oTxt.length; i++) {
   mc.tf4.text = oTxt.substr(startIdx, splitNum);
   // 너비가 벗어나는 경우
   if (mc.tf4.textWidth>limit) {
    if (oldline<3) {
     tempTxt += oTxt.substr(startIdx, (splitNum-1));
     startIdx = i;
     splitNum = 1;
     tempTxt += "\n";
     mc.tf4.text = "";
     oldline++;
    } else {
     tempTxt += oTxt.substr(startIdx, (splitNum-3));
     tempTxt += "...";
     mc.tf4.removeTextField();
     break;
    }
   // 너비가 벗어나지 않는 경우
   } else {
    if (i == (oTxt.length-1)) {
     tempTxt += oTxt.substr(startIdx, splitNum);
    }
   }
   splitNum++;
  }
  field.text = tempTxt;
  _root._txt2.text = tempTxt;
 }

----------------------------------------------------       사용방법

splitText(mc, mc._txt, 166);

 

* fla 파일에 있는 텍스트 필드의 종류는 꼭... Multiline no wrap 으로 해야함.


반응형