⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitmainform.pas

📁 此代码是关于mapgis的在
💻 PAS
📖 第 1 页 / 共 4 页
字号:
begin
  MyGIS.GMapTools.m_Map.DoMouseMove(Sender, Shift, X, Y);
  MyGIS.GMapTools.m_Map.ToMapPoint(X, Y, m_x, m_y);
  SBar.Panels[5].Text:=FormatFloat('#0.######', m_x);
  SBar.Panels[7].Text:=FormatFloat('#0.######', m_y);
end;

procedure TForm_Main.MapXObject1ToolUsed(ASender: TObject; ToolNum: Smallint;
  X1, Y1, X2, Y2, Distance: Double; Shift, Ctrl: WordBool;
  var EnableDefault: WordBool);
begin
  if ToolNum=miTextTool then ShowMessage('asdf');
  MyGIS.GMapTools.m_Map.DoToolUsed(ASender, ToolNum, X1, Y1, X2, Y2,
    Distance, Shift, Ctrl, EnableDefault);
end;

procedure TForm_Main.MapXObject1DblClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.DoDblClick(Sender);
end;

procedure TForm_Main.NZoomInClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.SysTools.SetCurrentTool(miZoomInTool);
end;

procedure TForm_Main.NZoomOutClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.SysTools.SetCurrentTool(miZoomOutTool);
end;

procedure TForm_Main.NPanClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.SysTools.SetCurrentTool(miPanTool);
end;

procedure TForm_Main.NClickSelectClick(Sender: TObject);
begin
  PointSelectTool:=TPointSelectTool(SetCurrentMapTool('TPointSelectTool', DoOnTurnTool));
  MyGIS.GMapTools.MapX.EndDrag(False);
  if PointSelectTool<>nil then
    PointSelectTool.OnFeatureDblClick:=DoOnFeatureDblClick;
end;

procedure TForm_Main.NRectSelectClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.SysTools.SetCurrentTool(miRectSelectTool);
  MyGIS.GMapTools.MapX.EndDrag(False);
end;

procedure TForm_Main.NPolySelectClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.SysTools.SetCurrentTool(miPolygonSelectTool);
  MyGIS.GMapTools.MapX.EndDrag(False);
end;

procedure TForm_Main.NRadiusSelectClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.SysTools.SetCurrentTool(miRadiusSelectTool);
  MyGIS.GMapTools.MapX.EndDrag(False);
end;

procedure TForm_Main.NSymbolClick(Sender: TObject);
begin
  CheckEditLayer;
  SetCurrentMapTool('TAddSymbolMapTool', DoOnTurnTool);
end;

procedure TForm_Main.NTextClick(Sender: TObject);
begin
  CheckEditLayer;
  SetCurrentMapTool('TAddTextMapTool', DoOnTurnTool);
end;

procedure TForm_Main.NRectClick(Sender: TObject);
begin
  CheckEditLayer;
  SetCurrentMapTool('TAddRectangleMapTool', DoOnTurnTool);
end;

procedure TForm_Main.NDistanceClick(Sender: TObject);
var
  Index:Integer;
begin
  Index:=MyGIS.GMapTools.m_Map.UserTools.IndexByClassName('TRulerMapTool');
  with TRulerMapTool(MyGIS.GMapTools.m_Map.UserTools.Items[Index]) do
  begin
    MyGIS.GMapTools.m_Layer.Layer:=EditLayer;
    MsgHandle:=Self.Handle;
  end;
  MyGIS.GMapTools.m_Map.UserTools.SetCurrentTool('TRulerMapTool');
end;

procedure TForm_Main.NLoadLayerClick(Sender: TObject);
var
  i:Integer;
  FileMapper:string;
  aLyr:Layer;
  ANode:TTreeNode;
