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

📄 basobj.~pas

📁 mapgis二次开发delphi实例Del_basAtt
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
unit basObj;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus,MAPGISBASCOM1Lib_TLB,ComObj,IdGlobal,mymessage;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    MAPGIS1: TMenuItem;
    about: TMenuItem;
    ClockAndCursor: TMenuItem;
    GetFileInfo: TMenuItem;
    DefParamOper: TMenuItem;
    CompMapParam: TMenuItem;
    EditMapParam: TMenuItem;
    NetDataSource: TMenuItem;
    SelectShow: TMenuItem;
    CalLinLenAndDot: TMenuItem;
    ReplaceParam: TMenuItem;
    N11: TMenuItem;
    SetRelateObject: TMenuItem;
    AttRelateObject: TMenuItem;
    procedure aboutClick(Sender: TObject);
    procedure ClockAndCursorClick(Sender: TObject);
    procedure GetFileInfoClick(Sender: TObject);
    procedure DefParamOperClick(Sender: TObject);
    procedure CompMapParamClick(Sender: TObject);
    procedure EditMapParamClick(Sender: TObject);
    procedure NetDataSourceClick(Sender: TObject);
    procedure CalLinLenAndDotClick(Sender: TObject);
    procedure ReplaceParamClick(Sender: TObject);
    procedure AttRelateObjectClick(Sender: TObject);
    procedure SetRelateObjectClick(Sender: TObject);
    procedure SelectShowClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  bRes:Boolean;
  nRes:smallint;
  lRes:Longint;

implementation

{$R *.dfm}

//取版本信息
procedure TForm1.aboutClick(Sender: TObject);
var
 aType:Enum_Version;
 objMapGis:iMapGis;
begin
 objMapGis :=createcomobject(class_mapgis) as iMapGis;
 aType := objMapGis.MapGisAbout('关于MAPGIS');
 //显示和关闭MAPGIS点位图
 objmapgis.ShowMapGisBmp;
 objmapgis.CloseMapGisBmp;
 objMapGis:=nil;
end;

//走钟与光标适合长时间等待时的操作
procedure TForm1.ClockAndCursorClick(Sender: TObject);
var
i,j,k:Longint;
objMapgis:imapgis;
begin
 objMapgis:=createcomobject(class_mapgis) as imapgis;
 //开始显示等待光标
 objmapgis.StartWait;
 //开始时钟光标
 objmapgis.StartClockCursor;
 for i := 1 to 100  do
    for j := 1 to 100 do
        for k := 1 to 10 do
        objmapgis.GoingClockCursor; //开始走钟
 objmapgis.EndClockCursor; //还原光标
 objmapgis.EndWait;//结束显示等待光标
end;

//取文件信息
procedure TForm1.GetFileInfoClick(Sender: TObject);
var
 fAlias:wideString;
 off0:Longint;
 LayerPad:iLayerOnOffPad;
 mpar:iMap_Para;
 frc:iD_Rect;
 ver:Enum_version;
 areaType:Enum_area_type;
 objMapgis:Imapgis;
begin
 objMapgis:=createcomobject(class_mapgis) as imapgis;
//1.取磁盘剩余空间  dsk 磁盘号:1=A,2=B... 返回磁盘空间,M为单位
 form2.Panel1.Caption:='磁盘D剩余空间为:'+intToStr(objMapgis.GetDiskSpace(4))+'MB';
 form2.ShowModal;
off0 := 0;
//2. 取文件别名
if objMapgis.GetFileAlias('D:\MAPGIS61\Sample\China.wt', fAlias, off0) then
    form2.Panel1.Caption:='文件别名为:'+fAlias;
    form2.ShowModal;
//3. 取文件分类码
form2.Panel1.Caption:='文件分类码为:'+inttostr(objMapgis.GetFileClass('D:\MAPGIS61\Sample\China.wt', off0));
form2.ShowModal;
//4. 取文件图层信息板
     //成功: 返回读取的信息长度 (以字节为单位)
     //失败: 若fname所指的文件打不开则返回 -1
nRes := objMapgis.GetFileLayerPad('China.wt', LayerPad, off0);
form2.Panel1.Caption:=inttostr(nRes);
form2.ShowModal;
//5(1). 从本地文件中取地图参数
if objMapgis.GetFileMapParam('China.wt', mpar, off0) then
    form2.Panel1.Caption:='从本地文件中取地图参数成功!';
    form2.ShowModal;
