2012-02-23 25 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。