begin
  if SysTreeRoot=nil then
  begin
    MyInformation('错误', '图层组不存在!');
    Exit;
  end;
  OpenDialog1.Filter:='*.TAB|*.TAB';
  if OpenDialog1.Execute then
  begin
    FileMapper  := OpenDialog1.FileName;
    if SysTreeRoot.Count=0 then
      for i:=0 to OpenDialog1.Files.Count-1 do
      begin
        aLyr:=MyGIS.GMapTools.m_Layers.CreateLayerFromFile(
                               ExtractFileNameNoExt(OpenDialog1.Files[i]),
                               OpenDialog1.Files[i],
                               i+1, True);
        AddLayerNode(tvLayers, SysTreeRoot, naAddChild, -1,
                               aLyr.Name, OpenDialog1.Files[i],
                               False, 2, -1, 3);
      end
    else
    begin
      ANode:=SysTreeRoot.Item[0];
      for i:=0 to OpenDialog1.Files.Count-1 do
      begin
        aLyr:=MyGIS.GMapTools.m_Layers.CreateLayerFromFile(
                               ExtractFileNameNoExt(OpenDialog1.Files[i]),
                               OpenDialog1.Files[i],
                               i+1, True);
        AddLayerNode(tvLayers, ANode, naInsert, -1,
                               aLyr.Name, OpenDialog1.Files[i],
                               False, 2, -1, 3);
      end;
    end;
    FrmEagleEye.InitLayers(True);
    SysTreeRoot.Expand(False);
    if Frame_Search1<>nil then
      Frame_Search1.LoadLayers;
  end;
end;

procedure TForm_Main.NClearLayersClick(Sender: TObject);
begin
  if SysTreeRoot=nil then
  begin
    MyInformation('错误', '图层组不存在!');
    Exit;
  end;
  if YHB_Confirmation('只有用户图层可以被移出,是否移出所有用户图层?') then
  begin
    RemoveUserLayers;
    if Frame_Search1<>nil then
      Frame_Search1.LoadLayers;
  end;
end;

procedure TForm_Main.NMergeClick(Sender: TObject);
var
  Cancel:Boolean;
  Ft:Feature;
  Fts:Features;
begin
  CheckEditLayer;

  MyGIS.DoBeginAction(ID_ACTION_COMBINE, Cancel);
  if Cancel then Exit;

  Fts:=EditLayer.Selection.Clone;
  if not CanCombine(Fts) then
  begin
    if CanRegionToLine(Fts) then
      NToLine.OnClick(NToLine)
    else begin
      MyDefInformation('图形种类不一致,无法合并!');
      Exit;
    end;
  end;
  with MyGIS.GMapTools.m_Layer do
  begin
    BeforeDeleteFeature:=DoBeforeDeleteFeature;
    OnFeatureCreate:=DoOnFeatureCreate;
    Layer:=EditLayer;
    Ft:=CombineSelectedShapes;
  end;

  MyGIS.DoEndAction(ID_ACTION_COMBINE);
end;

procedure TForm_Main.NLineClick(Sender: TObject);
begin
  SetCurrentMapTool('TAddLineMapTool', DoOnTurnTool);
end;

procedure TForm_Main.FormShow(Sender: TObject);
begin
  //DebugLog.Show;
  //增加业务菜单//
  MyGIS.LoadBusinessMenuItems(NBOperators);
  DebugLog.Add('DB500TS-C', ['创建业务菜单成功']);
  //GIS实例对象进一步注册自己的单选命令//
  MyGIS.RegisterCmdCtrlGroups;
  DebugLog.Add('DB500TS-C', ['注册扩展命令执行者成功']);
  //初始化树//
  InitGISTree;
  DebugLog.Add('DB500TS-C', ['初始化图层树成功']);
  //工程实例初始化//
  MyGIS.LoadProject;
  DebugLog.Add('DB500TS-C', ['加载工程实例成功']);
  //查询窗口加载图层//
  if Frame_Search1<>nil then
  begin
    Frame_Search1.LoadLayers;
    DebugLog.Add('DB500TS-C', ['查询窗口配置完成']);
  end;
  //初始化鹰眼窗口//
  InitEyeForm;
  DebugLog.Add('DB500TS-C', ['鹰眼窗口配置完成']);
