应该使用哪种方法来做这样动态数组或链表? SetLength用来定义对象长度,如果要将a[4]删除的话同样要手工将前后的元素衔接起来,我想一样是很麻烦的。使用TList加动态控件数组可以很好的对自己创建的对象进行管理,是个不错的选择。不过释放资源的工作仍要自己来完成。但是我建议,最复杂的可能是最有效率的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 您能否告知哪能找到Tlist应用的源码呢? 另外。问您一个简单问题。在delphi中,创建一个类是用New吗? 创建一个类用TTank.Create方法。aTank := TTank.Create;TList.Add( TTank.Create );Delphi中有一个类叫TObjectList,可以帮你释放内存。如ObjList.Delete( i ),不仅把这个位置删除,还会释放在这个位置的对象。 用动态数组应该是最容易的。或 Tlist 关于增删请参考 TList 的原程序 To AP: 您能否详细说说如何使用动态数组To agui 在delphi中,任何一个类都派生自TObject吗?他们都有Create方法吗,如果不是,其他的非派生自Tobject的类如何创建。aTank := TTank.Create;TList.Add( TTank.Create );这两句是独立的吗?还是应该TList.Add(aTank); 应该是aTank := TTank.Create;//....TList.Add( TTank );在TList中只是添加了一个指向对应TTank实例的指针; TOBject是所有类的基类,就象VC中的COBject一样。所有类都是COBject中派生出来的,都应该有构造函数和析构函数的。使用动态数组:procedure myBtnclick(Sender: TObject);//自定义按钮事件var btnArr : array of TButton; i:integer;//........begin SetLength(btnArr, 10); for i:=0 to 9 do begin btnArr[i] := TButton.Create(self); btnArr[i].Caption := 'xxx'; //..... btnArr[i].OnClick := myBtnclick; //定按钮事件过程 btnArr[i].tag := i; //用于标识控件数组 end;end;procedure myBtnclick(Sender: TObject);//跟据tag来判断按下了哪个数组按钮begin case TButton(sender).tag of 1:begin //.....按下了第一个按钮 end; 2:begin end; //................. end;end; 但是使用动态数组是不是就不能随意删除和插入按钮了(指crob的例子而言)? 对不起,几天没来。上面的是随手写的,有些杂乱。应该是:aTank := TTank.Create;ObjList.Add(aTank);或ObjList.Add( TTank.Create );正如Crob(我干嘛这么帅)所说,TObject是所有类的祖先类。 var I : Integer; Arr: Array of Object; ATank: TTankObj;begin SetLength(Arr, 10); For I := 0 to 9 do begin ATank := TTankObj.Create(...); Arr[I] := ATank; end;end;//DestroyFor I := 0 to 9 dobegin ATank := Arr[I]; ATank.Free; Arr[I] := NIL;end; 【求助】问一个很简单的入门问题 今天不休息! 哈哈---别笑我 为何在我的应用程序中打开一个表后,其他应用程序就打不开此表了呢?急啊! 一个小问题,怎样表示一个单引号的字符?(在线等待) delphi 的 TADOStoredProc 返回值参数如何设??我弄了一个晚上了。大哥大姐帮帮忙吧!!! ADOQuery分页码时的游标问题 @#$%^&*()我不懂!请教大家!!!!80分相送,快来看喽! 特急:安装了控件后帮助的索引空白了? 怎样依据计算字段进行排序? 怎样才能将WAV文件写入CD R/RW制作成CD 现在用DELPHI真的很难找到工作吗?DELPHI程序员请进!!!
如ObjList.Delete( i ),不仅把这个位置删除,还会释放在这个位置的对象。
或 Tlist
您能否详细说说如何使用动态数组
To agui
在delphi中,任何一个类都派生自TObject吗?他们都有Create方法吗,如果不是,其他的非派生自Tobject的类如何创建。
aTank := TTank.Create;TList.Add( TTank.Create );
这两句是独立的吗?还是应该TList.Add(aTank);
//....
TList.Add( TTank );在TList中只是添加了一个指向对应TTank实例的指针;
procedure myBtnclick(Sender: TObject);//自定义按钮事件var btnArr : array of TButton;
i:integer;//........
begin
SetLength(btnArr, 10);
for i:=0 to 9 do begin
btnArr[i] := TButton.Create(self);
btnArr[i].Caption := 'xxx';
//.....
btnArr[i].OnClick := myBtnclick; //定按钮事件过程
btnArr[i].tag := i; //用于标识控件数组
end;
end;procedure myBtnclick(Sender: TObject);//跟据tag来判断按下了哪个数组按钮
begin
case TButton(sender).tag of
1:begin
//.....按下了第一个按钮
end;
2:begin end;
//.................
end;
end;
ObjList.Add(aTank);
或
ObjList.Add( TTank.Create );正如Crob(我干嘛这么帅)所说,TObject是所有类的祖先类。
I : Integer;
Arr: Array of Object;
ATank: TTankObj;
begin
SetLength(Arr, 10);
For I := 0 to 9 do
begin
ATank := TTankObj.Create(...);
Arr[I] := ATank;
end;
end;//Destroy
For I := 0 to 9 do
begin
ATank := Arr[I];
ATank.Free;
Arr[I] := NIL;
end;