我正在使用Delphi XE7(Firemonkey)创建RSS提要应用程序,并且文章显示为Listbox :(标题的ListBoxItem文本和文章的ListBoxItem的详细信息)。 但正如您在此屏幕截图中看到的那样:
1 http://www.evolutiongraph.fr/chevereto/images/2015/02/13/Capture.jpg
文章太长,不回来。 ListBox的属性WordWrap不存在。 所以我一直在寻找解决这个问题的方法,但我找不到。
你能帮帮我吗?如果不可能这样做,你能否提出另一种展示文章的方法? 谢谢!答案 0 :(得分:4)
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);
两者给出完全相同的结果,我不能说一个是否更好。
关于文字高度:
将文本包装在控件中后,您可能需要调整控件的高度以显示整个文本。
这可以使用OnApplyStyleLookup
:
TTextLayout
事件中完成
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
。
TTextLayout
个ListBoxItem1.Font.Size = 14
个属性。
N.B。:您可能必须在测量文本高度之前在运行时指定字体大小,或者在设计时设置与默认值不同。
在我的测试设备(Samsung Note 2)上,默认字体大小为14(myLayout.TextHeight
),但它呈现为18.并且它不是规模问题。
然后,Font.Size = 14
的计算使用ListBoxItem
完成,而Font.Size = 18
仍将呈现Font.Size
,仍然不合适。
通过添加:
ListBoxItem1.StyledSettings := ListBoxItem1.StyledSettings - [TStyledSetting.Size] ;
ListBoxItem1.Font.Size := ListBoxItem1.Font.Size ;
会很有用
TListView
TListView
: WordWrap
更适合长列表,enctype="multipart/form-data"
属性可以在设计时设置。
要在 Object Inspector 中找到它,请转到:
ListView1> ItemAppearanceObjects> ItemObjects>文字>自动换行
仍然需要调整大小以适应文本高度。
此CodeRage视频中可以使用ListBox和ListView执行的操作示例。 Here's a list
答案 1 :(得分:1)
您可以尝试使用ListBoxItem.WordWrap。网站http://docwiki.embarcadero.com/
中的更多细节尝试编写类似的功能:
for I:= 0 To ListBox1.Items.Count - 1 Do
ListBox1.Items[I].WordWrap := True;