end;

procedure TForm_Main.MapXObject1MapViewChanged(Sender: TObject);
begin
  FrmEagleEye.OperMap:=MyGIS.GMapTools.MapX;
  FrmEagleEye.SetMapViewChanged;
end;

procedure TForm_Main.NCenterClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.SysTools.SetCurrentTool(miCenterTool);
end;

procedure TForm_Main.NPolyClick(Sender: TObject);
begin
  SetCurrentMapTool('TAddRegionMapTool', DoOnTurnTool);
end;

procedure TForm_Main.WMMapToolsEvent(var Message: TMessage);
var
  aBaseTool:TBaseMapTool;
  aRulerTool:TRulerMapTool;
begin
  if RichEdit_UserMsg=nil then Exit;
  if pcControl.ActivePage<>tsMessage then
    pcControl.ActivePageIndex:=1;
  aBaseTool:=MyGIS.GMapTools.m_Map.UserTools.CurrentToolObject;
  if aBaseTool is TRulerMapTool then
  begin
    aRulerTool:=TRulerMapTool(aBaseTool);
    RichEdit_UserMsg.Lines.Add('距离:'+FloatToStr(aRulerTool.Distance));
  end
  else
    RichEdit_UserMsg.Lines.Add('消息:'+aBaseTool.MsgString);
end;

procedure TForm_Main.NModeFeatureClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.FeatureEditMode:=emFeature;
  if not MyGIS.GMapTools.m_Map.InSelectMode then
    MyGIS.GMapTools.m_Map.SysTools.SetCurrentTool(miSelectTool);  
end;

procedure TForm_Main.NModeNodeClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.FeatureEditMode:=emNode;
  if not MyGIS.GMapTools.m_Map.InSelectMode then
    MyGIS.GMapTools.m_Map.SysTools.SetCurrentTool(miSelectTool);
end;

procedure TForm_Main.NModeAddNodeClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.FeatureEditMode:=emNode;
  if not MyGIS.GMapTools.m_Map.InSelectMode then
    MyGIS.GMapTools.m_Map.SysTools.SetCurrentTool(miSelectTool);  
end;

procedure TForm_Main.NSelectAllClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.SelectAll;
end;

procedure TForm_Main.NClearSelectClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.ClearSelection;
end;

