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又是什么有什么用

解决方案 »

  1.   

    TControlClass(Sender.ClassType).Create(Self)的含义是:
    Self在这里等价于TForm1的实例对象Form1;
    Sender是一个TObject的实例对象,
    Sender.ClassType在运行时返回当时Sender的真实类类型,这里似乎是一个按钮吧。
    TControlClass(SomeClassName)是一个标准的类型转换,即把类SomeClassName转换为TControlClass类,这里的限制是括号中的类必须是括号前的类的派生类。
    因此,完整解释为,将Sender的真实类作为TControlClass类,以Self为所有者,创建一个实例对象。至于PChar(ControlText),也是一个标准的类型转换,即把ControlText作为PChar类型在表达式中使用。看来你还需要进一步了解Object Pascal中的数据类型、类型转换等内容。
      

  2.   

    ……
    来晚了
    补充两点
    如果
    procedure Tform1.clickcomp(sender : Tobject);代码是由delphi生成的,那么Sender变量是触发该事件的对象
    一般来说,Sender都用来表示触发该事件的对象PChar是一个类型。其实它被简单的描述成:^Char
    即指向一个Char类型的指针
    用PChar(SomeVar)可以强制转换SomeVar为PChar类型
    PChar的存在方便了使用windows api
    即与c里的字符串表示有点类似
      

  3.   

    cnsuyong(小可) 解释不错,建议给分。