指针的使用的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 10265431
  • 开始时间 开始时间
1

10265431

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个类,想让这个类处理界面元素,为了能在这个类中访问主窗口上的所有组件,我想在类创建时传递一个窗体指针给这个类,在类中可以通过指针来访问主窗口上的所有组件,程序是这么写的:

// 界面元素处理类
type
TMessageDispose = class

private
m_pfrmMain :Pointer
// 主窗口指针,以便于访问窗口上的组件
public
procedure Create(pForm :Pointer);
procedure Destroy;
end;

implementation

procedure TMessageDispose.Create(pForm :Pointer);
begin

inherited Create;
m_pfrmMain := pForm;

end;

那么怎么传递这个指针呢,怎么通过这个指针访问窗体控件呢?
funMessageDispose := TMessageDispose.Create(frmamin);
Create(frmamin)
这里的数据类型应该怎么转换呢?
 
简单的方法 m_pfrmMain : TForm;

如果要用指针,就强制转换
funMessageDispose := TMessageDispose.Create(Pointer(frmamin));
访问
Tfrmamin(m_pfrmMain)....
 
现在的情况是
如果你不引用uMain,那么也将无法知道frmMain的结构和通信方式
如果引用uMain是必须的了,那么何不将m_pfrmMain定义为TfrmMain
如此一来
 
唉!
TForm就是指针啊!

例如:
MyForm : TForm;

begin
MyForm:=Form1;
end;
 
不是特殊情况的话还是传递 TForm比较好. 虽然delphi中的指针很容易操作. 如楼上那位的强制转换就可以从指针到对象, 对象到指针的转化.

遍历一个Form上的所有组件, 可以用递归遍历. 这样也可以遍历:

var
iCount: Integer;
begin
for iCount := 0 to ComponentCount - 1 do
mmo1.Lines.Add(Components[iCount].Name);
end;
当然 property Components[Index: Integer]: TComponent read GetComponent;
property ComponentCount: Integer read GetComponentCount;
property ComponentIndex: Integer read GetComponentIndex write SetComponentIndex;
property ComponentState: TComponentState read FComponentState;
property ComponentStyle: TComponentStyle read FComponentStyle;
几个属性是TComponent 类的属性, 所有的组件都具有这样的属性, 但是你传递是TForm那么就调用TFrom的这些属性就可以遍历了. 改改上面的代码就是:
若 FMain为你的私有成员, 代表当前操作的窗体对象.那么:

var
iCount: Integer;
begin
for iCount := 0 to FMain.ComponentCount - 1 do
mmo1.Lines.Add(FMain.Components[iCount].Name);
end;
要做相应的操作, 只需要, 判断每个组件的类型然后进行操作即可.
 
建议传递对象,方法如楼上所说,如果不是在DLL中使用的话可以使用RTTI,否则就不能使用
 
后退
顶部