📄 mapxcontainer.pas
字号:
end;
function TMapManager.GetCurrentToolObject: TBaseMapTool;
var
aTempTool:TBaseMapTool;
begin
Result:=nil;
aTempTool:=SysTools.CurrentToolObject;
if (aTempTool<>nil)and(MapX.CurrentTool=aTempTool.ToolId) then
begin
Result:=aTempTool;
Exit;
end;
aTempTool:=UserTools.CurrentToolObject;
if (aTempTool<>nil)and(MapX.CurrentTool=aTempTool.ToolId) then
Result:=aTempTool;
end;
function TMapManager.GetSingleSelectedLayer: CMapXLayer;
var
i:Integer;
Count:Integer;
TempLayer:CMapXLayer;
begin
TempLayer:=nil;
Count:=0;
for i:=1 to MapX.Layers.Count do
begin
if MapX.Layers.Item[i].Selection.Count>0 then
begin
TempLayer:=MapX.Layers.Item[i];
Inc(Count);
end;
if Count>1 then Break;
end;
if Count=1 then
Result:=TempLayer
else
Result:=nil;
end;
function TMapManager.Copy:Boolean;
var
ALyr:Layer;
begin
Result:=False;
ALyr:=GetFirstSelectLayer;
if (ALyr=nil)or(ALyr.Selection.Count=0) then Exit;
CopyFts:=ALyr.NoFeatures;
CopyFts.Add(ALyr.Selection.Clone);
Result:=True;
end;
function TMapManager.GetFirstSelectLayer: CMapXLayer;
var
i:Integer;
begin
Result:=nil;
for i:=1 to MapX.Layers.Count do
if MapX.Layers.Item[i].Selection.Count>0 then
begin
Result:=MapX.Layers.Item[i];
Exit;
end;
end;
procedure TMapManager.DoBeforeSelectionDeleted(ASender: TObject;
EditLayer: CMapXLayer);
var
i:Integer;
pProc:TMapXSelectionDeleted;
begin
for i:=0 to FSelectionDeletedEventProces.Count-1 do
begin
pProc:=TMapXSelectionDeleted(FSelectionDeletedEventProces.Items[i].Method);
pProc(ASender, EditLayer);
end;
end;
{ TFeatureClass }
constructor TFeatureClass.Create;
begin
inherited Create;
FFields:=TMapFieldList.Create;
FFeatureList:=TBusinessFeatureList.Create;
FParams:=TStringList.Create;
end;
destructor TFeatureClass.Destroy;
begin
FFields.Free;
FFeatureList.Free;
FParams.Free;
inherited Destroy;
end;
procedure TFeatureClass.LoadFromStream(Stream: TStream);
begin
FeatureClassName:=ReadString(Stream);
TableStructCanChanged:=ReadBoolean(Stream);
FeatureListCanChanged:=ReadBoolean(Stream);
Script:=ReadString(Stream);
FFields.LoadFromStream(Stream);
FFeatureList.LoadFromStream(Stream);
ReadMemo(Stream, FParams);
end;
procedure TFeatureClass.SaveToStream(Stream: TStream);
begin
WriteString(Stream, FeatureClassName);
WriteBoolean(Stream, TableStructCanChanged);
WriteBoolean(Stream, FeatureListCanChanged);
WriteString(Stream, Script);
FFields.SaveToStream(Stream);
FFeatureList.SaveToStream(Stream);
WriteMemo(Stream, FParams);
end;
constructor TFeatureClassList.Create;
begin
FList:=TList.Create;
end;
destructor TFeatureClassList.Destroy;
begin
Clear;
FList.Free;
inherited Destroy;
end;
function TFeatureClassList.GetItemCount:Integer;
begin
Result:=FList.Count;
end;
function TFeatureClassList.GetItem(Index:Integer):TFeatureClass;
begin
Result:=FList.Items[Index];
end;
procedure TFeatureClassList.Add(Value:TFeatureClass);
begin
FList.Add(Value);
end;
function TFeatureClassList.Add:TFeatureClass;
begin
Result:=TFeatureClass.Create;
Add(Result);
end;
procedure TFeatureClassList.Insert(const Index:Integer;Value:TFeatureClass);
begin
FList.Insert(Index,Value);
end;
function TFeatureClassList.Insert(const Index:Integer):TFeatureClass;
begin
Result:=TFeatureClass.Create;
FList.Insert(Index,Result);
end;
procedure TFeatureClassList.Delete(const Index:Integer);
begin
TFeatureClass(FList.Items[Index]).Free;
FList.Delete(Index);
end;
procedure TFeatureClassList.Clear;
var
i:Integer;
begin
for i:=0 to FList.Count-1 do
TFeatureClass(FList.Items[i]).Free;
FList.Clear;
end;
procedure TFeatureClassList.LoadFromStream(Stream:TStream);
var
i:Integer;
myCount:Integer;
AObj:TFeatureClass;
begin
Clear;
myCount:=ReadInteger(Stream);
for i:=0 to myCount-1 do
begin
AObj:=Add;
AObj.LoadFromStream(Stream);
end;
end;
procedure TFeatureClassList.SaveToStream(Stream:TStream);
var
i:Integer;
AObj:TFeatureClass;
begin
WriteInteger(Stream, FList.Count);
for i:=0 to FList.Count-1 do
begin
AObj:=Items[i];
AObj.SaveToStream(Stream);
end;
end;
{ TLayersManager }
function TLayersManager.CreateUserDrawLayer(
const LayerName: string): CMapXLayer;
begin
Result:=MapX.Layers.AddUserDrawLayer(LayerName, 1);
end;
function TLayersManager.CreateDefaultTempLayer(
const LayerName: string; const Index:Integer): CMapXLayer;
var
Position:OleVariant;
begin
if Index=-1 then
Position:=MapX.Layers.Count+1
else
Position:=Index;
Result:=MapX.Layers.CreateLayer(LayerName, EmptyParam,Position,EmptyParam, EmptyParam);
Result.Editable:=True;
end;
function TLayersManager.FindByName(const LayerName: string): CMapXLayer;
var
Index:Integer;
begin
Result:=nil;
Index:=IndexByName(LayerName);
if Index>-1 then
Result:=MapX.Layers.Item[Index];
end;
function TLayersManager.GetActiveLayer: CMapXLayer;
begin
Result:=MapX.Layers.AnimationLayer;
end;
procedure TLayersManager.GetLayerNames(List: TStrings);
var
i:Integer;
begin
List.Clear;
for i:=1 to MapX.Layers.Count do
List.Add(MapX.Layers.Item[i].Name);
end;
function TLayersManager.IndexByName(const LayerName: string): Integer;
var
i:Integer;
begin
Result:=-1;
for i:=1 to MapX.Layers.Count do
if CompareText(MapX.Layers.Item[i].Name, LayerName)=0 then
begin
Result:=i;
Exit;
end;
end;
function TLayersManager.CreateLayerFromFile(const LayerName, FileName: string;
const Index:Integer; const bAddData:Boolean):CMapXLayer;
var
Position:OleVariant;
begin
if Index=-1 then
Position:=MapX.Layers.Count+1
else
Position:=Index;
Result:=MapX.Layers.Add(FileName,Position);
Result.Name:=LayerName;
if bAddData then
MapX.Datasets.Add(miDataSetLayer, Result, Result.Name,
EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam);
end;
procedure TLayersManager.CreateLayersFromFiles(List: TStrings;
const FromIndex:Integer; const bAddData:Boolean);
var
i:Integer;
Position:OleVariant;
ALyr:Layer;
begin
if FromIndex=-1 then
Position:=MapX.Layers.Count+1
else
Position:=FromIndex;
for i:=0 to List.Count-1 do
begin
ALyr:=MapX.Layers.Add(List.Strings[i],Position+i);
if bAddData then
MapX.Datasets.Add(miDataSetLayer, ALyr, ALyr.Name,
EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam);
end;
end;
procedure TLayersManager.Merge(const LayerIndexes: string);
begin
end;
procedure TLayersManager.Move(const FromIndex, ToIndex: Integer);
begin
MapX.Layers.Move(FromIndex, ToIndex);
end;
procedure TLayersManager.MoveToBottom(const Index: Integer);
begin
MapX.Layers.Move(Index, MapX.Layers.Count);
end;
procedure TLayersManager.MoveToTop(const Index: Integer);
begin
MapX.Layers.Move(Index, 1);
end;
procedure TLayersManager.Pack(const PackType:Integer);
var
i: Integer;
begin
for i := 1 to MapX.Layers.Count do
MapX.Layers[i].Pack(PackType);
end;
procedure TLayersManager.Remove(const Index: Integer);
begin
MapX.Layers.Remove(Index);
end;
procedure TLayersManager.RemoveAll;
begin
MapX.Layers.RemoveAll;
end;
procedure TLayersManager.RemoveByName(const LayerName: string);
var
i:Integer;
begin
for i:=MapX.Layers.Count downto 1 do
begin
if CompareText(MapX.Layers.Item[i].Name, LayerName)=0 then
MapX.Layers.Remove(i);
end;
end;
procedure TLayersManager.SetActiveLayer(const Value: CMapXLayer);
begin
MapX.Layers.AnimationLayer:=Value;
end;
function TLayersManager.CreateSymbolLayerFromDataSet(const LayerName,
DataSetName, XFieldName, YFieldName, KeyFieldName, TabFileName: string;
DS:TCustomADODataSet): CMapXLayer;
var
oBLayer : BindLayer;
MapDS:DataSet;
begin
if FileExists(TabFileName) then
DeleteFile(TabFileName);
if not DS.Active then
raise Exception.Create('系统基础表没有打开!');
if DS.FindField(XFieldName)=nil then
raise Exception.Create('横坐标字段不存在!');
if DS.FindField(YFieldName)=nil then
raise Exception.Create('纵坐标字段不存在!');
if DS.FindField(KeyFieldName)=nil then
raise Exception.Create('编号字段不存在!');
//创建BindLayer//
oBLayer := coBindLayer.Create;
oBLayer.LayerName := LayerName;
oBLayer.FileSpec := TabFileName;
oBLayer.LayerType := miBindLayerTypeXY;//必须使用这个参数才能绑定XY坐标
oBLayer.RefColumn1 := XFieldName;//横坐标
oBLayer.RefColumn2 := YFieldName;//纵坐标
//添加数据集//
MapDS:=MapX.Datasets.Add(miDataSetADO,//数据集类型,这是miDataSetADO,即ADO专用的
DS.Recordset,//使用这个方法获得ADO中的_Recordset类型
DataSetName,//数据集名称
KeyFieldName,//传入的是Xunit表中的字段ID的名称
EmptyParam,
oBLayer,//BindLayer
EmptyParam,
EmptyParam);
end;
function TLayersManager.CreateCustomTableLayer(const LayerName,
FilePath: string; MapFields: TMapFieldList; const Index:Integer;
const bAddData:Boolean): CMapXLayer;
var
LyrInfo:LayerInfo;
Flds:Fields;
FileName:string;
Position:OleVariant;
begin
FileName:=FilePath+'\'+LayerName+'.TAB';
if FileExists(FileName) then DeleteFile(FileName);
if Index=-1 then
Position:=MapX.Layers.Count+1
else
Position:=Index;
LyrInfo:=CoLayerInfo.Create;
Flds:=CoFields.Create;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -