📄 dragfeedback.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 + -