我正在创建一些动态创建的THTMLabel,但是在创建它们之后,当我试图获得它的高度时,它总是返回默认的高度值。
这是我的代码:
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。我哪里出错了?有人想过吗?非常感谢任何帮助,谢谢。
答案 0 :(得分: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组件,专门用于计算目的(您可以将可见性设置为false)。 htmlStaticText组件应将AutoSize设置为true(在我们的示例中,AutoSizeType设置为asVertical),并且在调用函数时应该存在htmlStaticText.Text。
答案 1 :(得分:0)
我认为THTMLLabel
是绝地图书馆的一部分,不是吗?这个问题很奇怪。我不知道这个控件的实现,但如果你遇到这个问题,那么AutoSize属性的实现可能会非常糟糕。
如果您无法检查并修复此控件的来源,请尝试使用BoundsRect属性获取高度:
LabelHeight := THTMLabel(FindComponent('lblSen_0')).BoundsRect.Bottom;