【发布时间】:2021-03-04 08:46:47
【问题描述】:
在 Delphi 10.4 的 Firemonkey 中。我想构建一个列表视图,其中列表视图项文本显示为左对齐或右对齐,具体取决于列表项内容。
我这样做如下:
procedure TForm1.FormCreate(Sender: TObject);
procedure AddItem(No: integer);
var
Item: TListViewItem;
begin
Item := ListView1.Items.AddItem(No);
Item.Text := 'Text item No ' + No.ToString;
Item.Tag := No;
if No mod 2 = 0 then
Item.Objects.TextObject.TextAlign := TTextAlign.Leading
else
Item.Objects.TextObject.TextAlign := TTextAlign.Trailing;
end;
var
c: integer;
begin
for c := 0 to 9 do
AddItem(c);
end;
但是,这并不适用于所有平台。但是一旦 ListView 改变了它的大小,所有的 ListItems 就会在左侧齐平显示。有没有更好的方法来做到这一点?
作为一种解决方法,我做了以下操作:
procedure TForm1.ListView1Resized(Sender: TObject);
var
c: integer;
begin
for c := 0 to ListView1.ItemCount - 1 do
if ListView1.Items[c].Tag mod 2 = 0 then
ListView1.Items[c].Objects.TextObject.TextAlign := TTextAlign.Leading
else
ListView1.Items[c].Objects.TextObject.TextAlign := TTextAlign.Trailing;
end;
【问题讨论】:
-
我认为最好完全自定义 ListViewItem。您可以放置 TLayout、TRectangle 或 TText 并做您想做的事情,结果在所有板块上总是相同的
-
看起来像 2 人聊天。当您只想要一个没有标题的列时,为什么还要使用
TListView?TRichEdit不是更好的选择,因为它还允许用户选择部分文本以将其复制到剪贴板? -
是的,我构建了一个简单的聊天室,用于测试和演示 FB4D 开源库中即将推出的 Firestore 侦听器。 @Bosshoss:是的,这可能是最好的解决方案,但它可能需要比整个演示应用程序更多的代码来控制这个控件。@AmigoJack:要使用richedit,你会是一个解决方案,但我想要一个简短的演示来单击消息用于编辑和删除功能。如果将来我想用发件人的个人资料图像扩展示例,TListView 或 TListBox 会更合适。
标签: delphi firemonkey tlistview