調皮↙不搗蛋的博客——歡迎光臨

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
out了  本来可以直接用select Elements工具做的  既可以移动,又可以编辑大小 汗/....
自己无知 楞是自己写了个..
写了不能白写 代码贴出来吧......以方便后来人

//根据鼠标点位置找到最近的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;

posted on 2009-09-11 11:22  調皮↙不搗蛋  阅读(1230)  评论(0编辑  收藏  举报