起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: element

【搞定】通过代码创建控件这么慢正常吗?**

[复制链接]
发表于 2007-1-11 16:34:12 | 显示全部楼层
才看到,1秒好像不是很离谱的速度,主要是你修改每一个属性,都需要发windows消息来处理的。我的机器现在没有办法作测试

其实你可以考虑一下我9楼的建议,要好控制的多
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-11 16:44:24 | 显示全部楼层
1、谢谢,朗哥。取消几个属性,果然速度快了一点,可惜这些属性都是必须的,否则跟窗体的风格就不统一了。
2、代码创建自定义集?DataRecordView?没用过。可不可以说说思路?有什么可以参考的吗?
回复 支持 反对

使用道具 举报

发表于 2007-1-11 17:00:16 | 显示全部楼层
那你可以自定义一些控件,从这几个控件继承下来,然后重载其中的CreateParam??的函数,这样可以一次把所有需要的属性都在创建控件时候设置好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-12 09:51:31 | 显示全部楼层
为什么我这样写编译不通过呢?我在Delphi6下是可以的啊,平台提示“构造方法不能是虚方法”?这是为什么?应该怎样写?
  TMPEdit = class(TEdit)
  private
     //
  public
     //
     constructor Create(AOwner: TComponent); override;
  end;
回复 支持 反对

使用道具 举报

发表于 2007-1-12 09:58:19 | 显示全部楼层
去掉override
回复 支持 反对

使用道具 举报

发表于 2007-1-12 09:58:45 | 显示全部楼层
不是create 而是createparams
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-12 10:07:06 | 显示全部楼层
仍然不通过。朗哥,可否写个小例子?再顺便说一下为什么在Delphi下可以,而在Justep中不可以?
回复 支持 反对

使用道具 举报

发表于 2007-1-12 10:31:32 | 显示全部楼层
我做了一个例子,100个控件用了400多毫秒
procedure TMainForm.Button1Click(Sender: TObject);
var
  i: Integer;
  ed: TEdit;
  ist: Integer;
begin
  ist := Borland.Delphi.Windows.GetTickCount;
  for i:=0 to 99 do
  begin
    ed := TEdit.Create(Self);
    ed.SetBounds(10, i*35, 100, 25);
    ed.ParentCtl3D := True;
    ed.Parent := ScrollBox1;
  end;
  Dialogs.ShowMessage(SysUtils.IntToStr(Borland.Delphi.Windows.GetTickCount-ist));
end;
回复 支持 反对

使用道具 举报

发表于 2007-1-12 10:33:07 | 显示全部楼层
如果用
    ed.Ctl3D := True;
替换
    ed.ParentCtl3D := True;
只用200多毫秒
回复 支持 反对

使用道具 举报

发表于 2007-1-12 10:38:09 | 显示全部楼层

ed.Parent := ScrollBox1
放在Create以后,setBounds之前,用时900多毫秒

如果在上面基础上,把
ed.SetBounds(10, i*35, 100, 25);
换成
    ed.Left :=0;
    ed.Top :=i*35;
    ed.Width :=100;
    ed.Height :=25;
用时1100多毫秒
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-23 15:49 , Processed in 0.036146 second(s), 12 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表