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

📄 dragfeedback.pas

📁 校园GIS系统——介绍校园个部门
💻 PAS
字号:
unit DragFeedback;

interface

uses
 Windows, Classes, ComObj, OleCtrls,MapObjects2_TLB, Dialogs;

type
 TDragFeedBack = class(TObject)
 public
  constructor create;
  function DragFinish(x :single; y :single):IMoRectangle;
  procedure DragMove(x :Single; y :Single);
  procedure DragStart(rect : IMoRectangle; map :TMap; x:Single ; y:single);
 end;

var
 r :Trect;
 p : IMoPoint;
 m_map :TMap;
 m_hDC :Longint;   // a DC to draw into
 m_hWnd : Longint;  // window handle
 m_xMin,m_yMin :integer;  // drag indicator
 m_xMax,m_yMax :integer;  // drag indicator
 m_xPrev,m_yPrev :integer;  //click location


implementation

{******************************************************************************}
constructor TDragFeedback.create;
begin
 inherited create;
end;


{******************************************************************************}
function  TDragFeedback.DragFinish(x :single; y :Single) :IMoRectangle;
var
 r : IMoRectangle;
begin

Windows.Rectangle (m_hDC,m_xMin,m_yMin,m_xMax,m_yMax);

 r := IMoRectangle(createOleObject('MapObjects2.Rectangle'));

 // return the rectangle
 p := IMoPoint(createOleObject('MapObjects2.Point'));
 p :=m_map.ToMapPoint(m_xMin,m_yMin);
 r.left :=p.x;
 r.Top :=p.y;

 p :=m_map.ToMapPoint(m_xMax,m_yMax);
 r.right :=p.x;
 r.Bottom :=p.y;

 result :=r;
end;


{******************************************************************************}
procedure TDragFeedBack.DragMove(x:single; y:single);
var
 xNext :single;
 yNExt :single;
begin
 xNext :=x;
 yNext :=y;

 Windows.Rectangle(m_hDC,m_xMin,m_yMin,m_xMax,m_yMax);
 m_xMin :=m_xMin + round(xNext - m_xPrev);
 m_xMax :=m_xMax + round(xNext - m_xPrev);
 m_yMin :=m_yMin + round(yNext - m_yPrev);
 m_yMax :=m_yMax + round(yNext - m_yPrev);

 Windows.Rectangle(m_hDC,m_xMin,m_yMin,m_xMax,m_yMax);
 m_xPrev :=round(xNext);
 m_yPrev :=round(yNext);

end;


{******************************************************************************}
procedure TDragFeedback.DragStart(rect : IMoRectangle; map :TMap ; x :single ; y :single);
var
 xMin,yMin :single;
 xMax,yMax :single;


begin

  m_map :=map;

   // initialize the hwnd and hdc variables
  m_hWnd :=m_map.hwnd;
  m_hDC :=GetDC(m_hWnd);
  SetROP2(m_hDC,10);  // raster op for inverting

  p :=IMoPoint(CreateOleObject('MapObjects2.point'));
  p.x :=rect.Left;
  p.y :=rect.Top;
  m_map.FromMapPoint(p,xMin,yMin);

  p.x :=rect.Right;
  p.y :=rect.Bottom;
  m_map.FromMapPoint(p,xMax,yMax);

  m_xMin :=round(xMin);
  m_yMin :=round(yMin);
  m_xMax :=round(xMax);
  m_yMax :=round(yMax);

  // draw the rectangle
  Windows.Rectangle(m_hDC,m_xMin,m_yMin,m_xMax,m_yMax);

  // remember the click position
  m_xPrev := round(x);
  m_yPrev := round(y);

end;


end.

⌨️ 快捷键说明

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