- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Delphi XE7 (Firemonkey) 制作 RSS 提要应用程序,文章用列表框显示:(标题的 ListBoxItem 的文本和文章的 ListBoxItem 的详细信息)。但正如您在此屏幕截图中看到的:
(来源:evolutiongraph.fr)
文章太长,不回线了。 ListBox 的属性 WordWrap 不存在。所以我一直在寻找解决这个问题的方法,但没有找到。
你能帮我吗?如果不可能这样做,您能给我建议另一种显示文章的方式吗?谢谢!
最佳答案
TListBox
(就像你所做的那样):在运行时,ListBoxItems
已将计算样式存储在 aListBoxItem.StyledSettings
中。要在运行时更改设置,您首先必须将其从样式设置列表中删除。
例如,如果您想更改FontColor
,请首先删除“样式”字体颜色:
aListboxItem.StyledSettings := aListboxItem.StyledSettings - [TStyledSetting.FontColor];
然后应用另一个:
aListboxItem.FontColor := TAlphaColors.Green;
WordWrap
属性在 TStyledSetting.Other
中定义。更改它:
aListboxItem.StyledSettings := aListboxItem.StyledSettings - [TStyledSetting.Other];
aListboxItem.WordWrap := True;
列出了 TStyledSetting
常量和相应的 TTextSettings
属性here in Delphi's doc .
访问 TListBoxItem
属性时:theListBox.Items[i]
允许访问项目内容,而不是项目本身。要获取 ListboxItem
作为控件,然后对其属性进行操作,您可以使用:
aListboxItem := theListBox.ListItems[i];
或
aListboxItem := theListBox.ItemByIndex(i);
两者给出的结果完全相同,我不能说哪个更好。
文字高度:一旦文本被包裹在控件中,您可能需要调整控件的高度以显示整个文本。这可以使用 TTextLayout
来完成 OnApplyStyleLookup
事件:
uses
... ,FMX.TextLayout;
procedure TfrmForm1.ListBoxItem1ApplyStyleLookup(Sender: TObject);
var
myLayout: TTextLayout;
i: integer;
aPoint: TPointF;
begin
myLayout := TTextLayoutManager.DefaultTextLayout.Create;
myLayout.BeginUpdate;
// Setting the layout MaxSize
aPoint.X := ListBoxItem1.Width;
aPoint.Y := TfrmForm1.Height;
myLayout.MaxSize := aPoint;
myLayout.Text := ListBoxItem1.Text;
myLayout.WordWrap := True ;
myLayout.Font := ListBoxItem1.Font;
myLayout.HorizontalAlign := ListBoxItem1.TextSettings.HorzAlign;
myLayout.VerticalAlign := ListBoxItem1.TextSettings.VertAlign;
myLayout.Padding := ListBoxItem1.Padding;
// set other properties as needed
myLayout.EndUpdate;
ListBoxItem1.Height := Trunc(myLayout.TextHeight) + 3 ;
end;
请注意,MaxSize
是有限制的。例如,aPoint.Y
将限制最终的 TextHeight。您应该将其设置得较大,因为无论 TextHeight
应该是什么,如果 myLayout.TextHeight
大于 myLayout.MaxSize.Y
则 myLayout .TextHeight
将设置为 myLayout.MaxSize.Y
。 Here's a list TTextLayout
属性。
注意:您可能必须在测量文本高度之前在运行时指定字体大小,或者在设计时设置与默认值不同的字体大小。在我的测试设备(三星 Note 2)上,默认字体大小为 14 (ListBoxItem1.Font.Size = 14
),但它渲染为 18。这不是比例问题。然后,使用 Font.Size = 14
完成 myLayout.TextHeight
的计算,而 ListBoxItem
仍将呈现 Font.Size = 18
,仍然不合适。在布局计算之前重置 Font.Size
非常有用,方法是添加:
ListBoxItem1.StyledSettings := ListBoxItem1.StyledSettings - [TStyledSetting.Size] ;
ListBoxItem1.Font.Size := ListBoxItem1.Font.Size ;
<小时/>
TListView
:TListView
更适合长列表,并且可以在设计时设置 WordWrap
属性。要在对象检查器中找到它,请转到:
ListView1 > ItemAppearanceObjects > ItemObjects > Text > WordWrap
仍然需要调整大小以适应文本高度。
<小时/>此 CodeRage 视频中的 ListBox 和 ListView 的功能示例。 https://www.youtube.com/watch?v=XRj3qjUjBlc
关于delphi - TListBoxItem 的自动换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28507292/
在我的程序中,我动态生成了 TListBoxItems,并在 ListBoxItems 上使用/插入了 Ttext 控件以对其进行自定义。我的问题是,现在 TText 控件位于 Box Items 之
我正在使用 Delphi XE7 (Firemonkey) 制作 RSS 提要应用程序,文章用列表框显示:(标题的 ListBoxItem 的文本和文章的 ListBoxItem 的详细信息)。但正如
有人可以指导我正确的方向吗?我正在尝试使用 Delphi XE4 为 iOS 应用程序创建自定义 ListboxItem。我的目标输出将类似于上面的照片,因为我目前被困在这里(下图)。 我已成功动态生
我是一名优秀的程序员,十分优秀!