📄 unitlayerinfo.~pas
字号:
unit UnitLayerInfo;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ValEdit, ComCtrls, MapXContainer, MapXBase,
frmTableDesigner, Buttons;
type
TForm_LayerInfo = class(TForm)
Label1: TLabel;
edLayer: TEdit;
Label3: TLabel;
edTableName: TEdit;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
ListView1: TListView;
ValueListEditor1: TValueListEditor;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Label2: TLabel;
cbFeatureClass: TComboBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
SpeedButton1: TSpeedButton;
procedure FormShow(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
FIsOk: Boolean;
FTD:TForm_TableDesigner;
function GetFeatureClassId(const FCName:string):Integer;
procedure LoadFeatureClasses;
public
{ Public declarations }
procedure GetMapFields(mFields:TMapFieldList);
property IsOk:Boolean read FIsOk;
end;
var
Form_LayerInfo: TForm_LayerInfo;
function GetLayerConfig(LyrCfg:TLayerConfigInfo):Boolean;
implementation
uses BusinessDialogs, CustomTableStruct, DBTools, UnitDMLinks;
{$R *.dfm}
function GetLayerConfig(LyrCfg:TLayerConfigInfo):Boolean;
begin
with TForm_LayerInfo.Create(nil) do
begin
try
ShowModal;
Result:=IsOk;
if Result then
begin
LyrCfg.LayerName:=edLayer.Text;
LyrCfg.TableName:=edTableName.Text;
LyrCfg.IsSystem:=RadioButton2.Checked;
if LyrCfg.IsSystem then
LyrCfg.FeatureClassId:=GetFeatureClassId(cbFeatureClass.Text)
else
LyrCfg.FeatureClassId:=-1;
GetMapFields(LyrCfg.Fields);
end;
finally
Free;
end;
end;
end;
procedure TForm_LayerInfo.FormShow(Sender: TObject);
begin
FIsOk:=False;
end;
procedure TForm_LayerInfo.Button6Click(Sender: TObject);
begin
edLayer.Text:=Trim(edLayer.Text);
if edLayer.Text='' then
WarningAbort('提示', '必须填写图层名称!');
edTableName.Text:=Trim(edTableName.Text);
if edTableName.Text='' then
WarningAbort('提示', '必须填写表名称!');
if (RadioButton2.Checked)and(cbFeatureClass.ItemIndex=-1) then
WarningAbort('提示', '必须选择图形类!');
FIsOk:=True;
Close;
end;
procedure TForm_LayerInfo.Button4Click(Sender: TObject);
begin
Close;
end;
procedure TForm_LayerInfo.FormCreate(Sender: TObject);
begin
FTD:=TForm_TableDesigner.Create(Self);
FTD.Engine:=dm_Links.DBMachine1;
FTD.SetDataBase(dbtUnknown, 1);
FTD.DoAfterConnect;
FTD.Parent:=TabSheet1;
FTD.Align:=alClient;
FTD.Show;
LoadFeatureClasses;
end;
procedure TForm_LayerInfo.FormDestroy(Sender: TObject);
begin
FTD.Free;
end;
procedure TForm_LayerInfo.GetMapFields(mFields: TMapFieldList);
var
i:Integer;
MapField:TMapField;
MemField:TFieldDesignInfo;
MemFields:TFieldDesignInfoList;
begin
if FTD.GetError<>NO_ERROR then Exit;
mFields.Clear;
MemFields:=FTD.Manager.TableStruct.MemoryFieldInfos;
for i:=0 to MemFields.Count-1 do
begin
MapField:=mFields.Add;
MemField:=MemFields.Items[i];
MapField.FieldName:=MemField.fieldname;
if AnsiCompareText(MemField.typename, '字符串')=0 then
begin
MapField.FieldType:=mftString;
end
else if AnsiCompareText(MemField.typename, '整型')=0 then
begin
MapField.FieldType:=mftInteger;
end
else if AnsiCompareText(MemField.typename, '浮点型')=0 then
begin
MapField.FieldType:=mftFloat;
end
else if AnsiCompareText(MemField.typename, '布尔型')=0 then
begin
MapField.FieldType:=mftBoolean;
end
else if AnsiCompareText(MemField.typename, '日期\时间')=0 then
begin
MapField.FieldType:=mftDateTime;
end
else if AnsiCompareText(MemField.typename, '二进制')=0 then
begin
MapField.FieldType:=mftBinary;
end;
MapField.Length:=MemField.length;
MapField.Prec:=MemField.prec;
MapField.Scale:=MemField.scale;
end;
end;
procedure TForm_LayerInfo.LoadFeatureClasses;
begin
cbFeatureClass.Items.Clear;
with dm_Links.DBMachine1.CreateSingleDataSet do
begin
try
Close;
SQL.Text:='select * from t_FeatureClasses order by FCIndex';
Open;
while not Eof do
begin
cbFeatureClass.Items.Add(FieldByName('FCName').AsString);
Next;
end;
finally
Free;
end;
end;
if cbFeatureClass.Items.Count>0 then
cbFeatureClass.ItemIndex:=0;
end;
procedure TForm_LayerInfo.SpeedButton1Click(Sender: TObject);
begin
LoadFeatureClasses;
end;
function TForm_LayerInfo.GetFeatureClassId(const FCName: string): Integer;
begin
with dm_Links.DBMachine1.CreateSingleDataSet do
begin
try
Close;
SQL.Text:='select FCId from t_FeatureClasses where FCName=:FCName';
SetParamValue('FCName', FCName);
Open;
Result:=Fields[0].AsInteger;
Close;
finally
Free;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -