📄 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 + -