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

📄 basatt.pas

📁 mapgis二次开发delphi实例Del_basAtt
💻 PAS
字号:
unit basAtt;

interface

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

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    getAttStru: TMenuItem;
    AppendWord: TMenuItem;
    UpdateWord: TMenuItem;
    DeleteWord: TMenuItem;
    N6: TMenuItem;
    GetAtt: TMenuItem;
    WriteAttRecord: TMenuItem;
    procedure getAttStruClick(Sender: TObject);
    procedure AppendWordClick(Sender: TObject);
    procedure UpdateWordClick(Sender: TObject);
    procedure DeleteWordClick(Sender: TObject);
    procedure GetAttClick(Sender: TObject);
    procedure WriteAttRecordClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//取属性结构信息(包括字段总数,每一个字段的字段名称,
//字段类型,字段字符长度,字段序号,小数位数)
procedure TForm1.getAttStruClick(Sender: TObject);
var
 pntObj:iPntArea;       //点对象
 fldNum:Integer;       //字段数
 rcdNum:Longint;          //纪录数
 fldname:String;       //字段名称
 fldtype :Integer;      //字段类型
 msk_leng:Longint;        //字段字符长度
 ptc_pos :Integer;      //字段序号
 point_leng:Integer;   //小数位数
 i:Integer;
begin   //取点属性结构信息
 pntObj :=createcomobject(class_pntarea) as iPntArea;
if pntObj.Load('','','','') then
    fldNum := pntObj.att.stru.numbfield;
    for i:= 0 to pntObj.att.stru.numbfield-1 do
      begin
        fldname := pntObj.att.stru[i].fieldname;
        fldtype := pntObj.att.stru[i].fieldtype;
        msk_leng := pntObj.att.stru[i].msk_leng;
        point_leng := pntObj.att.stru[i].point_leng;
        ptc_pos := pntObj.ATT.stru[i].ptc_pos;
     end;
     message.Label1.Caption:='完成';
     message.ShowModal;
    pntObj:=nil;
end;

//添加字段
procedure TForm1.AppendWordClick(Sender: TObject);
var
 pntObj:iPntArea;
 linObj:iLinArea;
 regObj:iRegArea;
 fldinf:iField_Head;
 mystru:iRecord_Head;
 flag:Boolean;
begin
 pntObj:=createcomobject(class_pntarea) as iPntArea;
if pntObj.Load('','','','') then
//构造需添加的字段信息
    fldinf:=createcomobject(class_field_Head) as iField_Head;
    fldinf.fieldname:='newflddouble';
    fldinf.fieldtype:= gisDOUBLE_TYPE;
    fldinf.point_leng:= 3;
    fldinf.msk_leng:= 10;
    fldinf.edit_enable:= 1;
    fldinf.ptc_pos:= -1;
//方法1 ...添加字段
    flag := pntObj.att.stru.AppendField(fldinf);
//    fldinf.fieldname = "newfldstr"
//    fldinf.fieldtype = gisSTR_TYPE
//    fldinf.msk_leng = 32
//    fldinf.edit_enable = 1
//    fldinf.ptc_pos = -1
//    flag = pntObj.Att.stru.AppendField(fldinf)
//方法2:...添加字段
//     mystru := pntObj.Att.stru.Clone;
//    flag = mystru.AppendField(fldinf)
//    flag = pntObj.Att.stru.Set(mystru)
//    Set mystru = Nothing
     message.Label1.Caption:='完成';
     message.ShowModal;
     fldinf :=nil;
     pntObj.Save('','','','');
     pntObj := nil;
end;

//修改字段 (字段名称,字段类型等等)
procedure TForm1.UpdateWordClick(Sender: TObject);
var
 pntObj:iPntArea;
 mystru:iRecord_Head;
 myfld:iField_Head;
 flag:Boolean;
begin
 pntObj :=createcomobject(class_pntarea) as iPntArea;
 if pntObj.Load('','','','') then
 mystru := pntObj.att.stru.Clone;
 myfld := mystru[0];
 myfld.fieldname:='myddd';
 myfld.fieldtype := gisDOUBLE_TYPE;
 myfld.point_leng := 3;
 myfld.msk_leng := 15;
 mystru[0] := myfld;
 flag := pntObj.ATT.stru.Set_(mystru);
 message.Label1.Caption:='完成';
 message.ShowModal;
 myfld := nil;
 mystru := nil;
 pntObj := nil;
end;

