gpt4 book ai didi

delphi - TListBoxItem 的自动换行

转载 作者:行者123 更新时间:2023-12-02 01:49:07 37 4
gpt4 key购买 nike

我正在使用 Delphi XE7 (Firemonkey) 制作 RSS 提要应用程序,文章用列表框显示:(标题的 ListBoxItem 的文本和文章的 ListBoxItem 的详细信息)。但正如您在此屏幕截图中看到的:

1
(来源: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.YmyLayout .TextHeight 将设置为 myLayout.MaxSize.YHere'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/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com