关于delphi的控件的名称问题,大家请进!200分哦! ( 积分: 200 )

  • 主题发起人 主题发起人 cqwty
  • 开始时间 开始时间
C

cqwty

Unregistered / Unconfirmed
GUEST, unregistred user!
用了delphi这么长时间,但是对这个工具还是不熟悉。我想问一下,当拖控件放在窗体上的时候,这个控件名称是怎么实现自动的?比如说我拖5个button在窗体上,这5个窗体的名字就分别是button1,button2,button3,button3,button5,那么在delphi里面是怎么实现的呢?我查了一下tcomponent里面的Name属性的实现代码,没有发现什么踪迹。这段代码是:
constructor TComponent.Create(AOwner: TComponent);
begin
FComponentStyle := [csInheritable];
if AOwner <> nil then AOwner.InsertComponent(Self);
end;

procedure TComponent.InsertComponent(AComponent: TComponent);
begin
AComponent.ValidateContainer(Self);
ValidateRename(AComponent, '', AComponent.FName);
Insert(AComponent);
AComponent.SetReference(True);
if csDesigning in ComponentState then
AComponent.SetDesigning(True);
Notification(AComponent, opInsert);
end;

procedure TComponent.ValidateRename(AComponent: TComponent;
const CurName, NewName: string);
begin
if (AComponent <> nil) and not SameText(CurName, NewName) and
(AComponent.Owner = Self) and (FindComponent(NewName) <> nil) then
raise EComponentError.CreateResFmt(@SDuplicateName, [NewName]);
if (csDesigning in ComponentState) and (Owner <> nil) then
Owner.ValidateRename(AComponent, CurName, NewName);
end;
这是相关的代码,可是看不出来是从哪里来这么设置所创建的控件的名字的了。
各位高手请发表看法了。
 
自由灵活,所见即所得的表格组件,开发环境下设计表格内容,独有的单据和Excel两种界面风格,可设计出各种类型的界面,配合强劲的打印功能,轻松解决自由界面和报表难题。其显著特性包括:
. 提供了单据, Excel ,Grid 三种界面风格。
. 开发环境下设计表格,所见即所得。
. 支持数据库和分组。
. 既可以作为普通表格使用,又可以作为数据感知组件使用,或者两者同时使用。
. 独特的双数据源连接,轻松实现单记录布局和主从表连接。
. 除了通过数据集本身的方法来访问数据库的记录之外,还可以通过读取单元格的Text属性来实现,这样就不 必在数据集间来回移动记录。
. 支持unicode文本。
. 提供了列排序,移动行列,隐藏行列,增删行列等功能。
. 提供了 Excel 样式的过滤功能。
. 方便的查找对话框。
. 提供了单元格合并,单元格命名,只读单元格,锁定单元格等功能。
. 提供了列对象,用于控制整列单元格。
. 支持虚表,公式(包括自定义公式), RTF 格式文本,Ole 对象和图表。
. 提供了按钮、下拉框、复选框、单选钮、日期、超链接、数值类等多种输入方式。
. 支持整形、正整形、负整形、浮点数、正浮点数、负浮点数等输入方式。可自动处理千分位,可设置小数位 数。
. 九种文本和图形对齐方式,还可通过单元格边距控制输出位置。
. 导入/导出 Excel 文件,相互粘贴数据。
. 提供了自动调整行高,垂直文本输出功能。
. 可以设置单元格掩码,附有掩码编辑器。
. 设置单元格的 PasswordChar。
. 单元格内容字符数限制。
. 单元格支持图形,并且可以拉伸,层叠图形。
. 可以显示/隐藏单元格的边框、可以设置边框的类型、大小、颜色。
. 支持单元格斜线。
. 3D 外观的单元格。
. 设置单元格的光标和提示。
. 支持自绘画单元格。
. 设置固定行和列。
. 保存到文件和流。
. 提供了复制/粘贴区域功能。
. VCL 版本可以插入其它可视 VCL 组件。

http://www.anylib.com
 
Tcomponent类只是一个基础的组件类,他只是提供对组件的基础管理的功能,而你说的每一个button是封装了原生的windows的button之后的vcl控件,他实质是一个窗口,窗口可以是表单,可以说button,为甚么,这就是面向对象里面的多态,他们本质都是窗口,只是vcl对窗口的创建过程进行了包装,利用虚函数等机制创建出型态不同的控件.
 
这是IDE的功能,可惜,Borland没有公开IDE的源码。实际上当你往窗口上放控件的时候(设计时期),Delphi的IDE可以通过接口知道这个操作的消息,并且有行为可以改变控件的名字(研究一下CnPack的源码包你就明白了)。
 
同意楼上的,这是IDE的功能,并不是VCL框架提供的
你在运行期用代码创建控件就不会自动命名,即可证明
 
只有看代码了,帖子先放这里放放,看看还有什么人回答没有哈,嘿嘿,谢谢各位哦!
 
是呀,IDE的功能,与VCL无关!
实现起来无非是用资源文件咯,递增1吧.
 
实际上,这个功能也并不难,非常的简单,首先,取出类名(去掉前面的'T'字符),然后在控件列表(IDE自己维护了这个列表,你可以在Object TreeView窗口上看到这些控件)中寻找同类型的控件,把他们Count一次,结果+1再组合成新增加的控件的Name就ok了。不是很难哈。
 
哈哈,我还知道有一个tlist来维护这些控件的呢,然后遍历这些控件里面的名称,对每一类控件有个计数器,因为有一个count来计数的撒。其实实现的方法倒是很多,我只是在看delphi的代码的时候,顺便看了一下。
 
救命啊?最近給Borland中國盯上了!請有正版Delphi使用授權的人幫助一下
QQ:10961560
 
多人接受答案了。
 
后退
顶部