0

我写这段代码来动态创建led

var
  fLed: Tglhudsprite;
  i,fImgSnapNum: integer;
  ............
for i := 0 to fImgSnapNum - 1 do
  begin
    fLed := TGLHUDSprite.CreateAsChild(MainForm.Dummy_Sound);
    fLed.Name := 'fLed' + IntToStr(i);
    fled.Material.MaterialLibrary := MatLib;
    fLed.Material.LibMaterialName := 'led';
    fLed.Width := fLed.Material.GetActualPrimaryTexture.Image.Width;
    fLed.Height := fLed.Material.GetActualPrimaryTexture.Image.Height;
    fled.SetSize(18,18);
    fled.Position.X := 530 + (i * 30);
    fled.Position.Y := 600;
    fled.Visible := true;
end;

我怎样才能找到并释放 fLed glscene 对象...?

谢谢...我使用delphi7和GLScene组件...

4

1 回答 1

2

释放对象的明显方法就是调用它们的Free方法,就像释放任何其他对象一样。显示的代码创建了许多对象,因此您需要有某种方法来释放所有对象;只有最近创建的单个对象仍会在fled变量中。对此的简单解决方案是将这些对象的列表保存在某个容器中,例如TObjectList. 然后遍历容器并释放其内容。

不过,您可能不需要单独的容器。传递给精灵构造函数的 owner 参数维护了它拥有的所有东西的列表。你可以遍历它的Components数组,就像你可以遍历TComponent.

最后,由于您正在分配Name所有对象的属性,您可以调用Dummy_Sound.FindComponent以通过名称查找每个精灵组件。(如果您不是按名称搜索此类动态分配的组件,那么首先没有理由分配该Name属性。)

于 2013-04-19T15:28:38.800 回答