关于TList高手支招!在线等待……

jaysuper 2004-05-11 11:30:43
哪位有,TList的中文祥解资料,帮助中的英文理解的不是很明确,或者有例子也可,最好加上说明,比如Capacity和Count是如何联系的,又如何时用pack,delete和remove 又有什么不同?可在线交流QQ:29599652 (加入时说明关于d7)
小弟在开发gis时碰到的问题:
运行环境:xp,d7.
函数说明:DoubleobjectCombinationOneObject 把列表中的两个object合并成一个(先删除指定的两个,把合并后的再加入到列表。用Tlist的delete删除用add加入)
ComBinArr作用为合并数组没有太大的关系吧
for i:= 0 to FLayerDataList.Count -1 do
begin
for j:=0 to FlayerDataList[i].RoadCount -1 do
begin
TmpRoad1 := FLayerDataList[i].RoadObject[j];
for k:=0 to FLayerDataList[i].RoadCount -1 do
begin
TmpRoad2 := FLayerDataList[i].RoadObject[k];
{**************在上面的这句出错,第一次删除的时候不会出错,删除后roadCount就会少一(删除了两个加入了一个)第二次的时候运行到上面这句k值会一直会检测到河roadcount的值相等,那么取tmpRoad2的值时候就会越界,不知道为什么? 是删除的方法不对?还是还需要什么操作?例如:开始 roadcount=107
  第一次删完后:roadcount =106
此时k可以取到106,从列表取值得时候就会越界}
if (j<>k) and (TmpRoad1.sName = TmpRoad2.sName)and (TmpRoad1.sName<>'') then
begin
if (TNavRoadData(FNavRoadDataList[j]).FNode=TNavRoadData(FNavRoadDataList[k]).TNode) then
begin
tmpRoad:=TRoadData.Create;
tmpRoad.Assign(TmpRoad1);
ComBinArr(TmpRoad.APointList,TmpRoad2.aPointList);
DoubleobjectCombinationOneObject(i,j,k,TmpRoad,sdtRoad);
end;
if (TNavRoadData(FNavRoadDataList[j]).TNode=TNavRoadData(FNavRoadDataList[k]).FNode) then
begin
tmpRoad:=TRoadData.Create;
tmpRoad.Assign(TmpRoad2);
CombinArr(TmpRoad.aPointList,TmpRoa[blue][/blue]d1.aPointList);
DoubleobjectCombinationOneObject(i,j,k,TmpRoad,sdtRoad);
end;
end;
end;
end;
end;
...全文
105 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jaysuper 2004-05-11
  • 打赏
  • 举报
回复
FlayerDataList : TLayerList;
TmpRoad,tmproad1,tmproad2 : TToadData;
********************************************
TLayerList = class
private
LayerList, IDXList: TList;
procedure ClearLayerData;
procedure ClearIDXData;
function GetIDX(sLayer: string; StartIDX: integer; EndIDX: integer): integer;
function GetCount: integer;
function GetItems(i: integer): TLayer;
function GetCapacity: integer;
procedure SetCapacity(const Value: integer);
public
function AddLayer(Layer: TLayer): integer;
procedure InsertLayer(i: integer; Layer: TLayer);
procedure MoveLayer(i, j: integer);
procedure DeleteLayer(i: integer);
procedure RemoveLayer(i: integer);
function GetLayerIDX(sLayer: string): integer;
procedure Clear;
property Capacity: integer read GetCapacity write SetCapacity;
property Count: integer read GetCount;
constructor Create;
destructor Destroy; override;
property Items[i: integer]: TLayer read GetItems; Default;
end;

*****************************************
TRoadData = class(TMapObject) //定义道路资料记录结构
protected
procedure AssignTo(Dest: TPersistent); override;
public
ID : Integer;
ParentID :integer;
sSecName: string; //第二名称
aPointList: TAPoint; //点列表(接顺序)
iDirection: smallint; //方向;
//约定:0表示双向;1表示从第一点到最后一点;-1表示从最后一点到
//第一点。
iMinx: integer; //最小点X坐标
iMiny: integer; //最小点y坐标
iMaxx: integer; //最大点X坐标
iMaxy: integer; //最大点y坐标

// iLevel :Integer;
// iWidth :Integer;

iDVGX: integer;
iDVGY: integer;

Tag: integer;
TagFirst, TagLast: integer;
RectIDX: integer;//道路所在的网格.

fDist: double; //长度;
//以上五个值不再保存在表或文件中,而是在装入时计算。
//去掉了原格式中起点坐标和终点坐标,需要时直接取数组的第0个和最
//后一个点的坐标。
aFromLinkNo: TAGUID;
aToLinkNo: TAGUID;
DTFr: TTime;
DTTo: TTime;
ByteData: TByteData;
//所谓连接,不完全指起始点或终点完全重合的道路,也包括起始点和//终点距离在5个地图坐标点范围以内的道路(不包括5个点)。
function GetRate(Index: integer): double;
procedure CalcMaxMin;
constructor Create;
end;
ailibuli 2004-05-11
  • 打赏
  • 举报
回复
把FLayerDataList、TmpRoad、TmpRoad1、TmpRoad2、...都是什麼?
貼出TList的定義、構造...
jaysuper 2004-05-11
  • 打赏
  • 举报
回复
分不够可以再加。
jaysuper 2004-05-11
  • 打赏
  • 举报
回复
分不够可以再加。

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