📄 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 + -