//5(2). 从网络文件中取地图参数
bRes :=objMapgis.GetFileMapParam1('China.wt', gisPNT, mpar, off0, 'MSDB', 'sa', '');
if bRes then
    form2.Panel1.Caption:='从网络文件中取地图参数成功!';
    form2.ShowModal;
//6(1). 取本地文件范围
bRes := objMapgis.GetFileRange('C:\China.wt', frc, off0);
if bRes then
form2.Panel1.Caption:='文件范围为矩形:('+floattostr(frc.xmin)+','+floattostr(frc.ymin)+ ')'+','+'('+ floattostr(frc.xmin)+ ','+floattostr(frc.ymin)+')';
form2.ShowModal;
//6(2). 取网络文件范围
bRes := objMapgis.GetFileRange1('China.wt', gisPNT, frc, off0, 'MSDB', 'sa', '');
if bRes then
form2.Panel1.Caption:='文件范围为矩形:('+floattostr(frc.xmin)+','+floattostr(frc.ymin)+')'+','+'('+floattostr(frc.xmin)+','+floattostr(frc.ymin)+')';
form2.ShowModal;
//7. 取文件版本号
ver := objMapgis.GetFileVersion('China.wt', off0);
 Case ver of
     gisVERSION_dos:
       begin
       form2.Panel1.Caption:='文件版本为dos版!';
       form2.ShowModal;
       end;
     gisVERSION4x:
       begin
       form2.Panel1.Caption:='文件版本为win16版4.0或4.1或4.2!';
       form2.ShowModal;
       end;
     gisVERSION50:
       begin
       form2.Panel1.Caption:='文件版本为win16版5.0或w32版5.32!';
       form2.ShowModal;
       end;
     gisVERSION60:
       begin
       form2.Panel1.Caption:='文件版本为新版本6.0版!';
       form2.ShowModal;
       end;
     gisVERSION70:
       begin
       form2.Panel1.Caption:='文件版本为新版本7.0版!';
       form2.ShowModal;
       end;
     gisVERSION80:
       begin
       form2.Panel1.Caption:='文件版本为新版本8.0版!';
       form2.ShowModal;
       end;
 end;

//8. 取文件类型
areaType := objMapgis.GetFileType('China.wt',off0,ver);
 Case areaType of
  gisDBS:
    begin
    form2.Panel1.Caption:='图库工作区!';
    form2.ShowModal;
    end;
  gisGRID:
    begin
    form2.Panel1.Caption:='栅格工作区!';
    form2.ShowModal;
    end;
  gisGROUP:
    begin
    form2.Panel1.Caption:='组工作区!';
    form2.ShowModal;
    end;
  gisLIN:
    begin
    form2.Panel1.Caption:='线工作区!';
    form2.ShowModal;
    end;
  gisMSIIMG:
    begin
    form2.Panel1.Caption:='图像工作区!';
    form2.ShowModal;
    end;
  gisNET:
    begin
    form2.Panel1.Caption:='网工作区!';
    form2.ShowModal;
    end;
  gisPNT:
    begin
    form2.Panel1.Caption:='点工作区!';
    form2.ShowModal;
    end;
  gisPRJ:
    begin
    form2.Panel1.Caption:='工程工作区!';
    form2.ShowModal;
    end;
  gisREG:
    begin
    form2.Panel1.Caption:='区工作区!';
    form2.ShowModal;
    end;
  gisTBL:
    begin
    form2.Panel1.Caption:='表工作区!';
    form2.ShowModal;
    end;
  gisTIN:
    begin
    form2.Panel1.Caption:='三角网工作区!';
    form2.ShowModal;
    end;
  else
    begin
    form2.Panel1.Caption:='未知类型!';
    form2.ShowModal;
    end;
 end;

 frc:=nil;
 mpar:=nil;
 LayerPad:=nil;
 objMapgis:=nil;
end;

//缺省参数操作
procedure TForm1.DefParamOperClick(Sender: TObject);
var
 LinInfo :iLin_Info;
 objMapgis:iMapgis;
begin
 objMapgis:=createcomobject(class_mapgis) as imapgis;
//修改缺省的线实体图形信息参数
If objMapgis.ModLinDefParam then
  form2.Panel1.Caption:='修改线参数成功!';
  form2.ShowModal;
//修改缺省的网实体图形信息参数
//ModNetDefParam
//修改缺省的点实体图形信息参数
//ModPntDefParam
//修改缺省的区实体图形信息参数
//ModRegDefParam

