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

📄 unitlayercontrol.~pas

📁 此代码是关于mapgis的在
💻 ~PAS
字号:
unit UnitLayerControl;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, MapXLib_TLB, StdCtrls, ExtCtrls, CheckLst, Buttons,
  Grids, yhbGrid, YHBCheckBoxCellEditor;

type
  layerstatus=record
    layername:string;
    visibled,selected1,labeled,Parallel1,LZoom,
    lvisible,OverrideStyle,zoomLayer,ShowLineDirection,ShowNodes,
    ShowCentroids,Duplicate,LabelZoom,Overlap,Parallel,PartialSegments,Visible: boolean;
    NewStyle:mapxlib_tlb.Style;
    zoomMin,zoomMax,LabelZoomMax,LabelZoomMin:Double;
    LabelMax,Offset:integer;
    position:mapxlib_tlb.PositionConstants;
    LineType:mapxlib_tlb.LinetypeConstants;
    Style:mapxlib_tlb.Style;
  end;

  TForm_LayerControl = class(TForm)
    BitBtnOK: TBitBtn;
    YHBCheckBoxCellEditor1: TYHBCheckBoxCellEditor;
    OpenDialog1: TOpenDialog;
    BitBtn3: TBitBtn;
    Label1: TLabel;
    GridLayers: TYHBStringGrid;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    BitBtn2: TBitBtn;
    BitBtnUp: TBitBtn;
    BitBtnDown: TBitBtn;
    BitBtnRemove: TBitBtn;
    BitBtn1: TBitBtn;
    Bevel1: TBevel;
    procedure BitBtnUpClick(Sender: TObject);
    procedure BitBtnDownClick(Sender: TObject);
    procedure GridLayersClick(Sender: TObject);
    procedure GridLayersSetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: String);
    procedure BitBtnRemoveClick(Sender: TObject);
  private
    { Private declarations }
    FOperMap: TMapXObject;
    procedure Control_UpDownBtn;
    procedure GridLayers_InitRows;
    procedure GridLayers_AddLayer(ALyr:Layer; const RowIndex:Integer);
    procedure GridLayers_MoveLayer(const FromIndex, ToIndex:Integer);
    procedure GridLayers_RadioCheck(const Index:Integer);
  public
    { Public declarations }
    property OperMap:TMapXObject read FOperMap write FOperMap;
  end;

var
  Form_LayerControl: TForm_LayerControl;


function ConfigMapLayers(MapX:TMapXObject; var Changed:Boolean):Boolean;

implementation

uses
  StringOperations, BusinessDialogs, UnitProject, UnitMainForm;
  
function ConfigMapLayers(MapX:TMapXObject; var Changed:Boolean):Boolean;
begin
  with TForm_LayerControl.Create(nil) do
  begin
    try
      OperMap:=MapX;
      GridLayers_InitRows;
      Result:=ShowModal=mrOk;
    finally
      Free;
    end;
  end;
end;

{$R *.dfm}

{ TForm_LayerControl }

procedure TForm_LayerControl.GridLayers_AddLayer(ALyr: Layer; const RowIndex:Integer);
begin
  GridLayers.Cells[0, RowIndex]:=ALyr.Name;
  GridLayers.Cells[1, RowIndex]:=BoolToText(ALyr.Visible);
  GridLayers.Cells[2, RowIndex]:=BoolToText(ALyr.Editable);
  GridLayers.Cells[3, RowIndex]:=BoolToText(ALyr.Selectable);
  GridLayers.Cells[4, RowIndex]:=BoolToText(ALyr.AutoLabel);
end;

procedure TForm_LayerControl.GridLayers_InitRows;
var
  i:Integer;
begin
  GridLayers.RowCount:=FOperMap.Layers.Count;
  for i:=1 to FOperMap.Layers.Count do
    GridLayers_AddLayer(FOperMap.Layers.Item[i], i-1);
end;

procedure TForm_LayerControl.BitBtnUpClick(Sender: TObject);
var
  SelectLayerNum:Integer;
