delphi 无法更改ListView FMX的属性,只能通过文本更改

mu0hgdu0  于 2022-11-04  发布在  其他
关注(0)|答案(2)|浏览(187)

我创建了一个ListView并添加了一些ItemsText,将它们按各自的大小/位置进行排列,当尝试填充它们时,一些ItemsText被切成了两半(短宽度),然后我决定使用OnUpdatingObjects事件对它们进行更改,在文本上使用Canvas.TextWidth,并在宽度上添加更多的10 p。
我的变量(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;

也没什么变化。
我已经尝试了很多不同的方法,但没有一个奏效。

PS:列表视图处于动态外观。
PS.2:Drawable变量在Width中显示新值,但在ListView中没有更改,除了Text属性之外,它们都不可更改。

jdzmm42g

jdzmm42g1#

请尝试使用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;
dfddblmv

dfddblmv2#

我有点好奇,所以我成功地尝试了这个

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;

相关问题