procedure TForm_Main.MapXObject1SelectionChanged(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.DoSelectionChanged(Sender);
  //刷新数据窗口//
  RefreshSelectionRecords;
  //刷新制图窗口,首先置制图窗口为无编辑图形状态,如果EditLayer不为空,则增加选择图形到制图窗口//
  if Frame_DrawShape1<>nil then
    Frame_DrawShape1.SelectionChanged;
end;

procedure TForm_Main.NPLineClick(Sender: TObject);
begin
  SetCurrentMapTool('TAddPLineMapTool', DoOnTurnTool);
end;

procedure TForm_Main.NCircleClick(Sender: TObject);
begin
  CheckEditLayer;
  SetCurrentMapTool('TAddCircleMapTool', DoOnTurnTool);
end;

procedure TForm_Main.NLabelClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.SysTools.SetCurrentTool(miLabelTool);
end;

procedure TForm_Main.NToolBarClick(Sender: TObject);
begin
// 查看工具栏
  NToolBar.Checked := Not NToolBar.Checked;
  CoolBar1.Visible := NToolBar.Checked;
end;

procedure TForm_Main.NStatusBarClick(Sender: TObject);
begin
// 查看状态栏
  NStatusBar.Checked := Not NStatusBar.Checked;
  SBar.Visible := NStatusBar.Checked;
end;

procedure TForm_Main.NGlobalMapClick(Sender: TObject);
begin
  MyGIS.GMapTools.m_Map.ViewGlobalMap;
end;

procedure TForm_Main.NNavigationClick(Sender: TObject);
var
  pt:TPoint;
  cx, cy:Integer;
  w, h:Integer;
begin
  pt:=MyGIS.GMapTools.MapX.ClientToScreen(Classes.Point(0, 0));
  cx:=pt.x+MyGIS.GMapTools.MapX.Width div 2;
  cy:=pt.y+MyGIS.GMapTools.MapX.Height div 2;
  w:=FrmNavigation.Width;
  h:=FrmNavigation.Height;
  FrmNavigation.SetBounds(cx-w div 2, cy-h div 2, w, h);
  FrmNavigation.OnNavigate:=DoOnNavigate;
  FrmNavigation.Visible:=not FrmNavigation.Visible;
end;

procedure TForm_Main.DoOnNavigate(Sender: TObject; Direction: Integer);
begin
  case Direction of
    DIRECTION_STOP:begin
    end;
    DIRECTION_UP:begin
      MyGIS.GMapTools.MapX.CenterY:=MyGIS.GMapTools.MapX.CenterY+0.1;
    end;
    DIRECTION_DOWN:begin
      MyGIS.GMapTools.MapX.CenterY:=MyGIS.GMapTools.MapX.CenterY-0.1;
    end;
    DIRECTION_LEFT:begin
      MyGIS.GMapTools.MapX.CenterX:=MyGIS.GMapTools.MapX.CenterX-0.1;
    end;
    DIRECTION_RIGHT:begin
      MyGIS.GMapTools.MapX.CenterX:=MyGIS.GMapTools.MapX.CenterX+0.1;
    end;
    DIRECTION_WHOLE:begin
      MyGIS.GMapTools.MapX.Bounds := MyGIS.GMapTools.MapX.Layers.Bounds;
    end;
  end;
end;

procedure TForm_Main.NInvertSelectClick(Sender: TObject);
begin
  with MyGIS.GMapTools.m_Layer do
  begin
    Layer:=EditLayer;
    InvertSelection;
  end;
end;

procedure TForm_Main.NDeleteClick(Sender: TObject);
begin
  CheckEditLayer;
//  MyGIS.DoBeforeDelete;
  with MyGIS.GMapTools.m_Layer do
  begin
    
    Layer:=EditLayer;
    DeleteSelectedFeatures;
  end;
end;

procedure TForm_Main.NClearClick(Sender: TObject);
begin
  CheckEditLayer;
  with MyGIS.GMapTools.m_Layer do
  begin
    BeforeDeleteFeature:=DoBeforeDeleteFeature;
    OnFeatureCreate:=DoOnFeatureCreate;
    Layer:=EditLayer;
    DeleteAllFeatures;
  end;
end;

procedure TForm_Main.NArcClick(Sender: TObject);
begin
  CheckEditLayer;
  SetCurrentMapTool('TAddArcMapTool', DoOnTurnTool);
end;

procedure TForm_Main.MapXObject1DrawUserLayer(ASender: TObject;
  const Layer: IDispatch; hOutputDC, hAttributeDC: Cardinal;
  const RectFull, RectInvalid: IDispatch);
begin
  //绘制用户图层中的图形//
  MyGIS.GMapTools.m_Map.DoDrawUserLayer(ASender, Layer, hOutputDC,
    hAttributeDC, RectFull, RectInvalid);
end;

procedure TForm_Main.RegisterCmdCtrlItems;
begin
  {增加单选类工具}
  with CmdToolGroups.Add(gtRadio,'RadioMapTools') do
  begin
    Add(miPanTool, NPan, [TBtnmiPanTool, PNPan]);
    Add(miZoomInTool, NZoomIn, [TBtnCUSTOM_ZOOMIN_TOOL, PNZoomIn]);
    Add(miZoomOutTool, NZoomOut, [TBtnCUSTOM_ZOOMOUT_TOOL, PNZoomOut]);
    Add(miCenterTool, NCenter, [TBtnmiCenterTool, PNCenter]);

    Add(miSelectTool, NClickSelect, [TBtnSelectTool]);
    Add(miRectSelectTool, NRectSelect, [TBtnRectSelectTool]);
    Add(miPolygonSelectTool, NPolySelect, [TBtnPolygonSelectTool]);
    Add(miRadiusSelectTool, NRadiusSelect, [TBtnRadiusSelectTool]);

    Add(miSymbolTool, NSymbol, [TBtnCUSTOM_SYMBOL_TOOL], DoCanExecute_CreateShape);
    Add(miAddLineTool, NLine, [TBtnCUSTOM_LINE_TOOL], DoCanExecute_CreateShape);
    Add(miAddPolylineTool, NPLine, [TBtnCUSTOM_POLYLINE_TOOL], DoCanExecute_CreateShape);
    Add(0, NRect, [TBtnCUSTOM_RECTANGLE_TOOL], DoCanExecute_CreateShape);
    Add(0, NCircle, [TBtnCUSTOM_CIRCULARREGION_TOOL], DoCanExecute_CreateShape);
    Add(0, NEllipse, [TBtnCUSTOM_ELLIPSE_TOOL], DoCanExecute_CreateShape);
    Add(miAddRegionTool, NPoly, [TBtnCUSTOM_REGION_TOOL], DoCanExecute_CreateShape);
    Add(0, NArc, [TBtnCUSTOM_ARC_TOOL], DoCanExecute_CreateShape);
    Add(miTextTool, NText, [TBtnCUSTOM_TEXT_TOOL], DoCanExecute_CreateShape);

    Add(miLabelTool, NLabel, [TBtnCUSTOM_LABEL_TOOL]);

    Add(0, NBreakLine, [TBtnBreakLine], DoCanExecute_EditShape);
  end;
  {增加复选类工具}
  with CmdToolGroups.Add(gtCheck,'CheckItems') do
  begin
    Add(0, NNavigation, [TBtnNavigation, PNNavigation]);
    Add(0, NShowEagleEye, [TBtnShowEagleEye, PNShowEagleEye]);
  end;
  {增加一般工具}
  with CmdToolGroups.Add(gtCustom,'Custom') do
  begin
    Add(0, NGlobalMap, [TBtnGlobalMap, PNGlobalMap]);
    Add(0, NClearSelect, [TBtnClearSelTool]);
    Add(0, NRemoveLayer, [PNRemoveLayer]);
    Add(0, NNewLayer, [PNNewLayer1, PNNewLayer2]);
    Add(0, NLoadLayer, [PNLoadLayer1, PNLoadLayer2]);
    Add(0, NClearLayers, [PNClearLayers]);
    Add(0, NLayerOptions, [PNLayerOptions3]);
    Add(0, NAddToProject, [PNAddToProject]);
    Add(0, NCopyLayer, [PNCopyLayer]);

    Add(0, NCopy, [TBtnCopy]);
    Add(0, NCut, [TBtnCut]);
    Add(0, NPaste, [TBtnPaste]);

    Add(0, NMerge, [TBtnMerge]);
    Add(0, NBreak, [TBtnBreak]);
    
    Add(0, NAlignRight, [TBtnAlignRight]);
    Add(0, NAlignHCenter, [TBtnAlignHCenter]);
    Add(0, NAlignTop, [TBtnAlignTop]);
    Add(0, NAlignBottom, [TBtnAlignBottom]);
    Add(0, NAlignVCenter, [TBtnAlignVCenter]);

    Add(0, NToRegion, [TBtnToRegon]);
    Add(0, NToLine, [TBtnToLine]);

    Add(0, NClipWithRect, [TBtnClipWithRect]);
  end;
end;

procedure TForm_Main.NExportAsImageClick(Sender: TObject);
var
  cfgStruct:TMapImageConfig;
begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -