本帖最后由 crysword 于 2010-06-05 15:51:42 编辑

解决方案 »

  1.   

    _TLB 这个一般是注册了文件后,你可以Import ActiveX Control里找到相关的ActiveX控件,Install后就会有了
      

  2.   

    周日终于搞定了TLB的问题,改了好多接口。
    但是杯具的是……突然发现不知道怎么用到OLE上。
    搞了两天也没弄明白。哎。各位大哥有知道怎么把VisioApplication和OLE对象联系起来吗?
      

  3.   

    先註冊TLB的OCX,然後再用OLE方式去操作(一般代碼要根據錄製的宏來重新改寫可可)
      

  4.   

    抽出時間,幫你寫了個小demo:做开发前,要安装visio,再delphi中安装visio控件。安装成功后,控件名为drawingcontrol。      1.调用visio自带的菜单。      建一个菜单项,name为window1,将窗体的windowmenu改成window1也就是之前命名的菜单。这样visio自带的一些方法就可以被我们所用。不用再另外开发了。     2.建立空白页。     drawingcontrol1.src:='';    3.网格,标尺。    self.DrawingControl1.Window.ShowGrid:=0;//去掉网格
        self.DrawingControl1.Window.ShowRulers:=0;//去掉标尺   4.可选择绘图类型的页面。   到visio安装目录下,拷贝所需要的*.VST文件,放在应用程序目录下。通过下列代码创建带有图形的页面。  appath:=extractfilepath(application.ExeName);
      self.DrawingControl1.Src:=appath+'\'+'MAP3D_M.VST';  5.打开文件。        if self.OpenDialog1.Execute then
           begin
              self.DrawingControl1.Src:=OpenDialog1.FileName;
         end;6.保存文件。   if self.SaveDialog1.Execute then
      begin
      DrawingControl1.Document.SaveAs(SaveDialog1.FileName+SaveDialog1.Filter);
      end;7.背景颜色    if self.ColorDialog1.Execute then
      begin
        DrawingControl1.Window.BackgroundColor:=ColorDialog1.Color;
        DrawingControl1.Window.BackgroundColorGradient:=ColorDialog1.Color;
      end;8.选与不选    DrawingControl1.Window.SelectAll;全选   DrawingControl1.Window.SelectAll; 全不选9.在mouseup事件中选中某个图形,获取ID,名称。   try
      findshapes:=DrawingControl1.Window.Application.ActiveWindow.PageAsObj.SpatialSearch[X,Y,4,0.0001,4];
      edit1.Text:=inttostr(findshapes.PrimaryItem.ID);//ID
      edit2.Text:=findshapes.PrimaryItem.Characters.text;//名称
      except
        exit;
      end;10.画连接线UndoScopeID1:=DrawingControl1.Window.Application.BeginUndoScope('置于页上');
      conline:=DrawingControl1.Window.Application.ActiveWindow.PageAsObj.Drop(DrawingControl1.Window.Application.ConnectorToolDataObject,x,y);
      conline.CellsSRC[0,4,0].ResultIU:=X;
      conline.CellsSRC[0,4,1].ResultIU:=y;
      conline.CellsSRC[0,4,0].ResultIU:=X;
      conline.CellsSRC[0,4,1].ResultIU:=y;
      DrawingControl1.Window.Application.EndUndoScope(UndoScopeID1,true);