在程序开发中经常会遇到类型传递不配的情况,有时又不得不传递所需的类型,我们可以采用包装的方法(碍眼法),如下,我们要在TCheckListBox中保存IGRField字段,但TCheckListBox本身只允许TObject类型,于是我们可以采用将IGRField包装成TObject的方法,再加入TCheckListBox,如下:
- 1、先将IGRField包装成TObject类;
- type TIGRFieldInfo = class(TObject)
- m_Field:IGRField;
- end;
- 2、写一函数能将IGRField包装成TIGRFieldInfo(完成从IGRField到TObject类的蜕变)
- function AddIGRFieldInfo(iField: IGRField): TIGRFieldInfo;
- var
- pInfo: TIGRFieldInfo;
- begin
- pInfo:=TIGRFieldInfo.Create;
- pInfo.m_Field:=iField;
- Result:=pInfo;
- end;
- 3、具体应用到TCheckListBox中:
- procedure *****************
- var
- i,index: Integer;
- pInfo: TIGRFieldInfo;
- begin
- ..................
- pInfo:=AddIGRFieldInfo(CommReport.DetailGrid.Recordset.Fields.Item[i]);
- Index := CheckListBox.Items.AddObject(pInfo.m_Field.Name,pInfo);
- CheckListBox.Checked[Index] :=True;
- ................
- end;
- 4、从TCheckListBox中取出来使用:
- .................
- Var
- pInfo: TIGRFieldInfo;
- begin
- ...................
- for i:=0 to CheckListBox.Items.Count-1 do
- pInfo := TIGRFieldInfo(CheckListBox.Items.Objects[i]);
- ............................................