⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basobj.pas

📁 mapgis二次开发delphi实例Del_basAtt
💻 PAS
📖 第 1 页 / 共 2 页
字号:
 lb1:=nil;
 DotSet:=nil;
 objmapgis:=nil;
end;

//替换参数
procedure TForm1.ReplaceParamClick(Sender: TObject);
var
 PntAi:iPntArea;
 inf0 :iPnt_Info;
 inf1 :iPnt_Info;
 pad0:iPnt_Pad;
 pad1:iPnt_Pad;
 pntType:smallint;
 objmapgis:imapgis;
begin
 objMapgis:=createcomobject(class_mapgis) as imapgis;
//根据pad条件比较图形参数inf0和inf1是否相同
//比较点参数
 PntAi:=createcomobject(class_PntArea) as ipntarea;

if not PntAi.Load('','','','') then
 begin
 PntAi:=nil;
 Exit;
 end;

//修改点实体1和点实体2的点信息
if PntAi.GetExistFlag(1)=1 then
  PntAi.GetInfo(1, inf0)
 else
  Exit;

if PntAi.GetExistFlag(2)=1 then
 PntAi.GetInfo(2, inf1)
 else
 Exit;

 pad0:=createcomobject(class_Pnt_Pad) as ipnt_pad;
 pad1:=createcomobject(class_Pnt_Pad) as ipnt_pad;
 pad1.infoDx:= gisON;
 pad1.infoDy:= gisON;
 pad1.iclr := gisON;
 pad1.layer:= gisON;
 pad1.linNo:= gisON;
 pad1.ovprnt:= gisON;
 pad1.rect:= gisON;
 pad1.res0:= gisON;
 pad1.res1:= gisON;
 pad1.sub.angle:=gisON;
 pad1.Sub.fclr:=gisON;
 pad1.Sub.Height:=gisON;
 pad1.Sub.penw:=gisON;
 pad1.Sub.subno:=gisON;
 pad1.Sub.Width:=gisON;
 pad1.type_:=gisON;

//修改点参数替换条件和替换结果
//pntType制定要修改的点参数类型.若pntType非法
//则ReplacePntParam弹出点类型选择窗口
 nRes:=objMapgis.ReplacePntParam(inf0,pad0,inf1,pad1,pntType);
 if nRes<>0 then
 begin
  form2.Panel1.Caption:='修改成功!';
  form2.ShowModal;
 end;

//修改其他实体参数替换条件和替换结果的方法与上相似

 pad0:=nil;
 pad1:=nil;
 inf0:=nil;
 inf1:=nil;
 PntAi:=nil;
 objmapgis:=nil;
end;

//关于扩展属性结构,属性结构,属性,记录等的使用
procedure TForm1.AttRelateObjectClick(Sender: TObject);
var
 val:OleVariant;
 objFieldExtHead:iField_ExtHead;//Field_ExtHead的使用
 objFieldHead1:ifield_head;
 objFieldHead2:ifield_head;
 objRecordHead:iRecord_Head;
 objRecordHead1:iRecord_Head;
 objField:ifield;
 objField1:ifield;
 objRecord:irecord;
 objRecord1:irecord;
 objRecordSet:irecordset;
 bResult:Boolean;
 nResult:Integer;
 ttlStr:wideString;
 buf:array of Byte;
 nCount:Integer;
begin
//创建一个Field_ExtHead实例
 objFieldExtHead :=createcomobject(class_field_exthead) as iField_ExtHead;
//使用时一定要先初始化扩展字段
bResult:=objFieldExtHead.Init(gisDATE_TYPE, 2);
if not bResult then
    form2.Panel1.Caption:= '初始化扩展字段失败!';
    Exit;

//设置字段别名
objFieldExtHead.alias:='字段为日期类型';
//允许为空
objFieldExtHead.IsNull:=True;
//设置字段形态,可为编辑框/组合框/复选框/按扭
objFieldExtHead.Shape := gisFLD_SHP_COMBO;

//数值型,日期,时间,邮戳类型可有缺省值和最大最小值
//设置缺省值
objFieldExtHead.SetDefVal ('1-1-1990');
//设置最大值
objFieldExtHead.SetMaxVal ('12-12-1999');
//设置最小值
objFieldExtHead.SetMinVal ('12-30-1990');
//设置字段形态信息,此处省略返回值处理
bResult := objFieldExtHead.SetShapeInfo(0, '字段形态0', '3-4-1977');
bResult := objFieldExtHead.SetShapeInfo(1, '字段形态1', '4-5-1987');

