我的面板上有很多种组建(TButton,DBGrid,DBmemo...),我想定义一个函数(过程),能输入四个数字(Top,Left,With,High)就可以控制这个组件的位置和大小,所以我定义如下
procedure moveObj(sender:TObject;l:Integer;t:Integer;w:Integer;h:Integer);
但是实现的时候却sender没有left……,请问我如何才能实现此过程?实现后又如何调用,入DBGrid1调用一次,TEdit调用一次,如何实现?

解决方案 »

  1.   

    你要知道sender的类型才行呀,比如sender是TEdit,那就TEDit(sender).Left
      

  2.   


    if button1 is TButton then 
       (button1 as Tbutton).left:=l;
    ...
      

  3.   


    if Sender is TButton then 
       (Sender as Tbutton).left:=l;
    ...
      

  4.   

    procedure moveObj(sender:TObject;l:Integer;t:Integer;w:Integer;h:Integer); 
    建议更改为Sender:TControl,因为只有从control继承的控件才有left等值。
    而tedit,tbutton等都是从tcontrol类继承过来的。
    这样也不用转换了,直接调用就可以了。
    procedure moveObj(sender:TControl;l:Integer;t:Integer;w:Integer;h:Integer); 
    begin
      sender.left := l;
      sender.top := t;
      sender.width := w;
      sender.height := h;
    end;
      

  5.   

    只能进行判断,把你需要改动的控件都判断一遍。is xxx then xxx
      

  6.   


    Function MoveObj(sender:TControl;X,Y,W,H : integer): TControl;
    begin
      Result.SetBounds(X,Y,W,H);
    end;
      

  7.   

    Function MoveObj(sender:TControl;X,Y,W,H : integer): TControl;
    begin
      Sender.SetBounds(X,Y,W,H);
    end;//moveobj(DBGrid1,10,10,600,400);
      

  8.   

    TImage(Sender)
    这是我判断一个TImage类型用的。你转化一下就可以了
      

  9.   

    procedure moveObj(sender:TObject;l:Integer;t:Integer;w:Integer;h:Integer); 
    這裏的  Sender 用 TWinControl 還更合適點。呵呵 錄然一定要TOBJECT 就要先判斷子類,再強類型轉換後來處理。