?? unitshellapis.pas
字號:
unit UnitShellAPIs;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Forms, MapXLib_TLB,
ComCtrls, MapXBase, UnitAppTypes, UnitProject, UnitGISShell;
function CreateAppProject(AOwner:TComponent; MapX:TMapXObject):TGISProject;
{創建GIS工程對象}
function CreateGISProject(GISClass:TGISProjectClass; AOwner:TComponent;
MapX:TMapXObject):TGISProject;
{放開節點}
procedure LayerTreeDragDrop(Sender, Source: TObject; X,
Y: Integer);
{拖動節點}
procedure LayerTreeDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
{初始化樹}
procedure InitGISTree;
{清除圖層樹附帶的信息}
procedure ClearLayerTreeInfo(ATreeView:TTreeView);
{清除某一節點下的附帶的信息}
procedure ClearSubNodesInfo(ANode:TTreeNode);
{刪除節點}
procedure DeleteNode(ANode:TTreeNode);
{強行創建Web地圖路徑}
function ForceCreateWebMapPath:string;
{增加圖層節點}
function AddLayerNode(ATreeView:TTreeView; APNode:TTreeNode;
Mode:TNodeAttachMode; const Id:Integer; const LayerName,
FileName:string; IsSystem:Boolean; const DataFrom:Smallint;
const FtClassType, ImageIndex:Integer):TTreeNode;
{查找圖層節點}
function FindLayerNode(const LayerIndex:Integer):TTreeNode; overload;
function FindLayerNode(ALyr:Layer):TTreeNode; overload;
function GetLayerData(ALyr:Layer):TLayerTreeNodeRecord;
{查找圖形類節點}
function FindFeatureClassNode(const FCId:Integer):TTreeNode;
{查找圖層}
function GetLayer(const FtClassType:Integer; var LayerNode:TTreeNode): CMapXLayer;
{移動圖層節點}
procedure MoveLayer(MapX:TMapXObject; const FromIndex, ToIndex:Integer);
{設置圖層節點可見性}
procedure SetLayerVisible(MapX:TMapXObject; const Index:Integer; const Visible:Boolean);
{設置圖層節點可編輯性}
procedure SetLayerEditable(MapX:TMapXObject; const Index:Integer; const Editable:Boolean);
{設置圖層節點可選性}
procedure SetLayerSelectable(MapX:TMapXObject; const Index:Integer; const Selectable:Boolean);
{設置圖層節點自動標注屬性}
procedure SetLayerAutoLabel(MapX:TMapXObject; SysTreeRoot:TTreeNode;
const Index:Integer; const AutoLabel:Boolean);
{移出指定圖層}
procedure RemoveuserLayer(MapX:TMapXObject; const Index: Integer);
{清除所有圖層}
procedure RemoveAllNodes;
{設置AddObjectTool}
function SetCurrentMapTool(const ToolClassName:string;
TurnEvent:TNotifyEvent):TBaseMapTool;
{設置一般工具}
{檢查編輯圖層}
procedure CheckEditLayer;
{圖層字段類型轉換為邏輯類型}
function MapFieldTypeToLogicalFieldName(AFieldType:TMapFieldType):string;
{邏輯類型轉換為圖層字段類型}
function LogicalFieldNameToMapFieldType(const FieldName:string):TMapFieldType;
{取得圖形類型名稱}
function GetShapeTypeName(AShapeType:TShapeType):string;
{用名稱取得圖形類型}
function GetShapeTypeByName(const TypeName:string):TShapeType;
{從節點取得圖層}
function GetLayerFromTreeNode(ANode:TTreeNode):Layer;
{是否為一般圖層}
function IsCustomLayer(Lyr:Layer):Boolean;
function GetCustomLayerIndex(MapX:TMapXObject; const ComboIndex:Integer):Integer;
function GetCustomLayerComboIndex(MapX:TMapXObject; const LayerIndex:Integer):Integer;
{生成Bounds字符串}
function GetBoundsString(Bounds:CMapXRectangle):string;
{從Bounds字符串設置Bounds}
function CreateBoundsUseBoundsString(const BoundsStr:string):CMapXRectangle;
implementation
uses
WinControl, BusinessDialogs, StringOperations, MapXAPIs, MapXTools,
UnitLocalGISProject, UnitAppConsts;
function CreateAppProject(AOwner:TComponent; MapX:TMapXObject):TGISProject;
begin
if MyGISClass=nil then
MyGISClass:=TLocalGISProject;
Result:=CreateGISProject(MyGISClass, AOwner, MapX);
end;
function CreateGISProject(GISClass:TGISProjectClass; AOwner:TComponent;
MapX:TMapXObject):TGISProject;
begin
Result:=TGISProject(GISClass.NewInstance);
Result.Create(AOwner, MapX);
end;
function AddLayerNode(ATreeView:TTreeView; APNode:TTreeNode;
Mode:TNodeAttachMode; const Id:Integer; const LayerName,
FileName:string; IsSystem:Boolean; const DataFrom:Smallint;
const FtClassType, ImageIndex:Integer):TTreeNode;
var
aLayerItem:TTreeNode;
aLayerInfo:TLayerTreeNodeRecord;
begin
Result:=nil;
case Mode of
naAdd : aLayerItem:=ATreeView.Items.Add(APNode, LayerName);
naAddFirst : aLayerItem:=ATreeView.Items.AddFirst(APNode, LayerName);
naAddChild : aLayerItem:=ATreeView.Items.AddChild(APNode, LayerName);
naAddChildFirst : aLayerItem:=ATreeView.Items.AddChildFirst(APNode, LayerName);
naInsert : aLayerItem:=ATreeView.Items.Insert(APNode, LayerName);
else Exit;
end;
aLayerItem.ImageIndex:=ImageIndex;
aLayerItem.SelectedIndex:=ImageIndex;
aLayerItem.StateIndex:=TREENODESTATE_SUBCHECKEDALL;
aLayerInfo:=TLayerTreeNodeRecord.Create;
aLayerItem.Data:=aLayerInfo;
aLayerInfo.NodeType:=LTN_LAYER;
aLayerInfo.Id:=Id;
aLayerInfo.Name:=LayerName;
aLayerInfo.FtClassType:=FtClassType;
aLayerInfo.IsSystem:=IsSystem;
aLayerInfo.DataFrom:=DataFrom;
aLayerInfo.FileName:=FileName;
Result:=aLayerItem;
end;
procedure LayerTreeDragDrop(Sender, Source: TObject; X,
Y: Integer);
begin
TreeViewDragDrop(Sender, Source, X, Y, DragType);
end;
procedure LayerTreeDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
TreeViewDragOver(Sender, Source, X, Y, State, Accept);
end;
procedure InitGISTree;
begin
SysTreeRoot:=SysTree.Items.AddChild(nil, '所有圖層');
SysTreeRoot.ImageIndex:=0;
SysTreeRoot.SelectedIndex:=0;
SysTreeRoot.StateIndex:=TREENODESTATE_SUBCHECKEDALL;
end;
procedure ClearLayerTreeInfo(ATreeView:TTreeView);
var
i:Integer;
AItem:TTreeNode;
begin
for i:=1 to ATreeView.Items.Count-1 do
begin
AItem:=ATreeView.Items[i];
if AItem.Data<>nil then
TLayerTreeNodeRecord(AItem.Data).Free;
end;
end;
procedure ClearSubNodesInfo(ANode:TTreeNode);
var
i:Integer;
AItem:TTreeNode;
begin
for i:=0 to ANode.Count-1 do
begin
AItem:=ANode.Item[i];
if AItem.Data<>nil then
TLayerTreeNodeRecord(AItem.Data).Free;
ClearSubNodesInfo(AItem);
end;
end;
procedure DeleteNode(ANode:TTreeNode);
begin
TLayerTreeNodeRecord(ANode.Data).Free;
ANode.Free;
end;
function GetSystemDirectory(var S: String): Boolean;
var
Len: Integer;
begin
Result:=False;
Len := Windows.GetSystemDirectory(nil, 0);
if Len > 0 then
begin
SetLength(S, Len);
Windows.GetSystemDirectory(PChar(S), Len);
Result:=True;
end;
end;
function ForceCreateWebMapPath:string;
var
SysPath, MyPath:string;
begin
if not GetSystemDirectory(SysPath) then
begin
Result:='';
Exit;
end;
Result:=SysPath[1]+':\QxWebMap\';
if not DirectoryExists(Result) then
ForceDirectories(Result);
MyPath:=Result+'Maps';
if not DirectoryExists(MyPath) then
ForceDirectories(MyPath);
MyPath:=Result+'SymbolBitmaps';
if not DirectoryExists(MyPath) then
ForceDirectories(MyPath);
end;
function FindLayerNode(const LayerIndex: Integer): TTreeNode;
function FindNodeInChildren(const Index:Integer;
ANode:TTreeNode; var PriorIndex:Integer):TTreeNode;
var
i:Integer;
begin
Result:=nil;
for i:=0 to ANode.Count-1 do
begin
if TLayerTreeNodeRecord(ANode.Item[i].Data).NodeType=LTN_LAYER then
begin
Inc(PriorIndex);
if PriorIndex=Index then
begin
Result:=ANode.Item[i];
Exit;
end;
end
else
Result:=FindNodeInChildren(Index, ANode.Item[i], PriorIndex);
end;
end;
var
Index:Integer;
PriorIndex:Integer;
begin
PriorIndex:=-1;
//取得在顯示給用戶的圖層列表中的序號//
Index:=GetCustomLayerComboIndex(MyGIS.GMapTools.MapX, LayerIndex);
//根據顯示給用戶的圖層列表中的序號,查找節點//
Result:=FindNodeInChildren(Index, SysTreeRoot, PriorIndex);
end;
function FindLayerNode(ALyr:Layer):TTreeNode;
var
LayerIndex:Integer;
begin
LayerIndex:=MyGIS.GMapTools.m_Layers.IndexByLayer(ALyr);
Result:=FindLayerNode(LayerIndex);
end;
function GetLayerData(ALyr:Layer):TLayerTreeNodeRecord;
var
ANode:TTreeNode;
begin
Result:=nil;
ANode:=FindLayerNode(ALyr);
if ANode<>nil then
Result:=TLayerTreeNodeRecord(ANode.Data);
end;
function FindFeatureClassNode(const FCId:Integer):TTreeNode;
//var
// i:Integer;
begin
{ for i:=0 to SysTreeRoot.Count-1 do
begin
if TLayerTreeNodeRecord(ANode.Item[i].Data)^.NodeType=LTN_LAYER then
begin
Inc(PriorIndex);
if PriorIndex=Index then
begin
Result:=ANode.Item[i];
Exit;
end;
end
else
Result:=FindNodeInChildren(Index, ANode.Item[i], PriorIndex);
end; }
end;
function GetLayer(const FtClassType:Integer; var LayerNode:TTreeNode): CMapXLayer;
var
i:Integer;
ANode:TTreeNode;
begin
Result:=nil;
LayerNode:=nil;
for i:=1 to MyGIS.GMapTools.MapX.Layers.Count do
begin
ANode:=FindLayerNode(i);
if ANode<>nil then
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -