亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tdistancetoolclass.pas

?? delphi7+mapX距離工具的類
?? PAS
字號:
{-----------------------------------------------------------------------------
 Unit Name: TDistanceToolClass
 Author:    杜長宇  junqilian@163.com
 Purpose: 量距離工具
 History:  2005-05-21

 開發(fā)環(huán)境: delphi7+mapX 5.02.38
            windows XP Sp2

 許可:
    您可以自由的使用本代碼進行學(xué)習(xí)或非商業(yè)、商業(yè)應(yīng)用,
    你可以自由更改本代碼以便更適合你的應(yīng)用,但請保留原作者版權(quán)信息;
    如果你對本代碼作過修改優(yōu)化,請?zhí)砑釉敿氉⑨尯笾匦掳l(fā)布到網(wǎng)上,并發(fā)給原作者一份拷貝,以利于大家共同進步;


 用法:
   1、主程序中uses ToolButtonDistance;
   2、在主程序窗體中放置ToolButtonDistance
   3、添加事件處理函數(shù),形如:
procedure TForm1.ToolButtonDistanceClick(Sender: TObject);
var
  m_MapDistanceTool : TDistanceTool;
begin
  m_MapDistanceTool := TDistanceTool.Create;
  m_MapDistanceTool.CreateDistanceTool(map1);
  Map1.CurrentTool := m_MapDistanceTool.GetToolNum;
end;

-----------------------------------------------------------------------------}


unit TDistanceToolClass;

interface
uses Controls,Classes,MapXLib_TLB,Variants,TeEngine,windows,SysUtils,
   DistanceWindow,Math;

type
  TDistanceTool = class(TObject)
  protected
    m_IriMouseMoveEvent:TMouseMoveEvent;
    m_IriMouseClickInMapEvent:TNotifyEvent;
    m_IriMouseDoubleClickInMapEvent:TNotifyEvent;
    m_pMap:Tmap;

    m_bToolInUse:Boolean;
    m_sPreviousMapX:Single;
    m_sPreviousMapY:Single;
    m_sCurrentMapX:Single;
    m_sCurrentMapY:Single;

    m_dTotalDistance:double;

    m_lTotalDistancePoint:integer;
    m_bTotalDistanceShow:boolean;
    m_lRulePolyLineFeatuerID : integer;
    m_lRuleLineFeatuerID : integer;

    m_strRuleFlagLayer : string;

    m_frmDistanceWindow : TfrmDistanceWindow;
    
  protected
    procedure MapMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure MapMouseClick(Sender: TObject);
    procedure MapMouseDoubleClick(Sender: TObject);
  private
  { Private declarations }
    procedure ShowTheResult(dDistance,dTotalDistance:double;sDistanceUnit:string);
  public
  { public declarations }
    Function CreateDistanceTool(var pMap:TMap):Integer;
    Function InstallDistanceTool():Boolean;
    Function UnInstallDistanceTool():Boolean;
    Function GetToolNum():Integer;

end;

const
  MAP_DISTANCE_TOOL = 1;
  
implementation

uses dchyMapModule;

var
  myMapModule : TdchyMapModule;


function TDistanceTool.CreateDistanceTool(var pMap: TMap): Integer;
begin
    m_pMap:=pMap;
    if m_pMap<>nil then
    begin
      m_pMap.CreateCustomTool(MAP_DISTANCE_TOOL,miToolTypePoint, miCrossCursor, miCrossCursor, miCrossCursor);
      //初始化
      m_strRuleFlagLayer :='RulerTempLayer';
      m_dTotalDistance:=0.0;
      m_lTotalDistancePoint:=0;

      InstallDistanceTool;
      result:=MAP_DISTANCE_TOOL;
    end 
    else 
      result:=-1;
end;

function TDistanceTool.GetToolNum: Integer;
begin
  result:=MAP_DISTANCE_TOOL;
end;

