2012-02-23 21 views
3

我創建了一些動態創建的THTMLabels,但是在創建這些THTMLabels後,當我嘗試獲取它的高度時,它始終返回默認高度值。動態創建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; 

現在,當我嘗試訪問THTMLabel(FindComponent(「lblSen_0」))高度時,只返回默認值是17,我在哪裏出了錯?任何想法的人?任何幫助非常感謝,謝謝。

+4

我不知道這個'THTMLLabel'是什麼,它不是標準的Delphi的一部分。我注意到你將'Autosizing'設置爲'True'。你能解釋一下爲什麼你會期待17以外的Height值? – 2012-02-23 09:35:35

+0

感謝您的回覆。我期待更高的'Height'值,因爲您可以看到我已將'Font.Size'設置爲18,比默認值8大,所以使用'Autosizing'設置到'True',創建組件的實際'Height'應該更多的是它的默認值。我對嗎? – jhodzzz 2012-02-23 09:44:16

+2

也許這是你應該在更改字體大小之前將autosizing設置爲true的一種情況? – 2012-02-23 10:07:22

回答

0

我認爲THTMLLabel是Jedi圖書館的一部分,它不是?這個問題很奇怪。我不知道這個控件的實現,但是如果你有這個問題,那麼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組件,專門用於計算目的(可以設置的可見性噸o false)。 htmlStaticText組件應該將AutoSize設置爲true(在我們的示例中,AutoSizeType設置爲asVertical),並且在調用該函數時應該存在htmlStaticText.Text。