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

📄 unitlayerinfo.~pas

📁 此代码是关于mapgis的在
💻 ~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 + -