//取缺省的线实体图形信息参数
 LinInfo:=objMapgis.GetLinDefParam;
if  LinInfo<>nil then
 form2.Panel1.Caption:='取缺省线参数成功!';
 form2.ShowModal;

 {取缺省的网实体图形信息参数
  NetInfo := objMapgis.GetNetDefParam;
 取缺省的点实体图形信息参数
  PntInfo := objMapgis.GetPntDefParam;
 取缺省的区实体图形信息参数
  RegInfo := objMapgis.GetRegDefParam; }

LinInfo.lclr := 10;
//...省略其他属性的赋值
//设缺省的线实体图形信息参数
if objMapgis.SetLinDefParam(LinInfo) then
form2.Panel1.Caption:='设置线参数成功!';
form2.ShowModal;

//......省略其他实体参数的设置

LinInfo:=nil;
objMapgis:=nil;
end;

//比较图形参数
procedure TForm1.CompMapParamClick(Sender: TObject);
var
 PntAi:iPntArea;
 inf0:iPnt_Info;
 inf1 :iPnt_Info;
 pad :iPnt_Pad;
 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);

If PntAi.GetExistFlag(2)=1 then
  PntAi.GetInfo(2, inf1);

pad :=createcomobject(class_pnt_pad) as ipnt_pad;
with pad do
begin
iclr:=gisON;
infoDx:=gisON;
infoDy:=gisON;
layer:=gisON;
linNo:=gisON;
ovprnt:=gisON;
rect:=gisON;
res0:=gisON;
res1:=gisON;
Sub.angle:=gisON;
Sub.fclr:=gisON;
Sub.Height:=gisON;
Sub.penw:=gisON;
Sub.subno:=gisON;
Sub.Width:=gisON;
Type_:=gisON;
end;

//根据pad条件比较点图形参数inf0和inf1是否相同
//完全相同返回1,否则返回0
//方法一
if objMapgis.CompPntParam(pad,inf0,inf1) then
   begin
   form2.Panel1.Caption:='图形参数inf0和inf1相同!';
   form2.ShowModal;
   end
    else
    begin
    form2.Panel1.Caption:='图形参数inf0和inf1不相同!';
    form2.ShowModal;
    end;

//方法二
if objMapgis.PntTypeParamSame(pad, inf0, inf1) then
    begin
    form2.Panel1.Caption:='图形参数inf和pinf相同!';
    form2.ShowModal;
    end
    else
    begin
    form2.Panel1.Caption:='图形参数inf和pinf不相同!';
    form2.ShowModal;
    end;

//根据pad条件比较其他图形参数inf0和inf1是否相同
//可以参照上面的方法一
 pad:=nil;
 inf0:=nil;
 inf1:=nil;
 PntAi:=nil;
 objMapgis:=nil;
end;

//编辑图形参数
procedure TForm1.EditMapParamClick(Sender: TObject);
var
 PntInfo:iPnt_Info;
 enableSelType :Integer;
 PntPad :iPnt_Pad;
 objMapgis:iMapgis;
//enableSelType表示是否允许选择点类型,0=不可选,1=可选.
//0=失败, IDOK=成功, IDCANCEL=取消
begin
enableSelType:=1;
objMapgis:=createcomobject(class_mapgis) as imapgis;
//这里一定要先初始化一个实例
 PntInfo:=createcomobject(class_pnt_info) as ipnt_info;
 nRes:=objMapgis.EditPntParam(PntInfo, '编辑点图形参数', enableSelType);

 PntPad:=createcomobject(class_Pnt_Pad) as ipnt_pad;
//编辑点图形参数及开关板
 nRes:=objMapgis.EditPntParamPad(PntInfo, PntPad, '编辑点图形参数及开关板', enableSelType);

//编辑点,线,区,网图形参数及开关板的方法是相似的,故省略

 PntInfo:=nil;
 PntPad:=nil;
 objMapgis:=nil;
end;

//网络数据源操作
procedure TForm1.NetDataSourceClick(Sender: TObject);
var
 dsn:wideString;
 log:wideString;
 psw:wideString;
 objMapgis:iMapgis;
 i:integer;
 bRes:boolean;
begin
objMapgis:=createcomobject(class_mapgis) as imapgis;
//1. 取MAPGIS数据源类型
if objMapgis.dbGetGisDSType=gisNET_GIS then
    begin
    form2.panel1.caption:='MAPGIS数据源类型为网络数据源';
    form2.ShowModal;
    end