//删除字段
procedure TForm1.DeleteWordClick(Sender: TObject);
var
 pntObj:iPntArea;
 fldinf:iField_Head;
 mystru:iRecord_Head;
 flag:Boolean;
 i:Longint;
begin
 pntObj:=createcomobject(class_pntarea) as iPntArea;
if pntObj.Load('','','','')Then
    //方法1:根据字段名称删除字段
    //flag = pntObj.ATT.stru.DelField("mystr")

    //方法2: 根据字段序号删除字段
    flag := pntObj.ATT.stru.DelField(0);

{    循环删除字段
    If (pntObj.ATT.stru.numbfield >= 1) Then
        For i = pntObj.ATT.stru.numbfield - 1 To 0 Step -1
            flag = pntObj.ATT.stru.DelField2(i)
}
  message.Label1.Caption:='完成';
  message.ShowModal;
  pntObj:=nil;
end;

//取属性
procedure TForm1.GetAttClick(Sender: TObject);
var
 pntObj:iPntArea;
 i, j:Longint;
 val:oleVariant;
 att:iRecord;
 flag:Integer;
begin  //取点属性(包括取二进制字段值)
 pntObj:=createcomobject(class_pntarea) as iPntArea;
if pntObj.Load('','','','') then
  begin
    for i := 1 to pntObj.Count do
    begin
        flag := pntObj.att.Get(i, att);
        for j := 0 to pntObj.att.stru.numbfield-1 do
            val := ATT.Item[j].Value;
        att:=nil;
    end;
    message.Label1.Caption:='完成';
    message.ShowModal;
    pntObj:=nil;
  end;
end;

//写属性纪录
procedure TForm1.WriteAttRecordClick(Sender: TObject);
var
 TblAi:iTblArea;
 i : Longint;
 j:integer;
// val : Variant;
 att : iRecord;
 flag : boolean;
 byteval: array[0..9] of Byte;
// variantval(9);
 aType:Enum_Field_Type;
begin  //写点属性id值,如下写一条属性记录:
 TblAi:=createcomobject(class_tblarea) as iTblArea;
 if TblAi.Load('','','','') then
  begin  //取一条纪录
    flag := TblAi.GetDef(att);
    if not flag then
      begin
         att := nil;
         TblAi := nil;
      end;
    for i := 0 to TblAi.stru.numbfield-1 do
    begin
      aType := att.Item[i].FieldHD.fieldtype;
      case aType of
      gisBIN_DATA_TYPE :
        begin
          for j := 0 to 9 do  byteval[j] := 10 + j;  //写二进制值
        att.Value[i] := byteval[0];
        {此处还可以根据字段名来赋值,如:att.Value("ID") =byteval}
        end;
      gisBOOL_TYPE :      //布尔型
        ATT.Value[i] := True;  //或者0/1
      gisBYTE_TYPE :      //字节型
        ATT.Value[i] := 1;
      gisDATE_TYPE :      //日期型
        ATT.Value[i] := '2000-1-20';
      gisDOUBLE_TYPE :    //双精度型
        ATT.Value[i] := 10.0567;
      gisFLOAT_TYPE :     //浮点型
        ATT.Value[i] := 4.5;
      gisLONG_TYPE :      //长整型
        ATT.Value[i] := 43425345;
      gisNUMBERIC_TYPE :  //数字型
        ATT.Value[i] := 43.42;
      gisSHORT_TYPE :     //短整型
        ATT.Value[i] := 4;
      gisSTR_TYPE :       //字符串
        ATT.Value[i] := '字符串';
      gisTIME_TYPE :      //时间型
        ATT.Value[i] := '20:17:50';
      gisTIMESTAMP_TYPE : //邮戳型
        ATT.Value[i] := '2000-10-10 22:15:36';
//      gisMAP_TYPE :       //地图型

//      gisPICTURE_TYPE :   //图象型
    
//      gisSOUND_TYPE :     //声音型

//      gisTABLE_TYPE :     //表格数据

//      gisTEXT_TYPE :      //文本型

//      gisEXT_TYPE :       //扩展型

//      gisVIDEO_TYPE :     //视频图象型

//      gisUNKNOWN_TYPE :   //未知类型
//        MsgBox '未知类型!'
      end;
    end;
  end;
 //写第一条属性记录
 flag := TblAi.Write(1, att);
 message.Label1.Caption:='完成';
 message.ShowModal;
end;

end.

⌨️ 快捷键说明

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