我的面板上有很多种组建(TButton,DBGrid,DBmemo...),我想定义一个函数(过程),能输入四个数字(Top,Left,With,High)就可以控制这个组件的位置和大小,所以我定义如下
procedure moveObj(sender:TObject;l:Integer;t:Integer;w:Integer;h:Integer);
但是实现的时候却sender没有left……,请问我如何才能实现此过程?实现后又如何调用,入DBGrid1调用一次,TEdit调用一次,如何实现?
procedure moveObj(sender:TObject;l:Integer;t:Integer;w:Integer;h:Integer);
但是实现的时候却sender没有left……,请问我如何才能实现此过程?实现后又如何调用,入DBGrid1调用一次,TEdit调用一次,如何实现?
if button1 is TButton then
(button1 as Tbutton).left:=l;
...
if Sender is TButton then
(Sender as Tbutton).left:=l;
...
建议更改为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;
Function MoveObj(sender:TControl;X,Y,W,H : integer): TControl;
begin
Result.SetBounds(X,Y,W,H);
end;
begin
Sender.SetBounds(X,Y,W,H);
end;//moveobj(DBGrid1,10,10,600,400);
这是我判断一个TImage类型用的。你转化一下就可以了
這裏的 Sender 用 TWinControl 還更合適點。呵呵 錄然一定要TOBJECT 就要先判斷子類,再強類型轉換後來處理。