我喜欢使用AnimateFloat过程为TListBoxItem设置动画。当我滑动或单击ListBoxItem时,我想将其向右/向左移动,显示其他按钮/信息,这是首先看不见的。
要访问我在样式簿中创建的项目布局样式。在ListBoxItem的StylesData中,我尝试调用方法:StylesData ['rectangle5style.AnimateFloat(''Position.X'', - 150']。但这不起作用。
有谁知道怎么做?
// To Lookup the clicked ListboxItem
function FindItemParent(Obj: TFmxObject; ParentClass: TClass): TFmxObject;
begin
Result := nil;
if Assigned(Obj.Parent) then
if Obj.Parent.ClassType = ParentClass then
Result := Obj.Parent
else
Result := FindItemParent(Obj.Parent, ParentClass);
end;
//Create a few Items in a ListBox
procedure TForm4.Button1Click(Sender: TObject);
var
Item : TListBoxItem;
i: Integer;
begin
ListBox1.ItemWidth := ListBox1.Width + 150;
for i := 0 to 24 do
begin
Item := TListBoxItem.Create(nil);
Item.Locked := false;
Item.Parent := ListBox1;
Item.Width := ListBox1.Width + 150; // Hide buttons on the right
Item.StyleLookup := 'itemstyle';
Item.StylesData['rectanglestyle.Width'] := ListBox1.Width + 150;
Item.StylesData['rectanglestyle.OnClick'] := TValue.From<TNotifyEvent>(DoItemClick); // set OnClick value
end;
end;
procedure TForm4.DoItemClick(Sender: TObject);
var
Item : TListBoxItem;
begin
Item := TListBoxItem(FindItemParent(Sender as TFmxObject,TListBoxItem));
Item.StylesData['rectanglestyle.AnimateFloat(''Position.X'',-150']; // Show buttons on the right
end;
答案 0 :(得分:2)
StylesData只能用于访问属性。如果要从样式中调用对象的方法,则需要调用FindStyleResource,传入对象的StyleName并将其作为TFMXObject返回(如果找到)。
procedure TForm4.DoItemClick(Sender: TObject);
var
Item : TListBoxItem;
O: TFMXObject;
begin
Item := TListBoxItem(FindItemParent(Sender as TFmxObject,TListBoxItem));
O := Item.FindStyleResource('rectanglestyle');
if Assigned(O) then
O.AnimateFloat('Position.X',-150]; // Show buttons on the right
end;
BTW组件命名样式的常规约定是从类名中删除T并附加单词样式。对于样式中的对象,StyleName应描述其用途。您使用rectanglestyle意味着您需要TRectangle的默认样式。