//是否有缺省值
if objFieldExtHead.HasDefVal then
    //取缺省值
    objFieldExtHead.GetDefVal(val);
    //打印显示值
    form2.Panel1.Caption:='val='+val;

//是否有最大值
if objFieldExtHead.HasMaxVal then
    //取最大值
    objFieldExtHead.GetMaxVal(val);
    form2.Panel1.Caption:='val='+val;

//是否有最小值
if objFieldExtHead.HasMinVal then
    //取最小值
    objFieldExtHead.GetMinVal (val);
    form2.Panel1.Caption:='val='+val;

//取字段类型,显示
form2.Panel1.Caption:=inttostr(objFieldExtHead.GetFieldType);

//显示字段形态信息
 for nResult:=1 to objFieldExtHead.GetShapeInfoNum do
 begin
 //取字段形态信息
  bResult := objFieldExtHead.GetShapeInfo(nResult-1, ttlStr, val);
  if bResult then
  form2.Panel1.Caption:='ttlStr+" "'+val
  else
   Exit;
 end;

//Field_Head的使用
//创建Field_Head对象实例
 objFieldHead1:=createcomobject(class_Field_Head) as ifield_head;
 objFieldHead2:=createcomobject(class_Field_Head) as ifield_head;


with objFieldHead1 do
begin
//编辑使能标志(0/1/2=不能/能/禁止)
edit_enable := 1;
//字段名称
fieldname := '字段1';
//字段类型
fieldtype := gisDOUBLE_TYPE;
//字段字符长度
msk_leng := 8;
//小数位数
point_leng := 4;
//字段序号,依次为0,1,2...
ptc_pos := 0;
end;

With objFieldHead2 do
begin
edit_enable := 1;
fieldname := '字段2';
fieldtype := gisSTR_TYPE;
msk_leng := 16;
point_leng := 0;
ptc_pos := 1;
end;

//判断是否相等
if objFieldHead1.IsEqual(objFieldHead2) then
    form2.Panel1.Caption:='对象实例相等';
    form2.ShowModal;
 objFieldHead2:=nil;
//克隆出一个新的Field_Head
 objFieldHead2:=objFieldHead1.Clone;
//计算FIELD_HEAD对象所占的字节数
val:=objFieldHead1.CalSize;
// 保存CFiedl_Head到buf中
setLength(buf,255);
objFieldHead1.Save(buf[0],val);
//从buf中装入IField_Head

//判断是否有扩展属性
if not objFieldHead1.HasField_ExtHead then
//设置扩展属性
    if objFieldHead1.SetField_ExtHead(objFieldExtHead) then
        objFieldExtHead:=nil;
        //取字段扩展属性
        objFieldExtHead := objFieldHead1.GetField_ExtHead;
//删除扩展字段
if objFieldHead1.DelField_ExtHead then
    form2.Panel1.Caption:='扩展字段已删除';
    form2.ShowModal;

//从buf中装入IField_Head
//if objFieldHead1.Load(buf, Val) then
//form2.Panel1.Caption:='原Field_Head对象内容已装入;
//form2.ShowModal;

//复制,ptIFld0=NULL则清除
 objFieldHead2:=nil;
 objFieldHead2:=objFieldHead1.Clone;

//Record_Head的使用
 objRecordHead:=createcomobject(class_Record_Head) as irecord_head;
 objRecordHead1:=createcomobject(class_Record_Head) as irecord_head;
//分配空字段,此处为2个
objRecordHead.AllocEmptyField(2);

with objFieldHead1 do
begin
//编辑使能标志(0/1/2=不能/能/禁止)
edit_enable := 1;
//字段名称
fieldname := '字段1';
//字段类型
fieldtype := gisDOUBLE_TYPE;
//字段字符长度
msk_leng := 8;
//小数位数
point_leng := 4;
//字段序号,依次为0,1,2...
ptc_pos := 0;
end;

//添加字段,省略返回值
objRecordHead.AppendField(objFieldHead1);

With objFieldHead2 do
begin
edit_enable:=1;
fieldname:='字段2';
fieldtype := gisSTR_TYPE;
msk_leng := 32;
point_leng := 0;
ptc_pos := 1;
end;

bResult := objRecordHead.InsertField(objFieldHead2, 0);
if not bResult then
    form2.Panel1.Caption:='插入失败';
    form2.ShowModal;

//克隆一个新的Record_Head
 objRecordHead1 := objRecordHead.Clone;
//比较相同
if objRecordHead.IsEqual(objRecordHead1) then
    form2.Panel1.Caption:='属性结构完全相同';
    form2.ShowModal;

