firemonkey 即时将项目添加到 HorzScrollBox
firemonkey add item to HorzScrollBox on the fly
我的 form.after 运行 程序中有一个水平滚动框项目,我将获得一个 json 字符串,其中包含必须位于水平滚动框中的项目列表。我必须动态添加它们。
例如我有这个:
在 运行 中的程序之后?我必须要一张新图片的区域。
我找到了函数:
HorzScrollBox1.AddObject();
但这个需要参数
我有两个问题:
1)如何向其中添加新对象?
2)我可以克隆现有图像并将其添加到列表末尾吗?
添加对象:有两种方式——设置子对象的Parent
属性或者执行父对象的AddObject
方法。 Parent
属性 setter 有一些检查,并调用 AddObject
。
根据控件 class,可以将子对象添加到控件的 Controls
集合或其 Content
私有字段中。并非所有 classes 都提供对此字段的访问(在某些情况下,您可以使用变通方法,例如 )。 HorzScrollBox 在 public 部分有这个字段。
因此,如果您想克隆现有图像,您必须:
从 Content
中获取现有图像 HorzScrollBox
创建新图像并设置它的属性
将新图像放入 HorzScrollBox。
例如:
procedure TForm2.btnAddImgClick(Sender: TObject);
function FindLastImg: TImage;
var
i: Integer;
tmpImage: TImage;
begin
Result:=nil;
// search scroll box content for "most right" image
for i := 0 to HorzScrollBox1.Content.ControlsCount-1 do
if HorzScrollBox1.Content.Controls[i] is TImage then
begin
tmpImage:=TImage(HorzScrollBox1.Content.Controls[i]);
if not Assigned(Result) or (Result.BoundsRect.Right < tmpImage.BoundsRect.Right) then
Result:=tmpImage;
end;
end;
function CloneImage(SourceImage: TImage): TImage;
var
NewRect: TRectF;
begin
Result:=TImage.Create(SourceImage.Owner);
Result.Parent:=SourceImage.Parent;
// Copy needed properties. Assign not work for TImage...
Result.Align:=SourceImage.Align;
Result.Opacity:=SourceImage.Opacity;
Result.MultiResBitmap.Assign(SourceImage.MultiResBitmap);
// move new image
NewRect:= SourceImage.BoundsRect;
NewRect.Offset(NewRect.Width, 0); // move rect to right.
Result.BoundsRect:=NewRect;
end;
begin
CloneImage(FindLastImg);
end;
我的 form.after 运行 程序中有一个水平滚动框项目,我将获得一个 json 字符串,其中包含必须位于水平滚动框中的项目列表。我必须动态添加它们。
例如我有这个:
我找到了函数:
HorzScrollBox1.AddObject();
但这个需要参数
我有两个问题:
1)如何向其中添加新对象?
2)我可以克隆现有图像并将其添加到列表末尾吗?
添加对象:有两种方式——设置子对象的Parent
属性或者执行父对象的AddObject
方法。 Parent
属性 setter 有一些检查,并调用 AddObject
。
根据控件 class,可以将子对象添加到控件的 Controls
集合或其 Content
私有字段中。并非所有 classes 都提供对此字段的访问(在某些情况下,您可以使用变通方法,例如
因此,如果您想克隆现有图像,您必须:
从
Content
中获取现有图像HorzScrollBox
创建新图像并设置它的属性
将新图像放入 HorzScrollBox。
例如:
procedure TForm2.btnAddImgClick(Sender: TObject);
function FindLastImg: TImage;
var
i: Integer;
tmpImage: TImage;
begin
Result:=nil;
// search scroll box content for "most right" image
for i := 0 to HorzScrollBox1.Content.ControlsCount-1 do
if HorzScrollBox1.Content.Controls[i] is TImage then
begin
tmpImage:=TImage(HorzScrollBox1.Content.Controls[i]);
if not Assigned(Result) or (Result.BoundsRect.Right < tmpImage.BoundsRect.Right) then
Result:=tmpImage;
end;
end;
function CloneImage(SourceImage: TImage): TImage;
var
NewRect: TRectF;
begin
Result:=TImage.Create(SourceImage.Owner);
Result.Parent:=SourceImage.Parent;
// Copy needed properties. Assign not work for TImage...
Result.Align:=SourceImage.Align;
Result.Opacity:=SourceImage.Opacity;
Result.MultiResBitmap.Assign(SourceImage.MultiResBitmap);
// move new image
NewRect:= SourceImage.BoundsRect;
NewRect.Offset(NewRect.Width, 0); // move rect to right.
Result.BoundsRect:=NewRect;
end;
begin
CloneImage(FindLastImg);
end;