function TDistanceTool.InstallDistanceTool: Boolean;
begin
  if m_pMap<>nil then
  begin
    //保存原先的事件處理函數(shù)狀態(tài)
    m_IriMouseMoveEvent:=m_pMap.OnMouseMove;
    m_IriMouseClickInMapEvent:=m_pMap.OnClick;
    m_IriMouseDoubleClickInMapEvent:=m_pMap.OnDblClick;
    
    m_pMap.OnMouseMove:=MapMouseMove;
    m_pMap.OnClick:=MapMouseClick;
    m_pMap.OnDblClick:=MapMouseDoubleClick;

    result:=True;
  end
  else
    result:=False;
end;

procedure TDistanceTool.MapMouseClick(Sender: TObject);
var
  dDistance : double;
  newobj : CMapXFeature; // Standalone object
  obj : CMapXFeature;    // to hold object added to layer
  style : CMapXStyle;
  PolyLinePoints : CMapXPoints;

  LinePoints : CMapXPoints;
  currentPoint : CMapXPoint;

  index : integer;
  pointsCount : integer;
  layer :CMapXLayer;

begin
  if m_pMap.CurrentTool = MAP_DISTANCE_TOOL then begin

    if m_lTotalDistancePoint <> 0 then begin
      dDistance := m_pMap.Distance(m_sPreviousMapX,m_sPreviousMapY,m_sCurrentMapX,m_sCurrentMapY);
      m_dTotalDistance := m_dTotalDistance + dDistance;
    end;

    m_sPreviousMapX:=m_sCurrentMapX;
    m_sPreviousMapY:=m_sCurrentMapY;
    m_lTotalDistancePoint:=m_lTotalDistancePoint+1;
    m_bTotalDistanceShow:=TRUE;

    //創(chuàng)建臨時圖層
    if myMapModule.GetLayerIndex(m_pMap,m_strRuleFlagLayer)<0 then
      myMapModule.CreateTempAnimationLayer(m_pMap,m_strRuleFlagLayer);

    m_pMap.Layers.Item[m_strRuleFlagLayer].Editable := true;

    if m_lRulePolyLineFeatuerID = 0 then begin
      try
        PolyLinePoints := CoPoints.Create;
        PolyLinePoints.AddXY(m_sCurrentMapX,m_sCurrentMapY,EmptyParam);
        PolyLinePoints.AddXY(m_sCurrentMapX,m_sCurrentMapY,EmptyParam);

        newobj := CoFeature.Create;
        newobj.Attach(m_pMap.ControlInterface);
        newobj.type_ := miFeatureTypeLine;
        newobj.Parts.Add(PolyLinePoints);
        obj := m_pMap.Layers.Item[m_strRuleFlagLayer].AddFeature(newobj,EmptyParam);

        style := m_pMap.Layers.Item[m_strRuleFlagLayer].Style.Clone;
        style.LineColor := miColorRed;
        style.LineStyle := miLineTypeSimple;
        style.LineWidth := 4;
        obj.Style := style;
        obj.Update(EmptyParam,EmptyParam);

        m_lRulePolyLineFeatuerID :=obj.FeatureID;
      except
        raise;
      end;
    end
    else
      try
        obj := m_pMap.Layers.Item[m_strRuleFlagLayer].GetFeatureByID(m_lRulePolyLineFeatuerID);
        style := m_pMap.Layers.Item[m_strRuleFlagLayer].Style.Clone;
        style.LineColor := miColorRed;
        style.LineStyle := miLineTypeSimple;
        style.LineWidth := 4;
        obj.Style := style;

        PolyLinePoints := obj.Parts.Item[1];
        PolyLinePoints.AddXY(m_sCurrentMapX,m_sCurrentMapY,EmptyParam);
        obj.Parts.Add(PolyLinePoints);
        obj.Parts.Remove(2);
        obj.Update(EmptyParam,EmptyParam);
      except
        raise;
      end;

      if m_lRuleLineFeatuerID=0 then begin
        try
          LinePoints := CoPoints.Create;
          LinePoints.AddXY(m_sCurrentMapX,m_sCurrentMapY,EmptyParam);
          LinePoints.AddXY(m_sCurrentMapX,m_sCurrentMapY,EmptyParam);

          newobj := m_pMap.FeatureFactory.CreateLine(LinePoints,EmptyParam);
          obj := m_pMap.Layers.Item[m_strRuleFlagLayer].AddFeature(newobj,EmptyParam);
          style := m_pMap.Layers.Item[m_strRuleFlagLayer].Style.Clone;
          style.LineColor := miColorRed;
          style.LineStyle := miLineTypeSimple;
          style.LineWidth := 4;
          obj.Style := style;
          obj.Update(EmptyParam,EmptyParam);

          m_lRuleLineFeatuerID := obj.FeatureID;
        except
          raise;
        end;
      end
      else begin
        obj:=m_pMap.Layers.Item[m_strRuleFlagLayer].GetFeatureByID(m_lRuleLineFeatuerID);
        obj.Parts.Item[1].Item[1].Set_(m_sCurrentMapX,m_sCurrentMapY);
        obj.Parts.Item[1].Item[2].Set_(m_sCurrentMapX,m_sCurrentMapY);
        obj.Update(EmptyParam,EmptyParam);
      end;
  end;
  //just for debuging;
  //m_pMap.Layers.LayersDlg(EmptyParam,EmptyParam);
  if @m_IriMouseClickInMapEvent<>nil then
    m_IriMouseClickInMapEvent(Sender);