begin
  SelectLayerNum:=GridLayers.Row+1;
  if SelectLayerNum<1 then
    WarningAbort('提示', '请选择要移动的图层!');
  if (SelectLayerNum<2)or(SelectLayerNum>FOperMap.Layers.Count) then Exit;
  Form_Main.MoveLayer(SelectLayerNum, SelectLayerNum-1);
  GridLayers_MoveLayer(SelectLayerNum-1, SelectLayerNum-2);
  GridLayers.Row:=SelectLayerNum-2;
  Control_UpDownBtn;
end;

procedure TForm_LayerControl.GridLayers_MoveLayer(const FromIndex,
  ToIndex: Integer);
var
  i:Integer;
  TempStr:string;
begin
  for i:=0 to GridLayers.ColumnCount-1 do
  begin
    TempStr:=GridLayers.Cells[i, FromIndex];
    GridLayers.Cells[i, FromIndex]:=GridLayers.Cells[i, ToIndex];
    GridLayers.Cells[i, ToIndex]:=TempStr;
  end;
end;

procedure TForm_LayerControl.BitBtnDownClick(Sender: TObject);
var
  SelectLayerNum:Integer;
begin
  SelectLayerNum:=GridLayers.Row+1;
  if SelectLayerNum<1 then
    WarningAbort('提示', '请选择要移动的图层!');
  if SelectLayerNum>=FOperMap.Layers.Count then Exit;
  Form_Main.MoveLayer(SelectLayerNum+1, SelectLayerNum);
  GridLayers_MoveLayer(SelectLayerNum, SelectLayerNum-1);
  GridLayers.Row:=SelectLayerNum;
  Control_UpDownBtn;
end;

procedure TForm_LayerControl.Control_UpDownBtn;
var
  SelectLayerNum:Integer;
begin
  SelectLayerNum:=GridLayers.Row+1;
  //  0 1
  if GridLayers.RowCount<2 then
  begin
    BitBtnUp.Enabled:=False;
    BitBtnDown.Enabled:=False;
  end;
  // >= 2
  if GridLayers.RowCount>=2 then
    if SelectLayerNum=1 then
    begin
      BitBtnUp.Enabled:=False;
      BitBtnDown.Enabled:=True;
    end
    else if SelectLayerNum=GridLayers.RowCount then
    begin
      BitBtnUp.Enabled:=True;
      BitBtnDown.Enabled:=False;
    end
    else begin
      BitBtnUp.Enabled:=True;
      BitBtnDown.Enabled:=True;
    end;
end;

procedure TForm_LayerControl.GridLayersClick(Sender: TObject);
begin
  Control_UpDownBtn;
end;

procedure TForm_LayerControl.GridLayers_RadioCheck(const Index: Integer);
var
  i:Integer;
begin
  for i:=0 to GridLayers.RowCount-1 do
    if i<>Index then GridLayers.Cells[2,i]:=BoolToText(False);
end;

procedure TForm_LayerControl.GridLayersSetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: String);
var
  SelectLayerNum:Integer;
begin
  SelectLayerNum:=GridLayers.Row+1;
  case ACol of
    1:begin
      Form_Main.SetLayerVisible(SelectLayerNum, TextToBool(GridLayers.Cells[ACol, ARow]));
    end;
    2:begin
      GridLayers_RadioCheck(ARow);
      Form_Main.SetLayerEditable(SelectLayerNum, TextToBool(GridLayers.Cells[ACol, ARow]));
    end;
    3:begin
      Form_Main.SetLayerSelectable(SelectLayerNum, TextToBool(GridLayers.Cells[ACol, ARow]));
    end;
    4:begin
      Form_Main.SetLayerAutoLabel(SelectLayerNum, TextToBool(GridLayers.Cells[ACol, ARow]));
    end;
  end;
end;

procedure TForm_LayerControl.BitBtnRemoveClick(Sender: TObject);
var
  SelectLayerNum:Integer;
begin
  SelectLayerNum:=GridLayers.Row+1;
  Form_Main.RemoveuserLayer(SelectLayerNum);
end;

end.

⌨️ 快捷键说明

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