Delphi学习_控件设计器的实现_动态对象的创建

动态创建对象列表

  • 问题描述:

设计器在使用时没有固定的控件数量规定,同时控件类型也没有明确细分,需要程序在用户通过button选择后动态创建。

  • 问题分析:

控件类型的不同是指在最后完成界面设计后导出的文本消息不同,但基本属性结构相同,所以直接在自定义的父类下完成类的派生,在子类中对导出动作进行重写。
动态创建需要通过一个TObjectList对象对产生的动态对象进行保存,同时也可以通过该类的一些属性完成动态对象的操作。

  • 具体实现

在这里只派生了3个子类,同时在界面上也添加了3个button,通过button的点击回调函数完成一个对象的创建和保存,这里以创建T1Object对象为例:

procedure TMainForm.ToolButton1Click(Sender: TObject);
var
  newObject:T1Object;
begin
  newObject := T1Object.Create(owner);
  with newObject do
  begin
    parent := panel1;
    kLeft := 1;
    kTop := 1;
    kWidth := 50;
    kHeight := 20;
    ID := proj.IdObjectNumber;
    page := tabset1.TabIndex;
  end;
  //加入对象列表
  if ObjectList = nil then ObjectList := TObjectList.Create(true);
  ObjectList.Add(newObject);
  proj.IdObjectNumber := proj.IdObjectNumber +1;
  //更新ListBox
  UpdateValueListEditor(newObject);
  ListBox1.Items.Add(inttostr(newObject.ID)+':'+newObject.Caption);
  tabset1.OnClick(sender);
  proj.saveFlag := 1;
end;

对于面向对象十分不熟练的我一开始不太理解为什么声明的变量对象还要再调用一次Create,但是不调用就会出问题,后面慢慢发现Creat有点像C里的malloc,声明的变量对象只是一个指针,只用Creat后内存的内容才不会本覆盖。Destory就像是free将动态分配的内存释放掉,对于这里来说就是删除一个动态对像。

为了能让用户清除的看到已经创建了几个对象,这里添加了一个ListBox控件,当ObjectList对象列表发生改变时,及时的对ListBox进行更改。

在这里插入图片描述
总结
当对象列表完成构建后,后续的操作基本就是对列表的遍历操作。TObjectList对象在使用前要判断是否等于nil,如果是nil的情况代表该对象没有进行Creat,此时如果调用对象的属性会产生报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值