2012-02-23 15 views
3

動的に作成されたTHTMLabelをいくつも作成していますが、作成した後、高さを取得しようとすると常にデフォルトの高さの値が返されます。ここで動的に作成された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値が期待されるのか説明できますか? –

+0

応答ありがとうございます。あなたが見ることができるように、私は 'Font.Size'をデフォルト値の8よりもかなり大きい18に設定しているので、' Autosizing'を設定すると 'Height'の値が高くなると期待しています'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が存在する必要があります。

関連する問題