procedure Tform1.clickcomp(sender : Tobject);
var
controltext :string;
begin
with Tcontrolclass(sender.classtype).create (self) do
begin
parent := (sender as Tcontrol).parent;
left := (sender as Tcontrol).left + 10;
top := (sender as Tcontrol).top + 10 ;
setlength(controlText, 50);
(sender as Tcontrol).gettextbuf(pchar(controltext),50);
controltext := pchar(controltext) + ' *';
settextbuf(pchar(controltext);
end;
end;我想问
Tcontrolclass(sender.classtype) 这里是什么意思
.create(self)括号里的self是什么意思有什么用
我都不知道pchar这个对象方法是从哪来的
pchar又是什么有什么用
var
controltext :string;
begin
with Tcontrolclass(sender.classtype).create (self) do
begin
parent := (sender as Tcontrol).parent;
left := (sender as Tcontrol).left + 10;
top := (sender as Tcontrol).top + 10 ;
setlength(controlText, 50);
(sender as Tcontrol).gettextbuf(pchar(controltext),50);
controltext := pchar(controltext) + ' *';
settextbuf(pchar(controltext);
end;
end;我想问
Tcontrolclass(sender.classtype) 这里是什么意思
.create(self)括号里的self是什么意思有什么用
我都不知道pchar这个对象方法是从哪来的
pchar又是什么有什么用
解决方案 »
- 初学delphi,想问问delphi要不要虚拟机之类的东西支持?
- delphi使用oracle更新语句问题?
- 在DElphi中定义goto 标号的方法是什么?????
- 程序中code complete功能好像出了问题,请问是怎么回事?
- 怎样直接从内存中将页面中的图片,脚本等导入TWebBrowser.
- 如何让针式打印机一直打印,不自动换页
- Delphi 7。0中的报表问题???
- 怎么让程序最小化时,不显示在任务栏,出现在右边系统托盘中?
- 请教大家一道书本中的练习题.
- DELPHI同路人!请留下你们的QQ Email!以便沟通
- 怎么样把数据库里的某个字段读到ComboBox1里?
- 多个进程实例的问题!
Self在这里等价于TForm1的实例对象Form1;
Sender是一个TObject的实例对象,
Sender.ClassType在运行时返回当时Sender的真实类类型,这里似乎是一个按钮吧。
TControlClass(SomeClassName)是一个标准的类型转换,即把类SomeClassName转换为TControlClass类,这里的限制是括号中的类必须是括号前的类的派生类。
因此,完整解释为,将Sender的真实类作为TControlClass类,以Self为所有者,创建一个实例对象。至于PChar(ControlText),也是一个标准的类型转换,即把ControlText作为PChar类型在表达式中使用。看来你还需要进一步了解Object Pascal中的数据类型、类型转换等内容。
来晚了
补充两点
如果
procedure Tform1.clickcomp(sender : Tobject);代码是由delphi生成的,那么Sender变量是触发该事件的对象
一般来说,Sender都用来表示触发该事件的对象PChar是一个类型。其实它被简单的描述成:^Char
即指向一个Char类型的指针
用PChar(SomeVar)可以强制转换SomeVar为PChar类型
PChar的存在方便了使用windows api
即与c里的字符串表示有点类似