我创建了一个ListView并添加了一些ItemsText,将它们安排在各自的大小/位置,当尝试填充它们时,一些ItemsText被切成两半(短宽度),然后我决定使用Canvas.TextWidth
在文本上使用OnUpdatingObjects
事件更改所有这些,并添加更多的10p宽度以确保。
My Vars (AItem
来自OnUpdatingObjects
事件,即TListViewItem
):
var
Drawable : TListItemText;
Text : String;
i : integer;
begin
for i := 0 to AItem.Objects.Count-1 do begin
if AItem.View.Drawables[i].ClassName = 'TListItemText' then begin
Drawable := TlistItemText(AItem.Objects.Drawables[i]);
Text := Drawable.Text;
Drawable.Width := Round(Canvas.TextWidth(Text))+10;
end;
end;
end;
宽度不会改变,如果我手动设置:
TListItemText(Objects.FindDrawable('MyText')).Width := 200;
也不改变
已经尝试了很多不同的方法,但是没有一个成功。
p: Listview在DynamicAppearance.
由于本周: Drawable变量显示宽度的新值,但在ListView上没有变化,除了文本属性,它们都是不可改变的。
尝试使用onUpdateObjects
procedure TFHistory.lvMainUpdateObjects(const Sender: TObject;
const AItem: TListViewItem);
var
AText : TListItemText;
begin
AText := AItem.View.FindDrawable('kd') as TListItemText;
AText.Width := 20;
end;
我有点好奇,所以我成功地尝试了一下
procedure TForm2.ListView1UpdateObjects(const Sender: TObject;
const AItem: TListViewItem);
begin
AItem.Objects.FindDrawable('Text2').Width :=Round(Canvas.TextWidth(AItem.Objects.FindObject('Text2').Data.AsString))+5;
end;