else
    begin
    if objMapgis.dbGetGisDSType = gisPC_GIS then
     begin
     form2.Panel1.Caption:='MAPGIS数据源类型为机器数据源';
     form2.ShowModal;
     Exit;
     end;
    end;

//2. 取MAPGIS缺省的网络数据源名称
bRes:=objMapgis.dbGetGisDSName(1,dsn);
if bRes then
    begin
    form2.Panel1.Caption:='省的网络数据源名称为:'+dsn;
    form2.ShowModal;
    end;

//3. 保证MAPGIS网络数据源个数有两个
if objMapgis.dbGetGisDSNumb <= 1 then
    exit;

//4. 取第一个MAPGIS数据源名称
if objMapgis.dbGetFirstGisDSName(dsn) then
    begin
    form2.Panel1.Caption:='一个网络数据源名称为:'+dsn;
    form2.ShowModal;
    end;

//5. 取下一个MAPGIS数据源名称
if objMapgis.dbGetNextGisDSName(dsn) then
    begin
    form2.Panel1.Caption:='下一个网络数据源名称为:'+dsn;
    form2.ShowModal;
    end;

//6. 取第1项MAPGIS网络数据源名称
if objMapgis.dbGetGisDSName(0, dsn) then
    begin
    form2.Panel1.Caption:='第一个网络数据源名称为:'+dsn;
    form2.ShowModal;
    end;

//7. 取第一项数据源的登录号和登录口令
if objMapgis.dbGetLogPsw(dsn,log,psw) then
    begin
    form2.Panel1.Caption:='登录号:'+log+'登录口令:'+psw;
    form2.ShowModal;
    end;

//8. 设置第一项数据源的登录号及口令
if objMapgis.dbSetLogPsw(dsn, 'sa', '') then
    begin
    form2.Panel1.Caption:='设置成功!';
    form2.ShowModal;
    end;

//9. 输入第一项数据源的登录号及口令
if objMapgis.dbInputLogPsw(dsn, log, psw) then
    begin
    form2.Panel1.Caption:='输入成功!';
    form2.ShowModal;
    end;

//10. 测试数据源
if objMapgis.dbInputLogPsw(dsn, log, psw) then
    begin
    form2.Panel1.Caption:='测试成功!';
    form2.ShowModal;
    end;
end;

//计算线段长度交点
procedure TForm1.CalLinLenAndDotClick(Sender: TObject);
var
 la0: iD_Dot; //直线1
 la1: iD_Dot;
 lb0: iD_Dot; //直线2
 lb1: iD_Dot;
 xy :iD_Dot;       //交点
 length:Double; //长度
 DotSet:iD_DotSet;
 bRes:boolean;
 objMapgis:iMapgis;
begin
//计算两直线段的交点
 objMapgis:=createcomobject(class_mapgis) as imapgis;
 la0:=createcomobject(class_D_Dot) as id_dot; //创建实例直线1
 la1:=createcomobject(class_D_Dot) as iD_Dot;
 lb0:=createcomobject(class_D_Dot) as iD_Dot; //创建实例直线2
 lb1:=createcomobject(class_D_Dot) as iD_Dot;
 xy :=createcomobject(class_D_Dot) as iD_Dot;
la0.x := 50;
la0.y := 100;
la1.x := 150;
la1.y := 100;
lb0.x := 100;
lb0.y := 50;
lb1.x := 100;
lb1.y := 150;

//计算交点
bRes:=objMapgis.CalCrossDot(la0, la1, lb0, lb1, xy);
if bRes then
form2.Panel1.Caption:='交点坐标为:('+ floattostr(xy.x)+','+ floattostr(xy.y)+ ')';
form2.ShowModal;
//计算线段长度 (方法一)
length:=objMapgis.SegmentLength(la0, la1);
form2.Panel1.Caption:='线段长度为:'+floattostr(length);
form2.ShowModal;
//计算线段长度 (方法二)
length:=objMapgis.SegmentLength1(100, 50, 100, 150);
form2.Panel1.Caption:='线段长度为:'+floattostr(length);
form2.ShowModal;
//计算线段长度 (方法三)
DotSet:=createcomobject(class_d_dotset) as iD_DotSet;
DotSet.Append2(la0);
DotSet.Append2(la1);
length:=objMapgis.CalculateLength(DotSet);
form2.Panel1.Caption:='线段长度为:'+floattostr(length);
form2.ShowModal;
 xy:=nil;
 la0:=nil;
 la1:=nil;
 lb0:=nil;

⌨️ 快捷键说明

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