再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达
就算在我面前的是一堆灰烬,我也要用希望把它点燃:)想我吗?

开饭罗

到时候了,该吃饭了!

博客园 首页 新随笔 联系 订阅 管理

Visio的DrawingControl暴露出来很多事件,一般来说是够用了。可是有时候,我们还觉得这些事件不够用,比如说:
我们想在拖动某个形状时触发事件来处理,可是直接从drawingcontrol里面是没有这样的事件的,查了查也没有这样的事件。
于是,我可以这样做。
   Visio.Shape shape = this.axDrawingControl1.Window.Application.ActivePage.Shapes[1];
   shape.TextChanged +=new Microsoft.Office.Interop.Visio.EShape_TextChangedEventHandler(shape_TextChanged);
   shape.CellChanged +=new Microsoft.Office.Interop.Visio.EShape_CellChangedEventHandler(shape_CellChanged);

当然真正应用的时候,这个shape不能像我上面那样取,这里注册了两个事件,一个是该Shape的文本发生改变的事件,一个是Cell改变的事件,在事件处理中
  private void shape_CellChanged(Microsoft.Office.Interop.Visio.Cell Cell)
  {
   if(Cell.Name == "PinX" || Cell.Name == "PinY")
    MessageBox.Show("LocationChanged");
  }
这样,该Shape位置发生变化我们就可控了。

posted on 2004-10-18 15:31 什么都不知道 阅读(805) 评论(13)  编辑 收藏

评论

# re: 使用Visio 2003 Drawing Control开发应用(补1) 2005-01-05 14:31 zhaoxpi

请教一个问题。急,谢谢!
我用c#+visio2003开发了一个机房管理软件,但是在客户机安装完成后(程序用到的visio drawing control控件已经打包进去了),需要visio的部分运行不了,发现只有在机器上安装了一整套visio软件后才可以运行我自己的软件。请问为什么?难道客户机上必须安装整套visio吗?   

# re: 使用Visio 2003 Drawing Control开发应用(补1) 2005-01-05 19:26 什么都不知道

是的,必须安装
我在该系列中的第一篇(?)中说过这个问题。必须安装visio2003才可以,而且必须安装.net可编程支持组件(typical安装不装)
这个安装可以用脚本写出silent installation的,所以你可以放在一个安装包内,具体你可以看我从前的文章   

# 好,谢谢 2005-01-06 09:37 zhaoxpi

好,谢谢   

# re: 使用Visio 2003 Drawing Control开发应用(补1) 2005-01-06 11:47 afirst

小弟正在研究c#开发visio2003的问题,可否给一些思路呢?   

# re: 使用Visio 2003 Drawing Control开发应用(补1) 2005-01-06 11:48 afirst

或者相关的文档,我在网上查找,实在太少了。
去电脑书店,很少有卖的。如果可以我告诉你信箱,谢谢了
  

# re: 使用Visio 2003 Drawing Control开发应用(补1) 2005-01-06 18:42 什么都不知道

visio 2003能实现的(比如绘图) + visio 2003不能实现的(比如和你的业务数据库打交道),而且你不想个性化visio 2003,是想单独开发个程序,就是用这个drawing control的目的
相关的文档包括msdn都很少,我这个系列应该算是最全的了,只是我没有多少时间把他写的很详细   

# re: 使用Visio 2003 Drawing Control开发应用(补1) 2005-01-06 23:34 zhaoxpi

继续请教!谢谢!
我不想让用户使用visio自己提供的右键菜单,所以我自己创建了contextmenu,但是现在的问题是没办法扑捉到点击右键时的鼠标位置,因为drawing control内部的鼠标坐标没办法转换到winform的坐标。
请问有什么办法解决吗?   

# re: 使用Visio 2003 Drawing Control开发应用(补1) 2005-01-07 18:16 什么都不知道

   可以,比如下面你输入那个control的实例,然后是点坐标,就可以返回算完的坐标
private Point PageUnitsToPixels( ref AxMicrosoft.Office.Interop.VisOcx.AxDrawingControl axDrawingControl, double x,  double y)
{
 try
 {
  double vLeft, vTop, vWidth, vHeight;
  axDrawingControl.Window.GetViewRect( out vLeft, out vTop, out vWidth, out vHeight);
  // calculate position
  int xForm = (int) (axDrawingControl.Left + (axDrawingControl.Width/vWidth)*(x-vLeft));
  int yForm = (int) (axDrawingControl.Top + (axDrawingControl.Height/vHeight)*(vTop-y));
  return new Point( xForm, yForm );  
 }
 catch(Exception ex)
 {
  return new Point(0, 0);
 }
不过这个算法在使用visio的stencil窗口的情况下,有计算上的偏差,因为影响不是特别大,我就没有仔细研究了,应该可以实现精确定位
 re: 使用Visio 2003 Drawing Control开发应用(补1)
posted on 2005-04-05 16:28  生米煮成稀饭  阅读(2110)  评论(2)    收藏  举报