算了,还是贴两个函数给你吧就可以实现你的功能了。
//*******************************************//
// Description : 创建在客户端用户保存设置区域的文件
// mapControl : the mapx
// return : nil
// Author : HaoGui0
// Date : 2004_02_17
//*******************************************//
procedure CreateUserAreaTable(mapControl : TMap);
var
lyrInfo : LayerInfo;
flds : Fields;
fileName:string;
pTemp
char;
begin
try
flds := CoFields.Create;
with fldsdo
begin
AddIntegerField(AREA_INDEX,true);
// 第一个字段 (编号)
AddStringField(AREA_NAME, AREA_NAME_LENGTH,FALSE);
// 第二个字段 (名称)
AddStringField(AREA_TYPE,AREA_TYPE_LENGHT,FALSE);
// 第三个字段 (类型)
AddStringField(AREA_CREATETIME,AREA_CREATETIME_LENGTH,FALSE);
// 第四个字段 (创建时间)
end;
lyrInfo := CoLayerInfo.Create;
lyrInfo.type_:=miLayerInfoTypeNewTable;
fileName := InitData.GetAppPath() + TABLE_PATH + AREA_TABLE_NAME + TABLE_TYPE;
lyrInfo.AddParameter('FileSpec',fileName);
lyrInfo.AddParameter('Name',AREA_TABLE_NAME);
lyrInfo.AddParameter('Fields',flds);
mapControl.Layers.Add(lyrInfo,EmptyParam);
except on e : Exceptiondo
begin
ShowMessage(e.Message);
InitData.WriteErrorToLog(ERRORMSG_MAPX_CREATE_AREAFILE + #9 + 'CreateUserAreaTable()',m_strUID);
end;
end;
end;
//*******************************************//
// Description : 把用户自定义的区域以及字段信息保存在.tab中
// X1,Y1,X2,Y2 : 区域的位置
// return : nil
// Author : HaoGui0
// Date : 2004_02_19
//*******************************************//
procedure UserAddRectToTab(const X1,Y1,X2,Y2 :do
uble);
var
mapx : TMap;
ftrTemp,ftr : Feature;
lyrAreaTab : Layer;
bCreateFlag,bFlay : Boolean;
strInput : String;
ds : CMapXDataset;
rvs : CMapXRowValues;
iRvCount : Integer;
rect : CMapXRectangle;
style : CMapXStyle;
begin
{$IFDEF SLAVECENTER}
try
bCreateFlag := true;
strInput := '';
ftrTemp := DrawRect(gpsClient.Map1,m_TempLyrMain,X1,Y1,X2,Y2,miPatternDiagCross,BODERCOLOR_MAIN_REGION,BODERWIDTH_MAIN_REGION);
mapx := gpsClient.Map1;
lyrAreaTab := mapx.Layers.Item[AREA_TABLE_NAME];
if JudgeInterset(ftrTemp,mapx,lyrAreaTab) then
begin
if (MessageBox(0,pchar('区域相交,选择确定出现车辆同时处于多个区域时以前边的区域优先!!'),
pchar('提示'),MB_OKCANCEL) = IDCANCEL) then
begin
bCreateFlag := false;
end;
end;
if bCreateFlag then
begin
bFlay:=false;
{调用输入区域名称对话框,如确定则写入到fields中,否则取消;}
while (true)do
begin
bFlay:=InputQuery('区域名称', '区域名称', strInput);
if (bFlay) and (strInput<>'') then
begin
if InitData.FindNameFromMapAreaStruct(strInput) then
{如果此名字还不存在}
begin
break;
end else
begin
MessageBox(0,'以前已经存在这个名字,请重新输入','提示!',MB_OKCANCEL);
end;
end;
if not bFlay then
break;
end;
// end While
if bFlay then
begin
ds:= mapx.DataSets.Add( miDataSetLayer,lyrAreaTab,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, {把各个字段信息写到图层中。}
EmptyParam, EmptyParam);
iRvCount := ds.RowCount;
rvs:=ds.RowValues[0];
rvs.Item[AREA_INDEX].Value:= iRvCount + 1;
{工地编号字段 }
rvs.Item[AREA_NAME].Value:= strInput
{ 工地名称字段}
rect := CoRectangle.Create;
rect.Set_(X1,Y1,X2,Y2);
style:= CoStyle.Create;
style.RegionPattern := miPatternDiagCross;
style.RegionBorderColor := BODERCOLOR_MAIN_REGION;
style.RegionColor := BODERCOLOR_MAIN_REGION;
style.RegionBorderWidth := BODERWIDTH_MAIN_REGION;
style.RegionTransparent :=true;
ftr:=mapx.FeatureFactory.CreateRegion(rect,style);
lyrAreaTab.AddFeature(ftr,rvs);
inc(g_iAreaCount);
GetAllAreaInfo(mapx);
gpsClient.InitGroupCarsTree();
gpsClient.InsertCarsIntoTree();
end;
// end if bFlay
end;
// end if bCreateFlag
m_TempLyrMain.DeleteFeature(ftrTemp);
{ 删除在临时图层上的Rect;}
except on e : Exceptiondo
begin
ShowMessage(e.Message);
InitData.WriteErrorToLog(ERRORMSG_MAPX_USERAREA_TOTAB + #9 + 'UserAddRectToTab()',m_strUID);
end;
end;
{$ENDIF}
end;
ok 分来。。呵呵。