自己无知 楞是自己写了个..
写了不能白写 代码贴出来吧......以方便后来人
//根据鼠标点位置找到最近的Element
procedure TWinGraphics.fGetElement(mapX:double;mapY:double;out pElement:IElement);
var
pGraSel:IGraphicsContainerSelect;
i,SelElementCount:Integer;
pElementTemp:IElement;
pGeometry:IGeometry;
ifElementHited:WordBool;
begin
pGraSel:= self.PageLayoutControl1.PageLayout as IGraphicsContainerSelect;
pGraSel.Get_ElementSelectionCount(SelElementCount);
if SelElementCount=0 then
begin
pElementToMove:=Nil;
exit;
end;
for i := 0 to SelElementCount - 1 do
begin
pGraSel.SelectedElement(i,pElementTemp);
pElementTemp.Get_Geometry(pGeometry);
pElementTemp.HitTest(mapX,mapY,0.1,ifElementHited);
if ifElementHited then
begin
pElementToMove := pElementTemp;
pGraSel.SelectElement(pElementToMove);
exit;
end;
end;
pElementToMove:=Nil;
end;
//将选择的Element的中心点移动到指定位置
procedure TWinGraphics.fMoveElement(mapX:double;mapY:double);
var
pEnv:IEnvelope;
pGeo:IGeometry;
pt : IPoint;
begin
if pElementToMove<>Nil then //当前选中了element
begin
pElementToMove.Get_Geometry(pGeo);
pGeo.Get_Envelope(pEnv);
pt:=CoPoint.Create as IPoint;
pt.Set_X(mapX);
pt.Set_Y(mapY);
pEnv.CenterAt(pt);
pElementToMove.Set_Geometry(pEnv);
self.PageLayoutControl1.ActiveView.PartialRefresh(esriViewBackground,Nil,Nil);
end;
end;
在Pagelayoutcontrol_MouseDown消息中:
self.fGetElement(pageX,pageY,pElement);
在Pagelayoutcontrol_MouseMove消息中:
fMoveElement(pageX,pageY);
在Pagelayoutcontrol_MouseUp消息中:
pElementToMove:=Nil;