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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tdistancetoolclass.~pas

?? Purpose: 量距離工具 History: 2005-05-21 開發環境: delphi7+mapX 5.02.38 windows XP Sp2
?? ~PAS
字號:
{-----------------------------------------------------------------------------
 Unit Name: TDistanceToolClass
 Author:    杜長宇  junqilian@163.com
 Purpose: 實現量距離工具
 History:  2005-05-21

 開發環境: delphi7+mapX 5.02.38
            windows XP Sp2


 用法:
   1、主程序中uses ToolButtonDistance;
   2、在主程序窗體中放置ToolButtonDistance
   3、添加事件處理函數,形如:
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
    //保存原先的事件處理函數狀態
    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;

    //創建臨時圖層
    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
      //回復原先的事件處理函數狀態
      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.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情一区二区在线| 亚洲乱码国产乱码精品精的特点 | 亚洲成人综合在线| 日本一区二区三级电影在线观看| 日韩亚洲欧美在线| 制服丝袜一区二区三区| 欧美在线免费观看视频| 99国产精品一区| av不卡免费在线观看| eeuss国产一区二区三区| 欧美精品亚洲一区二区在线播放| 欧美一区二区免费视频| 日韩欧美区一区二| 久久一留热品黄| 亚洲国产成人午夜在线一区| 热久久免费视频| 久久成人av少妇免费| 精品一区二区在线视频| 国产成人鲁色资源国产91色综| 国产福利一区二区三区| 日韩午夜av电影| 亚洲午夜精品久久久久久久久| 午夜精品国产更新| 韩国v欧美v日本v亚洲v| 国产成人8x视频一区二区| 成人av动漫在线| 欧美日韩国产另类一区| 久久综合国产精品| 免费视频一区二区| 在线成人av影院| 亚洲国产一区二区三区| 欧美午夜精品久久久| 日韩欧美色综合网站| 日日嗨av一区二区三区四区| 国产99久久久国产精品潘金网站| 欧美一二三区精品| 免费人成精品欧美精品| 日韩免费观看高清完整版| 免费成人在线网站| 精品国产髙清在线看国产毛片| 亚洲色图欧洲色图| 婷婷开心激情综合| 欧美一区二区三区播放老司机| 亚洲高清在线视频| 欧美一卡2卡三卡4卡5免费| 免费成人结看片| 久久综合999| 成人午夜伦理影院| 日韩欧美一二区| 国产成人免费视频网站高清观看视频| 日本一区二区三区在线不卡| www.欧美日韩| 亚洲电影在线播放| 欧美一级片免费看| 国产激情精品久久久第一区二区| 国产欧美日本一区视频| 972aa.com艺术欧美| 五月激情综合网| 精品99一区二区三区| 成人免费视频app| 亚洲一区日韩精品中文字幕| 99久久99久久精品免费看蜜桃| 一区二区三区日本| 91免费视频观看| 日本成人在线一区| 色88888久久久久久影院按摩| 久久午夜电影网| 91浏览器打开| 蜜桃av一区二区在线观看| 欧洲精品在线观看| 日本网站在线观看一区二区三区| 国产午夜精品理论片a级大结局| 男人的j进女人的j一区| 国产精品天美传媒沈樵| 成人永久aaa| 亚洲gay无套男同| 亚洲国产精品99久久久久久久久| 色菇凉天天综合网| 久久er精品视频| 一区二区三区日本| 久久精品一区二区三区av| 在线这里只有精品| 国产一区三区三区| 久久精品视频一区| 欧美群妇大交群中文字幕| 懂色中文一区二区在线播放| 午夜国产不卡在线观看视频| 国产精品九色蝌蚪自拍| 99视频热这里只有精品免费| 美女视频一区二区三区| 亚洲黄网站在线观看| 中文子幕无线码一区tr| 日韩欧美亚洲国产另类| 欧美日韩一区不卡| 日韩成人一区二区| 一区二区理论电影在线观看| 欧美韩国一区二区| 精品久久久久久久久久久久久久久| 国内精品免费**视频| 日本系列欧美系列| 亚洲成人第一页| 亚洲激情图片一区| 亚洲视频一区在线观看| 国产性色一区二区| 久久综合色8888| 日韩精品在线一区二区| 欧美久久久久久久久中文字幕| 色播五月激情综合网| av在线不卡网| 97超碰欧美中文字幕| 成人av在线播放网站| 欧美久久免费观看| 欧美日韩午夜影院| 欧美性极品少妇| 色成人在线视频| 欧美在线观看禁18| 欧美综合一区二区| 欧美亚洲国产怡红院影院| 色中色一区二区| 久久99精品久久久久久国产越南| 日本不卡视频在线| 美国十次了思思久久精品导航| 亚洲成av人片在www色猫咪| 亚洲小说春色综合另类电影| 亚洲尤物视频在线| 天天操天天综合网| 婷婷六月综合网| 久88久久88久久久| 国产精一区二区三区| 日韩电影免费在线看| 日本不卡高清视频| 国产伦精一区二区三区| 懂色一区二区三区免费观看 | 日韩精品一二区| 理论电影国产精品| 国产精品一区免费在线观看| 国产不卡免费视频| 色综合天天综合网国产成人综合天| 偷窥国产亚洲免费视频| 免费日本视频一区| 国产剧情av麻豆香蕉精品| 不卡欧美aaaaa| 在线观看免费成人| 欧美大片拔萝卜| 日本一二三不卡| 亚洲国产中文字幕| 久久99精品网久久| av电影在线观看完整版一区二区| 在线日韩一区二区| 精品久久久久久久久久久久久久久 | 免费一级片91| 成人在线综合网| 欧美三区免费完整视频在线观看| 日韩久久免费av| 亚洲乱码中文字幕| 精品一区二区三区免费视频| www.成人网.com| 日韩视频免费观看高清完整版在线观看| 久久久久久久久伊人| 26uuu另类欧美亚洲曰本| 亚洲色图一区二区| 韩国欧美一区二区| 欧美性xxxxx极品少妇| 久久免费国产精品| 午夜精品123| www.av亚洲| 久久久久国产免费免费| 亚洲国产成人精品视频| 成人av免费在线播放| 日韩欧美国产小视频| 亚洲国产视频a| av电影在线观看一区| 久久一区二区三区国产精品| 亚洲第一福利一区| 91亚洲大成网污www| 久久精品一区二区三区不卡| 日本vs亚洲vs韩国一区三区| 91美女福利视频| 国产欧美日韩三级| 久久99精品久久久久久久久久久久| 欧美性一区二区| 亚洲欧美日本在线| 亚洲一区视频在线| 99热在这里有精品免费| 国产亚洲婷婷免费| 久久99热99| 日韩欧美一区二区在线视频| 一区二区三区在线播放| av网站免费线看精品| 国产色爱av资源综合区| 精品一区二区三区蜜桃| 在线成人av影院| 亚洲成av人片在www色猫咪| 色狠狠桃花综合| 亚洲激情中文1区| 一本到高清视频免费精品| 国产精品麻豆欧美日韩ww| 国产成人综合在线| 国产欧美一区二区在线观看| 激情综合色综合久久|