- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,问题来了。我在面板中有一个标签组件。该标签与 alClient 对齐并启用了自动换行。文本可以从一行到几行不等。我想重新调整面板(和标签)的高度以适合所有文本。
当我知道文本和面板的宽度时,如何获得标签的必要高度?
最佳答案
您可以使用 TCanvas.TextRect 方法以及 tfCalcRect 和 tfWordBreak 标志:
var
lRect : TRect;
lText : string;
begin
lRect.Left := 0;
lRect.Right := myWidth;
lRect.Top := 0;
lRect.Bottom := 0;
lText := myLabel.Caption;
myLabel.Canvas.Font := myLabel.Font;
myLabel.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
myLabel.Height := lRect.Bottom;
end;
TCanvas.TextRect
包装了从 Windows API 对 DrawTextEx
函数的调用。
tfCalcRect
和 tfWordBreak
标志是 Windows API 的值 DT_CALCRECT
和 DT_WORDBREAK
的 Delphi 包装器。您可以在 msdn 的 DrawTextEx
文档中找到有关其效果的详细信息。
关于delphi - 计算 TLabel 所需的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2721397/
我正在尝试创建 TLabel 的动态数组s,然后插入已经存在的 TLabel s 在 IDE 中创建到其中,这样我就可以在代码中使用该数组。 我的目的是将这种方法用于几个类似的过程。 我想通过使用循环
我对 using redis as a rails cache 进行了以下配置,紧密改编自 Rails 文档: Rails.application.configure do ... confi
我想让 TLabel 标题在循环中以固定间隔显示 TListbox 的项目。 在 Listbox1: TListbox我有这些项目: Item1 Item2 Item3 Item4 我有一个 Labe
在我的应用程序中,我使用 TLabel对象运行时。 有一个问题:代表 20 个标签需要很长时间(大约 1-2 秒)。 父组件上的 DoubleBuffered 没有帮助。 Application.Pr
我有一个 Delphi XE2 项目。我的目标是从字符串中分离出单个字符,然后更改字体颜色,之后所有字符都将显示在滚动TLabel中。 基本上我的项目是显示 Scrolling Tex ,每个字符的颜
我有一个具有固定高度和自动换行的 TLabel。问题是,当标题文本超过标签的高度时,我看不到最后一行文本。我在整个互联网上搜索可以向下滚动并显示超出标题高度的最后一行文本的标签组件。 正如您在这张图中
好吧,问题来了。我在面板中有一个标签组件。该标签与 alClient 对齐并启用了自动换行。文本可以从一行到几行不等。我想重新调整面板(和标签)的高度以适合所有文本。 当我知道文本和面板的宽度时,如何
我想创建一个自定义控件(TRichEdit 的后代)。我只想在编辑字段上方添加一些文本。 我创建了自己的控件,并重写了构造函数来为标题创建 TLabel。它有效,但我的问题是:如何将标签移到 Rich
如果我将制表符放入字符串中,然后从字符串中分配标签的 Caption 属性,制表符会做什么? CR 字符会导致返回,这对于显示多行标题很有用。制表符似乎确实执行某种制表操作 - 我想知道这种行为是否已
我正在尝试使用 Delphi 创建一个从 TLabel 继承的组件,并在 TLabel.Paint 上添加一些自定义图形。我希望图形位于文本的左侧,因此我覆盖了 GetClientRect: func
如果 TLabel 的文本太大以适应标签的范围,我正在尝试减小它的字体大小。我没有看到我可以在标签上设置任何属性来实现这一点,所以我尝试编写自己的方法。我的方法通过使用 TCanvas.TextWid
编辑: 我创建了 a package现在根据 GNU 公共(public)许可证在 GitHub 上发布。非常感谢大家在这个问题上的帮助! 使用这部分脚本: line = { TransactionT
我正在尝试在运行时生成 TLabels 并使用此代码将它们插入到 VertScrollBox 中; var i, f: integer; RT_Label: TLabel; begin
Delphi 10.2.3 FMX 应用程序网络共享 有时以下代码中的标签会更新,但通常不会更新。在网络共享 RescourceReceived 过程中更新可视组件是否不安全? procedure T
我有一个 TLabel,其中 EllipsisPosition 设置为 epEndEllipsis,我需要能够判断文本当前是否被剪切。除了自己计算显示文本所需的面积并将其与标签的实际尺寸进行比较之外,
自从将应用程序从XE移植到XE2后,我注意到一个奇怪的错误,只需在ide中打开表单或运行应用程序,屏幕左上角就会绘制一个白色方框(超出表单) ,将鼠标悬停在上方或将窗口悬停在上方时该消失。我追踪到了
所以,我有一个应用程序加载不同的插件并创建一个每个 TPageControl 上都有一个新选项卡。 每个 DLL 都有一个与之关联的 TForm。 创建表单时将其父级 hWnd 作为新的 TTabSh
我有一个构建帮助消息然后设置 TLabel 的方法该帮助消息的文本属性。但是,每当我尝试设置标签的文本时,都会出现以下异常: 'String index out of range. (-1) Must
我成功编写了一个改变我的TLabel大小的运行时事件。当我重新调整表格大小时 procedure TForm3.pack(Sender: TObject); begin Label1.Font
我想创建一个可以自动调整其宽度的复选框,就像 TLabel 一样。 UNIT cvCheckBox; { It incercepts CMTextChanged where it recompute
我是一名优秀的程序员,十分优秀!