//依次打印属性结构中的各字段名
for nCount := 0 to objRecordHead.numbfield - 1 do
    form2.Panel1.Caption:=objRecordHead.fldEntry[nCount].fieldname;


//计算Record_Head对象占用存储空间大小
form2.Panel1.Caption:='Record_Head1对象占用存储空间大小为:' + inttostr(objRecordHead.CalSize);

//保存Record_Head到buf中
setlength(buf,255);
lRes := objRecordHead.Save(buf[0], 256);
//从buf中装入Record_Head
objRecordHead.Load ( buf[0], lRes);

//删除字段(方法一)
objRecordHead.DelField( '字段2');
//删除字段(方法二)
objRecordHead.DelField(2);

//复制,pIStru0=NULL则清除所有字段头
objRecordHead:=objRecordHead1.Clone;

//Field的使用
 objField:=createcomobject(class_Field) as ifield;
 objField1:=createcomobject(class_Field) as ifield;

//设置字段描述头
objField.FieldHD := objFieldHead1;
//字段值,需要同字段描述头的类型相同
objField.Value := -342.12;
//字段值的真实字节长度
form2.Panel1.Caption:=inttostr(objField.ActualSize);
form2.ShowModal;
//设置字段描述头
objField1.FieldHD := objFieldHead2;
//字段值,需要同字段描述头的类型相同
objField1.Value := '这是字段值';
//字段值的真实字节长度

//Record的使用
 objRecord:=createcomobject(class_record_) as irecord;
 objRecord1:=createcomobject(class_record_) as irecord;

//设置属性结构
objRecord.hd:= objRecordHead;
//添加字段,省略返回值
objRecord.Append(objField);
//在index位置插入一个字段,省略返回值
objRecord.Insert( 0, objField1);

//分别取记录里的字段名,字段值,并显示
for nCount := 0 to objRecord.count - 1 do
    form2.Panel1.Caption:=objRecord.Item[nCount].FieldHD.fieldname +''+objRecord.Value[nCount];

//复制记录
objRecord1:=objRecord;

//删除记录中的字段,省略返回值
objRecord1.Remove(1);

//RecordSet的使用
  objRecordSet:=createcomobject(class_Recordset) as irecordset;

//添加一条记录,此处只有两个字段
objRecordSet.Append(objRecord);
//以下再添加两条记录
objRecord.Value[0] := 235.3;
objRecord.Value[1] := '第二记录对应值';
objRecordSet.Append (objRecord);

objRecord.Value[0] := 235.3;
objRecord.Value[1] := '第三记录对应值';
objRecordSet.Append (objRecord);

//书签,相当于RecordSet中记录的序号,第1条记录从1开始
//设置当前位置为第一条记录
objRecordSet.Bookmark := 1;

//更新第一条记录
objRecord.Value[0] := 567.12;
objRecord.Value[1] := '更新为第一记录对应值';
objRecordSet.Update (objRecord);

//将当前指针移到最后一条记录
objRecordSet.MoveLast;

//当前记录位置是否在RecordSet中的第一条记录之前
while not objRecordSet.BOF  do
begin
//将当前指针前移一条记录,省略返回值
objRecordSet.MovePrevious;

//以下依次在“立即”窗口中显示各条记录值
//将当前指针移到第一条记录,省略返回值
objRecordSet.MoveFirst;
for nCount := 0 to objRecordSet.numbfield - 1 do
form2.Panel1.Caption:=objRecordSet.hd[nCount].fieldname +'------'+ objRecordSet.Record_.Value[nCount];
//将当前指针后移一条记录
    if not objRecordSet.MoveNext then
    Exit;

//直到当前记录位置在RecordSet中的最后一条记录之后
  if objRecordSet.EOF then
  break;
end;

//从start指定的位置开始移numRecords条记录
if objRecordSet.Move(1, gisBookmarkFirst) then
  objRecordSet.Remove; //删除当前位置记录

//释放对象实例
 objField:=nil;
 objField1:=nil;
 objRecord:=nil;
 objRecord1:=nil;
 objRecordSet:=nil;
 objFieldHead1:=nil;
 objFieldHead2:=nil;
 objRecordHead:=nil;
 objRecordHead1:=nil;
 objFieldExtHead:=nil;
end;

//集合相关对象
procedure TForm1.SetRelateObjectClick(Sender: TObject);
var
//D_DotSet对象的使用
 bResult:Boolean;
 lCount:Longint;
 objDDotSet:iD_DotSet;
 objDDot:iD_Dot;
 objDDotSet1:iD_DotSet;