end;

procedure TDistanceTool.MapMouseDoubleClick(Sender: TObject);
var
  layer : CMapXLayer;
  features : CMapXFeatures;
  obj : CMapXFeature;
  i : integer;

begin
  if m_pMap.CurrentTool = MAP_DISTANCE_TOOL then begin
    m_lTotalDistancePoint:=0;
    m_dTotalDistance:=0.0;
    m_bTotalDistanceShow:=FALSE;
    m_lRulePolyLineFeatuerID:=0;
    m_lRuleLineFeatuerID:=0;

    if myMapModule.GetLayerIndex(m_pMap,m_strRuleFlagLayer)<>-1 then begin
      layer := m_pMap.Layers.Item[m_strRuleFlagLayer];
      features := layer.AllFeatures;
      for i:=0 to features.Count-1 do begin
        obj:=features.Item[i+1];
        layer.DeleteFeature(obj);
      end;
    end;

  m_pMap.CurrentTool :=  miArrowTool;
  myMapModule.DeleteTempAnimationLayer(m_pMap,m_strRuleFlagLayer);
  UnInstallDistanceTool;
  end;

  if @m_IriMouseDoubleClickInMapEvent<>nil then
    m_IriMouseDoubleClickInMapEvent(Sender);

end;

procedure TDistanceTool.MapMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  dDist,dRectLen,dRectWidth : double;
  screenX,screenY : Single;
  mapX,mapY : double;
  obj : CMapXFeature;
var
  myMapModule : TdchyMapModule;
  mapUnit : string;
begin
  if m_pMap.CurrentTool = MAP_DISTANCE_TOOL then begin
    screenX:=X;
    screenY:=Y;
    m_pMap.ConvertCoord(screenX,screenY,mapX,mapY,miScreenToMap);

    m_sCurrentMapX:=mapX;
    m_sCurrentMapY:=mapY;

    if m_bTotalDistanceShow then begin
       dDist:=m_pMap.Distance(m_sPreviousMapX,m_sPreviousMapY,mapX,mapY);
       mapUnit := myMapModule.GetChineseMapUnit(m_pMap,m_pMap.MapUnit);
       ShowTheResult(dDist,m_dTotalDistance+dDist,mapUnit);
       myMapModule.AutoPan(m_pMap,mapX,mapY,24.0,18.0);

       if(m_lRuleLineFeatuerID<>0)then begin
          obj:=m_pMap.Layers.Item[m_strRuleFlagLayer].GetFeatureByID(m_lRuleLineFeatuerID);
          obj.Parts.Item[1].Item[2].Set_(m_sCurrentMapX,m_sCurrentMapY);
          obj.Update(EmptyParam,EmptyParam);
       end;
    end;
  end;

  if @m_IriMouseMoveEvent<>nil then
    m_IriMouseMoveEvent(Sender,Shift,X,Y);
end;

procedure TDistanceTool.ShowTheResult(dDistance, dTotalDistance: double;sDistanceUnit:string);
begin
    //激活距離顯示窗口
    if m_frmDistanceWindow<>nil then begin
      dDistance := RoundTo(dDistance,-2);  //四舍五入,保留兩位
      dTotalDistance := RoundTo(dTotalDistance,-2);

      m_frmDistanceWindow.lblDistance.Caption := floatToStr(dDistance)+sDistanceUnit;
      m_frmDistanceWindow.lblTotalDistance.Caption := floatToStr(dTotalDistance)+sDistanceUnit;
      m_frmDistanceWindow.Show;
    end
    else begin
      m_frmDistanceWindow:=TfrmDistanceWindow.Create(nil);
      m_frmDistanceWindow.Show;
    end;
end;

function TDistanceTool.UnInstallDistanceTool: Boolean;
begin
    if m_pMap<>nil then
    begin
      //回復(fù)原先的事件處理函數(shù)狀態(tài)
      m_pMap.OnMouseMove:=m_IriMouseMoveEvent;
      m_pMap.OnClick := m_IriMouseClickInMapEvent;
      m_pMap.OnDblClick := m_IriMouseDoubleClickInMapEvent;
      m_IriMouseMoveEvent:=nil;
      m_IriMouseClickInMapEvent:=nil;
      m_IriMouseDoubleClickInMapEvent:=nil;
      m_pMap:=nil; 
      result:=True; 
    end 
    else 
      result:=False;
end;

end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久久免费一区二区| 亚洲男女毛片无遮挡| 日本一区二区免费在线观看视频| 中文字幕一区二区在线观看| 午夜影视日本亚洲欧洲精品| 成人午夜视频在线| 欧美va亚洲va国产综合| 亚洲综合免费观看高清完整版 | av毛片久久久久**hd| 91精品国产综合久久精品图片| 亚洲视频狠狠干| 国产精品911| 日韩欧美另类在线| 天堂一区二区在线免费观看| 99久久99久久精品免费观看| 国产欧美精品一区| 国产乱子伦一区二区三区国色天香| 91福利在线免费观看| 国产精品国产精品国产专区不蜜| 国产精品一二三在| 精品乱人伦小说| 免费看欧美女人艹b| 欧美日韩国产一二三| 亚洲一区免费视频| 欧美综合久久久| 亚洲曰韩产成在线| 欧美日韩激情在线| 五月婷婷综合在线| 777亚洲妇女| 亚洲成人在线观看视频| 欧美色中文字幕| 亚洲第一福利一区| 欧美精品九九99久久| 天天综合色天天综合色h| 欧美日韩一区二区在线观看 | 久久久久99精品一区| 韩国一区二区视频| 久久久久久久久岛国免费| 国产精品性做久久久久久| 久久精品在线免费观看| 国产成人高清视频| 综合色天天鬼久久鬼色| 91麻豆免费视频| 亚洲一区自拍偷拍| 日韩一区二区在线观看视频 | 日韩欧美一区在线| 国产尤物一区二区在线| 久久女同互慰一区二区三区| 国产大陆亚洲精品国产| 国产精品成人在线观看| 欧美在线免费播放| 日本成人在线视频网站| 久久久久久久综合日本| 99免费精品在线| 亚洲福利一二三区| 日韩免费看的电影| k8久久久一区二区三区| 亚洲大型综合色站| 久久嫩草精品久久久精品| 99久久综合国产精品| 亚洲综合丁香婷婷六月香| 欧美一区二区三区免费视频| 国产成人av福利| 亚洲最大成人网4388xx| 欧美不卡一二三| 99精品偷自拍| 麻豆精品国产91久久久久久| 国产精品乱人伦| 7777精品伊人久久久大香线蕉的 | 国产精品自在欧美一区| 亚洲欧洲制服丝袜| 日韩一级黄色大片| 色综合色狠狠天天综合色| 免费观看日韩av| 亚洲视频网在线直播| 日韩欧美国产一区二区在线播放 | 亚洲综合精品自拍| 国产亚洲成av人在线观看导航| 日本韩国欧美一区二区三区| 老司机精品视频线观看86| 中文字幕一区二区在线播放| 日韩视频免费观看高清完整版在线观看 | 亚洲男女一区二区三区| xnxx国产精品| 欧美群妇大交群中文字幕| 波多野结衣一区二区三区| 久久超碰97中文字幕| 一区二区三区欧美日| 久久精品夜色噜噜亚洲a∨ | 99精品视频一区二区| 久久99国产精品久久| 亚洲国产你懂的| 日韩伦理免费电影| 久久婷婷成人综合色| 在线不卡免费欧美| 91福利资源站| 色偷偷久久人人79超碰人人澡| 国产一区二区三区电影在线观看| 日韩黄色一级片| 亚洲国产sm捆绑调教视频| 中文字幕一区视频| 国产精品视频一区二区三区不卡| 精品欧美一区二区三区精品久久| 欧美日产在线观看| 欧美日韩一区不卡| 欧美中文字幕亚洲一区二区va在线 | 国产一区在线不卡| 久久精品久久久精品美女| 丝袜国产日韩另类美女| 亚洲国产aⅴ成人精品无吗| 亚洲免费三区一区二区| 一区二区三区四区不卡在线 | 色偷偷88欧美精品久久久| 91免费观看国产| 成人激情午夜影院| 99久久99久久精品国产片果冻| 成人亚洲一区二区一| 成人av影视在线观看| 成人黄色综合网站| 91偷拍与自偷拍精品| 91美女蜜桃在线| 欧美色综合网站| 欧美精品色一区二区三区| 欧美一区二区三区影视| 日韩欧美一二三四区| 久久久久久99精品| 国产精品色噜噜| 亚洲综合精品久久| 日本午夜一区二区| 国产一二三精品| 97久久精品人人澡人人爽| 色哟哟日韩精品| 欧美一区二区视频在线观看2020| 欧美va日韩va| 中文字幕日韩一区| 亚洲香肠在线观看| 久久精品72免费观看| 成人免费毛片aaaaa**| 91性感美女视频| 3d成人动漫网站| 国产人伦精品一区二区| 国产精品理论在线观看| 一区二区三区免费网站| 久久精品999| 99精品欧美一区二区三区小说| 91黄色免费观看| 久久午夜色播影院免费高清| 亚洲色图第一区| 久国产精品韩国三级视频| 成人动漫视频在线| 欧美一区二区在线不卡| 国产精品久久三区| 蜜桃一区二区三区四区| 成人av影院在线| 欧美一区二区在线视频| 中文字幕中文在线不卡住| 五月婷婷色综合| 99久久精品免费看| 精品蜜桃在线看| 亚洲一区二区综合| 国产凹凸在线观看一区二区| 欧美日韩精品一区二区三区| 国产日韩v精品一区二区| 亚洲成人av福利| www.成人网.com| 久久人人97超碰com| 日韩国产欧美一区二区三区| 高清不卡一区二区在线| 91精品国产91久久综合桃花| **性色生活片久久毛片| 国产成人在线视频网址| 日韩欧美在线网站| 亚洲午夜羞羞片| 99在线精品观看| 国产欧美日韩另类一区| 奇米精品一区二区三区在线观看一| 99国产欧美另类久久久精品| 久久综合九色综合97婷婷女人| 午夜精品久久久久久不卡8050| 91污片在线观看| 国产蜜臀97一区二区三区| 精品影视av免费| 日韩丝袜情趣美女图片| 亚洲在线免费播放| 色综合久久99| 亚洲精品国产品国语在线app| 成人一级黄色片| 久久久久久**毛片大全| 国产乱码精品一区二区三区忘忧草| 欧美三级在线播放| 亚洲国产一区在线观看| 色综合色综合色综合色综合色综合 | 国产亚洲欧美日韩日本| 狠狠久久亚洲欧美| 久久久久9999亚洲精品| 国产传媒日韩欧美成人| 中文字幕不卡的av| 99精品久久免费看蜜臀剧情介绍| 国产精品久久久久久久久久久免费看| 国产乱码精品一区二区三 |