📄 unitlayercontrol.~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 + -