我写了一个类,将该类通过TTreeVeiw控件的Ttreenode节点的TtreeNode.addobject(nil,'a',类的实例名)方法加入的Ttreeveiw控件,可以将该类实例加入该书节点,可是无法访问这个类的实例.代码如下:
//////////////////////////////////////////////////////////////////////////unit U_OilLog;interface
uses Messages, SysUtils, Classes;{**************************************************************************
//功能:描述油罐的类对象,使用户可以访问油罐的油号,油罐号,以及该油罐的 *
测试数据日志 *
//************************************************************************}
type ToilCan =Class
private
FOilCanNo:String; //油罐号
FOilNo:String; //油号
fslOilLog:Tstringlist;
constructor Create;
destructor Destroy;
protected
procedure PSetOilNo(fsOilNo:String);
function fGetOilNo():string;
procedure PSetOilCanNo(fsOilCanNo:String);
function fGetOilCanNo():string;
public
procedure PAppendOilLog(fsLog:string);
function fGetOilLog():Tstringlist; //日志转换
function fnbTransLog():boolean;
published
property OilNo:string read fGetOilNo write psetoilNo;
property OilCanNo:string read fGetOilCanNo write psetoilCanNo;
property OilLog:Tstringlist read fslOilLog write fslOilLog; end;implementation{ ToilCan }constructor ToilCan.Create;
begin
fslOilLog := Tstringlist.Create;
end;destructor ToilCan.Destroy;
begin
fslOilLog.Free;
end;function ToilCan.fGetOilCanNo: string;
begin
Result := FOilCanNo;
end;function ToilCan.fGetOilLog: Tstringlist;
begin
Result := fslOilLog;
end;function ToilCan.fGetOilNo: string;
begin
Result := FOilNo;
end;function ToilCan.fnbTransLog: boolean;
begin
//
end;procedure ToilCan.PAppendOilLog(fsLog: string);
begin
fslOilLog.Append(fsLog);
end;procedure ToilCan.PSetOilCanNo(fsOilCanNo: String);
begin
FOilCanNo := fsOilCanNo;
end;procedure ToilCan.PSetOilNo(fsOilNo: String);
begin
FOilNo := fsOilNo;
end;end.
///////////////////////////////////////////////////////////////////////
将该类实例加入树点,可以通过OK
//////////////////////////////////////////////////////////////////////function Toil_station_can.fnbCreateOilCanTree: boolean;
var
liNum:integer;
begin
//查询数据库生成相应的油罐对象
With DM_LquidTest.query do
begin
close;
sql.Clear;
sql.Add('select S_OilCANNO,n_oilno from T_OilCan where c_state=' + '''' +'1'+ '''' + ' order by S_OilCANNO');
open;
Result := Recordset.RecordCount >0;
end;
if not result then
exit; //生成相应油罐对象
FiOilCanNum := DM_LquidTest.query.Recordset.RecordCount;
Setlength(FAOilCan,FiOilCanNum); for liNum := 0 to FiOilCanNum -1 do
begin
FAOilCan[liNum] := ToilCan.Create;
FAOilCan[liNum].OilNo := DM_LquidTest.query.fieldByname('n_oilno').AsString;
FAOilCan[liNum].OilCanNo := DM_LquidTest.query.fieldByname('S_OilCANNO').AsString;
if tvOilCan.Items.Count<1 then
tvOilCan.Items.addobject(nil,'油罐'+FAOilCan[liNum].OilCanNo,FAOilCan[liNum])
else
tvOilCan.Items.addobject(tvOilCan.Items[0],'油罐'+FAOilCan[liNum].OilCanNo,FAOilCan[liNum]);
tvOilCan.Items[linum].ImageIndex := 1;
DM_LquidTest.query.Next;
end;
end;//????????????????????????????????????????????????????????????????????????
//??如何访问数的某一节点所指向类
//??????????????????????????????????????//
//该行代码编译过程中提示错误信息‘pointer type required’
ToilCan(FtreeNode.Data)^.FOilCanNo;
//该行代码编译过程中提示错误信'undeclared identifier:FOilCanNo '
//Toilcan(FtreeNode.Data)^.FOilCanNo;
//////////////////////////////////////////////////////////////////////////unit U_OilLog;interface
uses Messages, SysUtils, Classes;{**************************************************************************
//功能:描述油罐的类对象,使用户可以访问油罐的油号,油罐号,以及该油罐的 *
测试数据日志 *
//************************************************************************}
type ToilCan =Class
private
FOilCanNo:String; //油罐号
FOilNo:String; //油号
fslOilLog:Tstringlist;
constructor Create;
destructor Destroy;
protected
procedure PSetOilNo(fsOilNo:String);
function fGetOilNo():string;
procedure PSetOilCanNo(fsOilCanNo:String);
function fGetOilCanNo():string;
public
procedure PAppendOilLog(fsLog:string);
function fGetOilLog():Tstringlist; //日志转换
function fnbTransLog():boolean;
published
property OilNo:string read fGetOilNo write psetoilNo;
property OilCanNo:string read fGetOilCanNo write psetoilCanNo;
property OilLog:Tstringlist read fslOilLog write fslOilLog; end;implementation{ ToilCan }constructor ToilCan.Create;
begin
fslOilLog := Tstringlist.Create;
end;destructor ToilCan.Destroy;
begin
fslOilLog.Free;
end;function ToilCan.fGetOilCanNo: string;
begin
Result := FOilCanNo;
end;function ToilCan.fGetOilLog: Tstringlist;
begin
Result := fslOilLog;
end;function ToilCan.fGetOilNo: string;
begin
Result := FOilNo;
end;function ToilCan.fnbTransLog: boolean;
begin
//
end;procedure ToilCan.PAppendOilLog(fsLog: string);
begin
fslOilLog.Append(fsLog);
end;procedure ToilCan.PSetOilCanNo(fsOilCanNo: String);
begin
FOilCanNo := fsOilCanNo;
end;procedure ToilCan.PSetOilNo(fsOilNo: String);
begin
FOilNo := fsOilNo;
end;end.
///////////////////////////////////////////////////////////////////////
将该类实例加入树点,可以通过OK
//////////////////////////////////////////////////////////////////////function Toil_station_can.fnbCreateOilCanTree: boolean;
var
liNum:integer;
begin
//查询数据库生成相应的油罐对象
With DM_LquidTest.query do
begin
close;
sql.Clear;
sql.Add('select S_OilCANNO,n_oilno from T_OilCan where c_state=' + '''' +'1'+ '''' + ' order by S_OilCANNO');
open;
Result := Recordset.RecordCount >0;
end;
if not result then
exit; //生成相应油罐对象
FiOilCanNum := DM_LquidTest.query.Recordset.RecordCount;
Setlength(FAOilCan,FiOilCanNum); for liNum := 0 to FiOilCanNum -1 do
begin
FAOilCan[liNum] := ToilCan.Create;
FAOilCan[liNum].OilNo := DM_LquidTest.query.fieldByname('n_oilno').AsString;
FAOilCan[liNum].OilCanNo := DM_LquidTest.query.fieldByname('S_OilCANNO').AsString;
if tvOilCan.Items.Count<1 then
tvOilCan.Items.addobject(nil,'油罐'+FAOilCan[liNum].OilCanNo,FAOilCan[liNum])
else
tvOilCan.Items.addobject(tvOilCan.Items[0],'油罐'+FAOilCan[liNum].OilCanNo,FAOilCan[liNum]);
tvOilCan.Items[linum].ImageIndex := 1;
DM_LquidTest.query.Next;
end;
end;//????????????????????????????????????????????????????????????????????????
//??如何访问数的某一节点所指向类
//??????????????????????????????????????//
//该行代码编译过程中提示错误信息‘pointer type required’
ToilCan(FtreeNode.Data)^.FOilCanNo;
//该行代码编译过程中提示错误信'undeclared identifier:FOilCanNo '
//Toilcan(FtreeNode.Data)^.FOilCanNo;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货