2012-05-09 3 views
2

Lazarus에서 ExtPascal 라이브러리 (ExtJS 래퍼)를 사용하여 버튼 (TExtButton)을 배치하려고합니다. 단추의 텍스트와 글꼴을 기준으로 단추의 너비를 설정하고 싶습니다. GetWidth 및 JSExpression과 ExtUtilTextMetrics의 다양한 조합을 시도했지만 그 답은 -420,000과 같습니다.ExtPascal에서 문자열의 텍스트 폭을 얻는 방법

내가 이런 전화 사용하여 변경할 글꼴을 얻을 수 없음을 관련이있을 수 :

JSCode('style:{"font-size":"'+ FontSize +'px","font-family":"Tahoma"}'); 

하지만을 나는 그런 식으로 얻을 수있는 유일한 효과는 내가 글꼴을 설정하면 버튼이 높았다이었다 버튼의 텍스트는 원래의 작은 글꼴로 렌더링되었습니다.

result := '<b style="font-size:1.4em;font-family=sans-serif;color:rgb(14,63,138);">' + s + '</b>'

사람이 나에게 정확한 텍스트 폭을 작업 할 수 있도록 수 :

그래서 나는이 표현을 사용하여 버튼의 텍스트 속성에 전달되는 문자열에 스타일을 퍼팅에 의존?

TIA 마크

답변

0

처음에는 ExtPascal도 나사로를 모른다.

나는 해결책이 매우 간단하다고 믿는다. JavaScript로만 가능합니다.

단계 : 1. 숨겨진 div를 만듭니다.

텍스트의 너비가 필요한 경우 1. 숨겨진 div의 텍스트, fontSize 및 fontFamily를 설정합니다. 2. hidden div를 visible로 설정합니다. 3. div의 너비를 가져옵니다. 4. div를 다시 숨김으로 설정합니다. 코드에서

:

<html> 
<head> 
    <script> 
     function getWidth(text, fontSize, fontFamily) 
     { 
      var element = document.getElementById('ruler'); 

      element.style.fontSize = fontSize; 
      element.style.fontFamily = fontFamily; 
      element.style.display = "inline"; 
      element.innerHTML = text; 

      var width = element.offsetWidth; 
      document.getElementById('width').innerHTML = width; 
     } 
    </script> 
    <style> 
     div#ruler 
     { 
      display : none; 
     } 
    </style> 
</head> 
<body onload="getWidth('Test', '13', 'Verdana');"> 
    <div id="ruler"></div> 
    <div id="width"></div> 
</body> 
</html> 

는 ExtJS와 또한 가능하지만,이 텍스트의 폭을 얻을 수있는 가장 쉬운 방법입니다.

희망이 도움이됩니다.

0

는 ExtJS는이 같은 도움이 TestMetrics 클래스 사용 :

var textWidth = 
    Ext.util.TextMetrics.measure(
    extTextfield.getEl().dom, 
    text). 
    width; 
관련 문제