现有一个对象名称为obj,它包括left,height,width属性,如何将它的属性作为一个变量处理,如令str为变量,str等于left或height或width。如何使用
obj.str=xx。

解决方案 »

  1.   

    BCB的RTTI可以做到这一点,但是更好的办法是你改变一下编程的思路。
      

  2.   

    不太明白;你在PUBLIC里声明一个变量,CREATE一个OBJECT后,当然就可以象你说的那么用。
      

  3.   

    没理解你的意思!使用记录类型实现也许更好Tobj = class
    private
      FLeft: Integer;
    published
      property Left: Integer read FLeft write FLeft;
    end;var obj:Tobj
    设置obj.Left:=xx,FLeft的值就会改变为xx
      

  4.   

    没理解你的意思!使用记录类型实现也许更好Tobj = class
    private
      FLeft: Integer;
    published
      property Left: Integer read FLeft write FLeft;
    end;var obj:Tobj
    设置obj.Left:=xx,FLeft的值就会改变为xx
      

  5.   

    运行期动态程序
    visual C++中有
      

  6.   

    问题没有说明白 是这样的
    有一个变量 :Str:String;
    str:='left';或者 str:='right'
    还有一个Button1:TButton
    我想用
    Button1.str来获得Button1.Left同样的效果,该怎么做
    ??
      

  7.   

    uses TypInfo;{$R *.dfm}procedure TMainForm.Button1Click(Sender: TObject);
    begin
      SetOrdProp(Button1, 'Left', 400);
    end;
      

  8.   

    "str:='left'",str是字符串"Button1.str来获得Button1.Left同样的效果",又肯定要是整型那当然不可能所以肯定要是两个Tobj = class
    private
      ...
      FTypeStr:String;
      procedure GetStr:Integer;
      procedure SetStr(Value: Integer);
    published
      property TypeStr: String read FStr write FStr;
      property Str: Integer read GetStr write SetStr;
    end;procedure Tobj.GetStr:Integer;
    begin
      if FStr='Left' then
        Result:=Left
      else if FStr='Top' then
        Result:=Top;
    end;procedure Tobj.SetStr(Value: Integer);
    begin
      if FStr='Left' then
        Left:=Value
      else if FStr='Top' then
        Top:=Value;
    end;var obj:Tobj;obj.TypeStr:='Left';
      

  9.   


    Ttemp = class(someclass)
    private
      Strs:String;
      procedure Set_Str(Value: String);published
      property 属性名称: String read Strs write Set_Str default '加入默认值' ;
    end;procedure Ttemp.set_Str(value:string);
    begin
    if value<>Strs then
      Strs:=value; 
    end;