2012-02-23 2 views
3

동적으로 생성 된 THTMLabel을 여러 개 만들었지 만 생성 된 후에는 높이를 얻으려고 할 때 항상 기본 높이 값을 반환합니다. . 내가 THTMLabel (FindComponent ('lblSen_0')) 높이에 액세스하려고 할 때 내가 잘못 갈 17 만 기본 값을 반환 지금동적으로 생성 된 THTMLabel.Height는 항상 기본값을 반환합니까?

for i := 0 to ASentencePtr^.MUS.Count - 1 do 
begin 
    j := Random(slTemp.Count); 
    sSen := ASentencePtr^.MUS.Strings[StrToInt(slTemp.Strings[j])] + '/'; 

    THTMLabel.Create(Self).Name := 'lblSen_' + slTemp.Strings[j]; 
    with THTMLabel(FindComponent('lblSen_' + slTemp.Strings[j])) do 
    begin 
    Font.Size := 18; 
    Font.Style := [fsBold]; 
    Parent := FlowPanel1; 
    Width := Parent.Width; 
    Cursor := crHandPoint; 
    DragMode := dmAutomatic; 
    ControlStyle := ControlStyle + [csDisplayDragImage]; 
    HTMLText.Add(sSen); 
    Autosizing := True;   
    end; 

    slTemp.Delete(j); 
end; 

: 여기

내 코드? 누구 생각? 어떤 도움이라도 대단히 감사합니다.

+4

'THTMLLabel'이 무엇인지 모르겠지만 표준 델파이가 아닙니다. 나는 Autosizing을 True로 설정했다. 17 세가 아닌 'Height'값을 기대하는 이유를 설명해 주시겠습니까? –

+0

응답 해 주셔서 감사합니다. '글꼴 크기.'를 기본값 인 8보다 훨씬 큰 18로 설정 했으므로 '높이'에 대한 더 높은 가치를 기대합니다. 따라서 '자동 크기 조정'을 설정하면 True로 설정하면 생성 된 컴포넌트의 실제 Height 값이 디폴트 값보다 커야합니다. 내가 맞습니까? – jhodzzz

+2

아마도 이것은 글꼴 크기를 변경하기 전에 자동 크기 조정을 true로 설정해야하는 경우일까요? –

답변

0

나는 THTMLLabel이 제다이 도서관의 일부라고 생각하지 않습니까? 이 문제는 이상합니다. 이 컨트롤의 구현을 모르지만이 문제가 발생하면 AutoSize 속성이 매우 잘못 구현 될 수 있습니다. 당신이 검사하고이 컨트롤의 소스를 해결할 수없는 경우

, 높이 얻기 위해 BoundsRect 속성을 사용하려고 :

LabelHeight := THTMLabel(FindComponent('lblSen_0')).BoundsRect.Bottom; 
1

우리는 같은 문제가 있었다를하지만 THTMLStaticText로를 해결하기 위해 관리 성분 및 (높이)가 동적으로 조정 높이 계산이 함수 : 계산을 위해 독점적으로 사용

function CalculateDynamicHeight(aLabel: TLabel; htmlStaticText: THTMLStaticText): Integer; 
var 
    lRect : TRect; 
    lText : string; 
begin 
    lRect := Rect(0, 0, htmlStaticText.Width, 0); 
    lText := htmlStaticText.Text; 

    aLabel.Caption := htmlStaticText.Text; 
    aLabel.Font := htmlStaticText.Font; 
    aLabel.Canvas.Font := htmlStaticText.Font; 
    aLabel.Canvas.TextRect(
      {var} lRect, //will be modified to fit the text dimensions 
      {var} lText, //not modified, unless you use the "tfModifyingString" flag 
      [tfCalcRect, tfWordBreak] //flags to say "compute text dimensions with line breaks" 
     ); 
    ASSERT(lRect.Top = 0); //this shouldn't have moved 
    aLabel.Height := lRect.Bottom; 

    Result := lRect.Bottom; 
end; 

함수가 TLabel 성분을 필요를 (이 가시성 t 설정할 수 o 거짓). htmlStaticText 구성 요소는 AutoSize를 true로 설정해야합니다 (AutoSizeType이 asVertical로 설정되어 있음). htmlStaticText.Text가 함수를 호출 할 때 있어야합니다.

관련 문제