begin
//On Error Resume Next;
//创建一个D_DotSet对象实例
 objDDotSet:=createcomobject(class_D_DotSet) as id_dotset;
//添加一个D_Dot点(方法一)
objDDotSet.Append( 21.34, 98.12);
//创建一个D_Dot对象实例
objDDot:=createcomobject(class_D_Dot) as id_dot;
objDDot.x := 23.43;
objDDot.y := 2.38;
//添加一个D_Dot点(方法二)
objDDotSet.Append2(objDDot);

//在第index项之前插入一个D_Dot点(方法一)
objDDotSet.Insert (1, 0.32, 98.44);
objDDot.x := 89.234;
objDDot.y := -231.34;
//在第index项之前插入一个D_Dot点(方法二)
objDDotSet.Insert2( 1, objDDot);

//另外创建一个D_DotSet对象实例
 objDDotSet1:=createcomobject(class_D_DotSet) as id_dotset;

//替换(复制)对象
objDDotSet1:=objDDotSet;
bResult := objDDotSet1=objDDotSet;
if not bResult then
    begin
    form2.Panel1.Caption:='复制失败!';
    form2.ShowModal;
    end
  else
    begin
    form2.Panel1.Caption:='复制成功!';
    form2.ShowModal;
    end;
//更新第index项数据(方法一)
objDDotSet.Update (2, -232, 9.324);
//更新第index项数据(方法二)
objDDot.x := 78.2;
objDDot.y := 70.34;
objDDotSet.Update2 (2, objDDot);

//遍历整个集合打印各数据
for lCount := 0 to objDDotSet.Count - 1 do
    form2.Panel1.Caption:=floattostr(objDDotSet.Item[lCount].x)+''+floattostr(objDDotSet.Item[lCount].y);

//删除从第index项开始的nCount个D_Dot点
objDDotSet.Remove( 2, 2) ;
//删除所有D_Dot点
objDDotSet.RemoveAll;

//释放对象实例
 objDDot:=nil;
 objDDotSet:=nil;
 objDDotSet1:=nil;
end;
{其它类似的如:L_DotSet,D_3DotSet,L_3DotSet,D_RectSet
 Tic_DotSet,RadSet,GeoLin3DSet,GeoLinSet,GeoNetSet
 GeoPathSet,GeoPntSet,GeoRegSet,LinSet,Lin3DSet
 LONGList,Net,NetSet,PathSet,PntSet,Reg,RegSet
 RepFldFlag等对象的方法,属性的使用可参照上述例子。}

//公共对话框函数
procedure TForm1.SelectShowClick(Sender: TObject);
var
 szPath:wideString;
 colNo:Longint;
 ztNo:smallint;
 patno:smallint;
 subno:Longint;
 ltp:smallint;
 fltp:smallint;
 objMapGis:iMapGis;
begin
 objMapGis :=createcomobject(class_MapGis) as iMapgis;
//注意:这里不要objMapGis对象也可,因为MapGis
//下的方法就是全局的方法
//选择目录
bRes := objMapGis.SelDirectory(szPath, '选择路径');
if bRes then
 begin
 form2.Panel1.Caption:='选择的路径为:'+szPath;
 form2.ShowModal;
 end;

//公共对话框函数
//返回值:0=失败, IDOK=成功, IDCANCEL=取消

//选择颜色
nRes := objMapgis.SelectColor(colNo);
if nRes<>0 then
 begin
 form2.Panel1.Caption:='你选择的颜色号为:'+ inttostr(colNo);
 form2.ShowModal;
 end;

//选择字体
nRes := objMapgis.SelectFontType(ztNo);
if nRes<>0 then
 begin
 form2.Panel1.Caption:='选择的字体号为:'+inttostr(ztNo);
 form2.ShowModal;
 end;

//选择线型
nRes :=objMapgis.SelectLineType(ltp, fltp);
if nRes<>0 then
 begin
 form2.Panel1.Caption:='选择的字体号为:'+inttostr(ztNo);
 form2.ShowModal;
 end;

//选择填充图案
nRes :=objMapgis.SelectPattern(patno);
if nRes<>0 then
 begin
 form2.Panel1.Caption:='选择的填充图案号为:'+inttostr(ztNo);
 form2.ShowModal;
 end;

//选择子图
nRes := objMapgis.SelectSubGraph(subno);
if nRes<>0 then
 begin
 form2.Panel1.Caption:='选择的子图号为:'+inttostr(ztNo);
 form2.ShowModal;
 end;

objMapGis:=nil;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -