Files
lserp_cs_6.0/插件库/Lskj.Visio/FrmMain.cs
T
cyf ab56a9bcf7 基线 SVN r240
SVN-Revision: r240
2025-02-06 06:46:06 +00:00

183 lines
7.8 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Interop.Visio;
using AxMicrosoft.Office.Interop.VisOcx;
namespace Lskj.Visio
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
/// <summary>
/// 模块类
/// </summary>
private class MouduleClass
{
public string MouduleId;//模块Id
public string MouduleName;//模块名称
public string MouduleDll; //模块绑定dll
}
/// <summary>
/// 连接形状(暂未用)
/// </summary>
/// <param name="shape1"></param>
/// <param name="shape2"></param>
/// <param name="connector"></param>
private static void ConnectShapes(Microsoft.Office.Interop.Visio.Shape shape1, Microsoft.Office.Interop.Visio.Shape shape2, Microsoft.Office.Interop.Visio.Shape connector)
{
Cell beginXCell = connector.get_CellsSRC(
(short)Microsoft.Office.Interop.Visio.VisSectionIndices.visSectionObject,
(short)Microsoft.Office.Interop.Visio.VisRowIndices.visRowXForm1D,
(short)Microsoft.Office.Interop.Visio.VisCellIndices.vis1DBeginX);
beginXCell.GlueTo(shape1.get_CellsSRC(
(short)Microsoft.Office.Interop.Visio.VisSectionIndices.visSectionObject,
(short)Microsoft.Office.Interop.Visio.VisRowIndices.visRowXFormOut,
(short)Microsoft.Office.Interop.Visio.VisCellIndices.visXFormPinX));
Cell endXCell = connector.get_CellsSRC(
(short)Microsoft.Office.Interop.Visio.VisSectionIndices.visSectionObject,
(short)Microsoft.Office.Interop.Visio.VisRowIndices.visRowXForm1D,
(short)Microsoft.Office.Interop.Visio.VisCellIndices.vis1DEndX);
endXCell.GlueTo(shape2.get_CellsSRC(
(short)Microsoft.Office.Interop.Visio.VisSectionIndices.visSectionObject,
(short)Microsoft.Office.Interop.Visio.VisRowIndices.visRowXFormOut,
(short)Microsoft.Office.Interop.Visio.VisCellIndices.visXFormPinX));
}
protected override void OnLoad(EventArgs e)
{
//axDrawingControl1.Window.Zoom = 0.5; //设置缩放比例
axDrawingControl1.Window.ShowScrollBars = (short)Microsoft.Office.Interop.Visio.VisScrollbarStates.visScrollBarBoth; //滚动条属性
axDrawingControl1.Window.ShowRulers = 100;//标尺
axDrawingControl1.Window.BackgroundColor = (uint)ColorTranslator.ToOle(System.Drawing.Color.White);
axDrawingControl1.Window.BackgroundColorGradient = (uint)ColorTranslator.ToOle(System.Drawing.Color.White);
axDrawingControl1.Window.ZoomBehavior = Microsoft.Office.Interop.Visio.VisZoomBehavior.visZoomVisio;
axDrawingControl1.Window.ShowPageTabs = false;
//visio 的内容是从1开始的
Microsoft.Office.Interop.Visio.Page currentPage = axDrawingControl1.Document.Pages[1];
//通过 openEx打开模板
Microsoft.Office.Interop.Visio.Document currentStencil = axDrawingControl1.Document.Application.Documents.OpenEx("D:\\ERP_CS_New\\插件库\\Lskj.Visio\\系统模块模型.vss",
(short)Microsoft.Office.Interop.Visio.VisOpenSaveArgs.visOpenDocked); //默认模具
Microsoft.Office.Interop.Visio.Shape connector = currentPage.Drop(currentStencil.Masters["连接"], 4.50, 5.50);
connector.Delete();
var targetApplication = (Microsoft.Office.Interop.Visio.Application)axDrawingControl1.Window.Application;
EventSink visioEventSink = new EventSink();
visioEventSink.AddAdvise(targetApplication, currentStencil);
visioEventSink.OnTextEdit += new Lskj.Visio.EventSink.VisioEventHandler(ShapeExitedTextEdit);
//通过实验发现用软件默认能添加箭头,是因为模版,对于没模版只有通过创建一次
}
private void button1_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Visio.Page currentPage = axDrawingControl1.Document.Pages[1];
int i = 0;
List<MouduleClass> moudules = new List<MouduleClass>();
//连接组合
List<ConnectShape> shapeConnects = new List<ConnectShape>();
foreach (Shape sp in currentPage.Shapes)
{
string strShapes = ";";
//找连接线
if (sp.FillStyle == "Connector")
{
foreach (Connect connect in sp.Connects)
{
//获取连接组合
strShapes += GetConnectShape(sp, connect.ToSheet);
}
string[] shapes = strShapes.Split(';');
ConnectShape con = new ConnectShape();
//连接线起始图形
con.StartShape = currentPage.Shapes.get_ItemFromID(Convert.ToInt32(shapes[1]));
//连接到的图形
if (!string.IsNullOrEmpty(shapes[2])) con.EndShape = currentPage.Shapes.get_ItemFromID(Convert.ToInt32(shapes[2]));
shapeConnects.Add(con);
}
if (sp.FillStyle == "基本")
{
//sp.ShapeExitedTextEdit += new EShape_ShapeExitedTextEditEventHandler(ShapeExitedTextEdit);
Cell cell1 = sp.get_CellsSRC((short)VisSectionIndices.visSectionProp, (short)0, (short)0);
Cell cell2 = sp.get_CellsSRC((short)VisSectionIndices.visSectionProp, (short)1, (short)0);
//字段属性
Cell cell3 = sp.get_CellsSRC((short)VisSectionIndices.visSectionProp, (short)2, (short)0);
MouduleClass moudule = new MouduleClass();
moudule.MouduleId = FormulaToString(cell1.Formula);
moudule.MouduleName = FormulaToString(cell2.Formula);
moudule.MouduleDll = FormulaToString(cell3.Formula);
moudules.Add(moudule);
}
}
}
/// <summary>
/// 修改模块名称事件
/// </summary>
/// <param name="shape"></param>
private void ShapeExitedTextEdit(object sender, EventArgs e)
{
Shape shapeItem = sender as Shape;
Cell cell = shapeItem.get_CellsSRC((short)VisSectionIndices.visSectionProp, (short)1, (short)0);
cell.FormulaU = "\"" + shapeItem.Text + "\"";
}
//Cell.Formula默认带两个双引号和杠,进行格式化处理
private string FormulaToString(string formula)
{
string Formula = string.Empty;
const string flag = "\"";
if (formula.Contains(flag))
{
Formula = formula.Replace(flag, "");
}
return Formula;
}
/// <summary>
/// 连接组合ID
/// </summary>
/// <param name="shape"></param>
/// <param name="toFromSheet"></param>
/// <returns></returns>
private string GetConnectShape(Shape shape, Shape toFromSheet)
{
string strShapes = string.Empty;
if (toFromSheet != null)
{
if (shape.ID != toFromSheet.ID)
{
strShapes += string.Format("{0};", toFromSheet.ID);
}
}
return strShapes;
}
//连接组合 连接线先后
public class ConnectShape
{
//起始图形
public Shape StartShape;
//连接到的图形
public Shape EndShape;
}
}
}