我要写个组件,这个组件是从Tlabel类继承来的,我要在一个过程中获得  
这个组件的Width然后赋给这个组件的Caption该怎么做呢?  
 
我本想这样,一个很笨的办法:  
procedure    TPL.pl();  
begin  
Application.MainForm.ActiveControl.Caption:=Application.MainForm.ActiveControl.Width;  
 
//当前正在运行的(程序).(主窗体).(获得焦点的控件).Caption:=(程序).(主窗体).(获得焦点的控    件).Width  
end;  
 
 
但编译不了,我想是因为,不是每个控件都有Caption和Width属性.  
那我该如何做呢!?  
 
 
急啊!!请各位前辈指点!!谢谢!

解决方案 »

  1.   

    procedureTPL.pl();  
    begin  
      Caption:=Width;  
    end;  
      

  2.   

    if Application.MainForm.ActiveControl is TLabel then
     Application.MainForm.ActiveControl.Caption:= IntToStr(Application.MainForm.ActiveControl.Width);
      

  3.   

    呵呵
    果真
    procedureTPL.pl();  
    begin  
      Caption:=Width;  
    end;
    就行!谢谢jinjazz(近身剪(充电中...)老哥!我还想在问问,如果在程序中,比如
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Button1.Caption:='aaaa';//此处我能不能不用Button1.Caption,换一个所有控件都能用的方法,就是不用控件名称,用个通用的名称,      表示正在发生事件的控件.
    end;谢谢!!
      

  4.   

    self.ActiveControl的好象是针对所有的控件的,有的的控件没有Caption属性,所以用不了,也不够全面.
    jinjazz(近身剪(充电中...)老哥给了我中办法
    TButton(Sender).Caption:='aaaa';
    但也只能对TButton控件有用,我想找种能对所有控件都有用的,通用的办法.
    就象第一个问题一样  Caption:=Width; 谢谢!
      

  5.   

    uses typinfo;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     if Assigned(GetPropInfo(Sender, 'Caption')) then
        SetPropValue(Sender, 'Caption', 'aaaa');
    end;
      

  6.   

    既然你想找种能对所有控件都有用的,通用的办法,那肯定要所有控件都具有该属性才行,所以——activecontrol应该能满足你的要求
    除非你想要label或者button的text属性