?? unitmainform.~pas
字號:
if GetImageFormatConfig(MyGIS.GMapTools.MapX, @cfgStruct) then
begin
try
MyGIS.GMapTools.m_Map.SaveMapAsImage(cfgStruct);
except
MyWarning('可能保存的圖象的長、寬過大!');
end;
end;
end;
procedure TForm_Main.tvLayersKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
//處理空格鍵
if tvLayers.Selected<>nil then
SetTreeNodeCheckState_OnKeyDown(tvLayers, Key, DoOnNodeStateChanged);
end;
procedure TForm_Main.tvLayersMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
SelectTreeNode(tvLayers, Classes.Point(X, Y));
if ssLeft in Shift then
SetTreeNodeCheckState_OnMouseDown(tvLayers, X, Y, DoOnNodeStateChanged);
end;
procedure TForm_Main.DoOnNodeStateChanged(Sender: TObject; aNode: TTreeNode);
procedure SetLayerVisible(const LayerName:string; const Visible:Boolean);
begin
MyGIS.GMapTools.MapX.Layers.Item[LayerName].Visible:=Visible;
end;
var
// i:Integer;
aLayerInfo:TLayerTreeNodeRecord;
begin
if aNode.Data=nil then Exit;
aLayerInfo:=aNode.Data;
case aLayerInfo.NodeType of
{ LTN_FEATURECLASS:begin
for i:=0 to aNode.Count-1 do
begin
aLayerInfo:=aNode.Item[i].Data;
SetLayerVisible(aLayerInfo^.Name, aNode.Item[i].StateIndex=TREENODESTATE_SUBCHECKEDALL);
end;
end; }
LTN_LAYER:begin
aLayerInfo:=aNode.Data;
SetLayerVisible(aLayerInfo.Name, aNode.StateIndex=TREENODESTATE_SUBCHECKEDALL);
end;
end;
end;
procedure TForm_Main.tvLayersContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
var
TargetNode: TTreeNode;
aLyr:Layer;
begin
tvLayers.PopupMenu:=nil;
TargetNode := tvLayers.GetNodeAt(MousePos.X,MousePos.Y);
if TargetNode<>nil then
begin
if TargetNode.Level=0 then
tvLayers.PopupMenu:=pmAllLayers
else if TLayerTreeNodeRecord(TargetNode.Data).NodeType=LTN_FEATURECLASS then
tvLayers.PopupMenu:=pmFeatureClass
else begin
aLyr:=MyGIS.GMapTools.m_Layers.FindByName(TLayerTreeNodeRecord(TargetNode.Data).Name);
if aLyr.Editable then
PNEditable.Caption:='只讀模式'
else
PNEditable.Caption:='編輯模式';
tvLayers.PopupMenu:=pmLayer;
end;
Handled:=False;
end;
end;
procedure TForm_Main.InitEyeForm;
begin
//鷹眼窗口初始化//
FrmEagleEye.OperMap:=MyGIS.GMapTools.MapX;
FrmEagleEye.GeoFileName:=AppPath+'Maps\鷹眼.GST';
FrmEagleEye.InitLayers(True);
end;
procedure TForm_Main.tvLayersChange(Sender: TObject; Node: TTreeNode);
var
aLayerInfo:TLayerTreeNodeRecord;
ALyr:Layer;
begin
if Node.Data=nil then Exit;
aLayerInfo:=Node.Data;
if aLayerInfo.NodeType=LTN_LAYER then
begin
if aLayerInfo.IsSystem then
NAddToProject.Caption:='下載圖層到本地'
else
NAddToProject.Caption:='加入圖層到工程';
PNAddToProject.Caption:=NAddToProject.Caption;
ALyr:=MyGIS.GMapTools.MapX.Layers.Item[aLayerInfo.Name];
if ALyr.Editable then
begin
EditLayer:=ALyr;
MyGIS.GMapTools.MapX.Layers.InsertionLayer:=ALyr;
end;
end;
end;
procedure TForm_Main.NNewLayerClick(Sender: TObject);
var
aLyr:Layer;
LyrCfg:TLayerConfigInfo;
begin
AppPath:=CheckPath(AppPath);
LyrCfg:=TLayerConfigInfo.Create;
try
if GetLayerConfig(LyrCfg) then
begin
if LyrCfg.Fields.ItemCount=0 then
begin
MyDefInformation('新圖層至少應該有一個字段!');
Exit;
end;
aLyr:=MyGIS.GMapTools.m_Layers.CreateCustomTableLayer(LyrCfg.LayerName,
AppPath+'Maps\', LyrCfg.Fields, 1, True);
AddLayerNode(SysTree, SysTreeRoot, naAddChildFirst,
-1, aLyr.Name, AppPath+'Maps\'+LyrCfg.LayerName+'.TAB',
False, 2, -1, 3);
if Frame_Search1<>nil then
Frame_Search1.LoadLayers;
end;
finally
LyrCfg.Free;
end;
end;
procedure TForm_Main.RemoveUserLayers;
var
i:Integer;
aNode:TTreeNode;
aLayerInfo:TLayerTreeNodeRecord;
aLyr:Layer;
begin
if SysTreeRoot.Count>0 then
begin
for i:=SysTreeRoot.Count-1 downto 0 do
begin
aNode:=SysTreeRoot.Item[i];
aLayerInfo:=aNode.Data;
if not aLayerInfo.IsSystem then
begin
aLyr:=MyGIS.GMapTools.m_Layers.FindByName(aLayerInfo.Name);
if aLyr=EditLayer then EditLayer:=nil;
MyGIS.GMapTools.m_Layers.RemoveByName(aLayerInfo.Name);
DeleteNode(aNode);
end;
end;
FrmEagleEye.InitLayers(True);
end;
end;
procedure TForm_Main.NRemoveLayerClick(Sender: TObject);
var
aLayerInfo:TLayerTreeNodeRecord;
aLyr:Layer;
begin
if (tvLayers.Selected=nil)or(tvLayers.Selected.Data=nil) then
begin
MyDefInformation('請選擇要移出的用戶圖層!');
Exit;
end;
aLayerInfo:=tvLayers.Selected.Data;
if (aLayerInfo.NodeType<>LTN_LAYER)or(aLayerInfo.IsSystem) then
begin
MyDefInformation('只有用戶圖層可以被移出!');
Exit;
end;
aLyr:=MyGIS.GMapTools.m_Layers.FindByName(aLayerInfo.Name);
if aLyr=EditLayer then EditLayer:=nil;
MyGIS.GMapTools.m_Layers.RemoveByName(aLayerInfo.Name);
aLayerInfo.Free;
tvLayers.Selected.Delete;
FrmEagleEye.InitLayers(True);
if Frame_Search1<>nil then
Frame_Search1.LoadLayers;
end;
procedure TForm_Main.NLayerOptionsClick(Sender: TObject);
var
Changed:Boolean;
begin
ConfigMapLayers(MyGIS.GMapTools.MapX, Changed);
end;
procedure TForm_Main.MoveLayer(const FromIndex, ToIndex: Integer);
begin
UnitShellAPIs.MoveLayer(MyGIS.GMapTools.MapX, FromIndex, ToIndex);
end;
procedure TForm_Main.SetLayerAutoLabel(const Index: Integer;
const AutoLabel: Boolean);
begin
UnitShellAPIs.SetLayerAutoLabel(MyGIS.GMapTools.MapX, SysTreeRoot, Index, AutoLabel);
end;
procedure TForm_Main.SetLayerEditable(const Index: Integer;
const Editable: Boolean);
var
aLyr:Layer;
begin
UnitShellAPIs.SetLayerEditable(MyGIS.GMapTools.MapX, Index, Editable);
aLyr:=MyGIS.GMapTools.MapX.Layers.Item[Index];
if not aLyr.Editable then
SBar.Panels[3].Text:='無';
begin
//觸發選擇集合變化//
if Frame_DrawShape1<>nil then
Frame_DrawShape1.SelectionChanged;
//顯示當前編輯圖層名稱//
SBar.Panels[3].Text:=aLyr.Name;
end
else
//重置命令按鈕//
SetRadioCommand(TBtnSelectTool);
end;
procedure TForm_Main.SetLayerSelectable(const Index: Integer;
const Selectable: Boolean);
begin
UnitShellAPIs.SetLayerSelectable(MyGIS.GMapTools.MapX, Index, Selectable);
end;
procedure TForm_Main.SetLayerVisible(const Index: Integer;
const Visible: Boolean);
begin
UnitShellAPIs.SetLayerVisible(MyGIS.GMapTools.MapX, Index, Visible);
end;
procedure TForm_Main.RemoveuserLayer(const Index: Integer);
begin
UnitShellAPIs.RemoveuserLayer(MyGIS.GMapTools.MapX, Index);
FrmEagleEye.InitLayers(True);
end;
procedure TForm_Main.NToRegionClick(Sender: TObject);
var
i:Integer;
begin
for i:=1 to MyGIS.GMapTools.MapX.layers.Count do
begin
with MyGIS.GMapTools.m_Layer do
begin
Layer:=MyGIS.GMapTools.MapX.layers.Item[i];
AddRegionsFromSelectedLines;
end;
end;
end;
procedure TForm_Main.NToLineClick(Sender: TObject);
var
i:Integer;
begin
for i:=1 to MyGIS.GMapTools.MapX.layers.Count do
begin
with MyGIS.GMapTools.m_Layer do
begin
Layer:=MyGIS.GMapTools.MapX.layers.Item[i];
AddLinesFromSelectedRegions;
end;
end;
end;
procedure TForm_Main.NClipWithRectClick(Sender: TObject);
begin
CheckEditLayer;
with MyGIS.GMapTools.m_Layer do
begin
Layer:=EditLayer;
BreakFeatureLineOrRegion(SourceFts);
end;
end;
procedure TForm_Main.DoCanExecute_CreateShape(Sender, Trigger: TObject;
var CanExec: Boolean);
begin
try
CheckEditLayer;
CanExec:=True;
except
CanExec:=False;
end;
end;
procedure TForm_Main.NMakeTargetClick(Sender: TObject);
begin
CheckEditLayer;
if editlayer.Selection.Count=0 then
begin
MyDefInformation('請選擇編輯圖層里的一個對象!');
Exit;
end;
SourceFts:=editlayer.Selection.Clone;
editlayer.NoFeatures;
editlayer.Selection.ClearSelection;
end;
procedure TForm_Main.NClearTargetClick(Sender: TObject);
begin
SourceFts:=nil;
end;
procedure TForm_Main.NPasteClick(Sender: TObject);
begin
CheckEditLayer;
with MyGIS.GMapTools.m_Layer do
begin
BeforeDeleteFeature:=DoBeforeDeleteFeature;
OnFeatureCreate:=DoOnFeatureCreate;
Layer:=EditLayer;
Paste;
end;
end;
procedure TForm_Main.NCopyClick(Sender: TObject);
begin
if not MyGIS.GMapTools.m_Map.Copy then
MyDefInformation('請在當前編輯圖層內選擇要復制的對象!');
end;
procedure TForm_Main.NCutClick(Sender: TObject);
begin
CheckEditLayer;
if editlayer.Selection.Count=0 then
begin
MyDefInformation('請在當前編輯圖層內選擇要剪切的對象!');
Exit;
end;
with MyGIS.GMapTools.m_Layer do
begin
BeforeDeleteFeature:=DoBeforeDeleteFeature;
OnFeatureCreate:=DoOnFeatureCreate;
Layer:=EditLayer;
Cut;
end;
end;
procedure TForm_Main.RefreshSelectionRecords;
function LayerInSelection(Layer:CMapXLayer):Boolean;
var
i:Integer;
Lyr:CMapXLayer;
begin
for i:=1 to MyGIS.GMapTools.MapX.Layers.Count do
begin
Lyr:=MyGIS.GMapTools.MapX.Layers.Item[i];
if (Lyr=Layer)and(Lyr.Selection<>nil)and(Lyr.Selection.Count>0) then
begin
Result:=True;
Exit;
end;
end;
Result:=False;
end;
function GetRecordFrame(Layer:CMapXLayer):TFrame_Records;
var
i:Integer;
ARecFrame:TFrame_Records;
begin
for i:=0 to ScrollBox1.ControlCount-1 do
if ScrollBox1.Controls[i] is TFrame then
begin
ARecFrame:=ScrollBox1.Controls[i] as TFrame_Records;
if ARecFrame.Layer=Layer then
begin
Result:=ARecFrame;
Exit;
end;
end;
Result:=nil;
end;
var
i, j:Integer;
ALyr:CMapXLayer;
SelLyrCount:Integer;
ARecFrame:TFrame_Records;
begin
if ScrollBox1=nil then Exit;
SelLyrCount:=GetSelectionLayerCount;
for i:=ScrollBox1.ControlCount-1 downto 0 do
if ScrollBox1.Controls[i] is TFrame then
begin
ARecFrame:=ScrollBox1.Controls[i] as TFrame_Records;
if not LayerInSelection(ARecFrame.Layer) then
begin
if ARecFrame.Splitter<>nil then
ARecFrame.Splitter.Free;
ARecFrame.Free;
end;
end;
j:=0;
for i:=1 to MyGIS.GMapTools.MapX.Layers.Count do
begin
ALyr:=MyGIS.GMapTools.MapX.Layers.Item[i];
if (ALyr.Selection<>nil)and(ALyr.Selection.Count>0) then
begin
Inc(j);
ARecFrame:=GetRecordFrame(ALyr);
if ARecFrame=nil then
begin
ARecFrame:=TFrame_Records.Create(Self);
ARecFrame.Name:='';
ARecFrame.Parent:=ScrollBox1;
if j=SelLyrCount then
ARecFrame.Align:=alClient
else
ARecFrame.Align:=alTop;
end;
{設置MapX}
ARecFrame.MapX:=MyGIS.GMapTools.MapX;
{設置圖層}
ARecFrame.Layer:=ALyr;
ARecFrame.LayerData:=GetLayerData(ALyr);
if ALyr.DataSets.Count>0 then
begin
{設置數據集}
ARecFrame.DataSet:=ALyr.DataSets.Item[1];
{初始化網格}
ARecFrame.InitGrid;
{填寫標題}
ARecFrame.InitGridTitle;
{首先調用MyGIS寫數據,如果返回為False,則以默認方式填寫數據}
if not MyGIS.DoWriteDataGridData(ARecFrame) then
ARecFrame.DefWriteGridData;
end;
end;
end;
end;
function TForm_Main.GetSelectionLayerCount: Integer;
var
i:Integer;
Lyr:CMapXLayer;
begin
Result:=0;
for i:=1 to MyGIS.GMapTools.MapX.Layers.Count do
begin
Lyr:=MyGIS.GMapTools.MapX.Layers.Item[i];
if (Lyr.Selection<>nil)and(Lyr.Selection.Count>0) then
begin
Inc(Result);
Exit;
end;
end;
end;
procedure TForm_Main.N65Click(Sender: TObject);
var
i:Integer;
Rect:CMapXRectangle;
begin
Rect:=CoRectangle.Create;
Rect:=MyGIS.GMapTools.MapX.Bounds;
for i:=1 to MyGIS.GMapTools.MapX.Layers.Count do
MyGIS.GMapTools.MapX.Layers.Item[i].CoordSys
end;
procedure TForm_Main.N31Click(Sender: TObject);
var
aLyr:Layer;
begin
aLyr:=GetLayerFromTreeNode(tvLayers.Selected);
if aLyr=nil then Exit;
MyGIS.GMapTools.MapX.Bounds := aLyr.Bounds;
end;
procedure TForm_Main.N23Click(Sender: TObject);
begin
MyGIS.GMapTools.MapX.Bounds := MyGIS.GMapTools.MapX.Layers.Bounds;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -