📄 basobj.pas
字号:
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 + -