private void NewPage(string pagename, Color back, int width, int height) { int count = tabMain.TabPages.Count; for (int j = count - 1; j >= 1; j--) { tabMain.TabPages.RemoveAt(j); } VisualGraph.VisualGraph vs = new VisualGraph.VisualGraph(); vs.Name = pagename; vs.Width = width; vs.Height = height; vs.BackGroundColor = back; vs.MouseClick += new MouseEventHandler(vs_MouseClick); TabPage page = new TabPage(); page.Name = pagename; page.Text = pagename; page.Tag = pagename; page.Controls.Add(vs); tabMain.TabPages.Add(page); tabMain.SelectTab(pagename); }
//添加图元动作属性的注册 public void RegisterEvent() { //遍历每个画面 int count = tabMain.TabPages.Count; for (int i = 0; i < count; i++) { VisualGraph.VisualGraph drawarea = (VisualGraph.VisualGraph)tabMain.TabPages[i].Controls[0]; int n = drawarea.ObjList.Count(); //遍历每个画面的图元 for (int j = 0; j < n; j++) { DrawObject o = (DrawObject)drawarea.ObjList[j]; //查找关联了变量的属性,并注册动画函数到变量事件 if (o.xName != "" || o.yName != "" || o.widthName != "" || o.heightName != "" || o.textName != "" || o.visibleName != "") { foreach (ChannelManage ch in ChannelList) { foreach (DeviceManage dev in ch.AllDevList) { foreach (Variable var in dev.AllVarList) { if (var.Name.Equals(o.xName) || var.Name.Equals(o.yName) || var.Name.Equals(o.widthName) || var.Name.Equals(o.heightName) || var.Name.Equals(o.textName) || var.Name.Equals(o.visibleName)) { var.Datachanged += new Variable.DataEventHandler(o.SetAction); } } } } } } } }
protected void GetActivedObjectType(String s) { if (tabMain.TabPages.Count == 0) { return; } TabPage page = tabMain.SelectedTab; VisualGraph.VisualGraph drawArea = (VisualGraph.VisualGraph)page.Controls[0]; if (s == null) { drawArea.ActivedObjType = Global.DrawType.POINTER; } if (s == "Line") { drawArea.ActivedObjType = Global.DrawType.DrawLine; } if (s == "Retangle") { drawArea.ActivedObjType = Global.DrawType.DrawRectangle; } if (s == "Ellipse") { drawArea.ActivedObjType = Global.DrawType.DrawEllipse; } if (s == "Text") { drawArea.ActivedObjType = Global.DrawType.DrawText; } if (s == "Picture") { drawArea.ActivedObjType = Global.DrawType.DrawPic; } }
private void toolStripButton12_Click(object sender, EventArgs e) { TabPage page = tabMain.SelectedTab; VisualGraph.VisualGraph drawArea = (VisualGraph.VisualGraph)page.Controls[0]; drawArea.ObjList.MoveSelectionToBack(); drawArea.Invalidate(); }
void vs_MouseClick(object sender, MouseEventArgs e) { VisualGraph.VisualGraph drawArea = (VisualGraph.VisualGraph)sender; if (e.Button == MouseButtons.Left) { //用户选择的是图形对象 if (drawArea.ObjList.SelectionCount > 0) { //添加基本属性 DrawObject obj = drawArea.ObjList.GetSelectedObject(0); this.propertyGrid1.SelectedObject = obj; //添加动作属性,根据选中的图元获取其图元类型,并按图元类型进行相应动作属性的添加。 if (obj.ObjectType == Global.DrawType.DrawLine || obj.ObjectType == Global.DrawType.DrawRectangle || obj.ObjectType == Global.DrawType.DrawEllipse || obj.ObjectType == Global.DrawType.DrawPic) { propertyGridEx1.ShowCustomProperties = true; propertyGridEx1.Item.Clear(); propertyGridEx1.Item.Add("X位置", obj.xName, false, "位置", "水平位置", true); propertyGridEx1.Item[propertyGridEx1.Item.Count - 1].OnClick += this.CustomActionItem_OnClick; propertyGridEx1.Item.Add("Y位置", obj.yName, false, "位置", "垂直位置", true); propertyGridEx1.Item[propertyGridEx1.Item.Count - 1].OnClick += this.CustomActionItem_OnClick; propertyGridEx1.Item.Add("宽度", obj.widthName, false, "尺寸", "水平尺寸", true); propertyGridEx1.Item[propertyGridEx1.Item.Count - 1].OnClick += this.CustomActionItem_OnClick; propertyGridEx1.Item.Add("高度", obj.heightName, false, "尺寸", "垂直尺寸", true); propertyGridEx1.Item[propertyGridEx1.Item.Count - 1].OnClick += this.CustomActionItem_OnClick; propertyGridEx1.Item.Add("可见", obj.visibleName, false, "视觉", "是否可见", true); propertyGridEx1.Item[propertyGridEx1.Item.Count - 1].OnClick += this.CustomActionItem_OnClick; propertyGridEx1.Refresh(); } else if (obj.ObjectType == Global.DrawType.DrawText) { propertyGridEx1.ShowCustomProperties = true; propertyGridEx1.Item.Clear(); propertyGridEx1.Item.Add("X位置", obj.xName, false, "位置", "水平位置", true); propertyGridEx1.Item[propertyGridEx1.Item.Count - 1].OnClick += this.CustomActionItem_OnClick; propertyGridEx1.Item.Add("Y位置", obj.yName, false, "位置", "垂直位置", true); propertyGridEx1.Item[propertyGridEx1.Item.Count - 1].OnClick += this.CustomActionItem_OnClick; propertyGridEx1.Item.Add("宽度", obj.widthName, false, "尺寸", "水平尺寸", true); propertyGridEx1.Item[propertyGridEx1.Item.Count - 1].OnClick += this.CustomActionItem_OnClick; propertyGridEx1.Item.Add("高度", obj.heightName, false, "尺寸", "垂直尺寸", true); propertyGridEx1.Item[propertyGridEx1.Item.Count - 1].OnClick += this.CustomActionItem_OnClick; propertyGridEx1.Item.Add("可见", obj.visibleName, false, "视觉", "是否可见", true); propertyGridEx1.Item[propertyGridEx1.Item.Count - 1].OnClick += this.CustomActionItem_OnClick; //propertyGridEx1.Item.Add("填充色", sfillName, false, "填充色", "填充色", true); propertyGridEx1.Item[propertyGridEx1.Item.Count - 1].OnClick += this.CustomActionItem_OnClick; propertyGridEx1.Item.Add("文本", obj.textName, false, "文本", "文本", true); propertyGridEx1.Item[propertyGridEx1.Item.Count - 1].OnClick += this.CustomActionItem_OnClick; propertyGridEx1.Item.Add("文本格式", obj.Format, false, "文本", "文本格式", true); propertyGridEx1.Refresh(); } } else//图元库控件画面 { this.propertyGrid1.SelectedObject = drawArea; } } }
} //public void StartListen() //根据请求的formid,这里为page1~n,即对应画面里的名称,获得该page里相关文本的xml格式数据,用以返回给web显示。 //本程序中,其他图元的相关代码被注释掉了,需要的话,可以根据需要继续完善其他图元的相关信息。 //返回给客户的XML数据格式为:,其中id为图元中属性id值,建议采用数字作为id //<objectlist> //<object id="1"> //<value>12.3</value> //</object> //<object id="2"> //<value>45.6</value> //</object> //</objectlist> public string GetFormWebXml(string formid) { string xml = "<?xml version=\" & chr(34) & \"1.0\" & chr(34) & \"?><empty/></xml>"; int nCount = tabMain.TabPages.Count; for (int k = 0; k < nCount; k++) { VisualGraph.VisualGraph drawArea = (VisualGraph.VisualGraph)tabMain.TabPages[k].Controls[0]; string s = tabMain.TabPages[k].Text; if (s.Equals(formid)) { using (StringWriter sw = new StringWriter()) { XmlTextWriter writer = new XmlTextWriter(sw); writer.WriteStartElement("objectlist"); int n = drawArea.ObjList.Count(); for (int i = 0; i < n; i++) { DrawObject o = drawArea.ObjList[i]; switch (o.ObjectType) { case Global.DrawType.DrawText: //文本 DrawText m = (DrawText)o; //xml make if (m.textName != "") { writer.WriteStartElement("object"); writer.WriteAttributeString("id", m.ID.ToString()); writer.WriteStartElement("value"); writer.WriteString(m.CurText); writer.WriteEndElement(); writer.WriteEndElement(); } break; /* * case 7://图片 * DrawPic m7 = (DrawPic)o * writer.WriteStartElement("object"); * writer.WriteAttributeString("id", m7.Id); * writer.WriteEndElement(); * break;*/ } } writer.WriteEndElement(); writer.Close(); xml = sw.ToString(); sw.Close(); } } } return(xml); }
private void button1_Click(object sender, EventArgs e) { TabPage page = tabMain.SelectedTab;//获取当前画面 VisualGraph.VisualGraph drawArea = (VisualGraph.VisualGraph)page.Controls[0]; BackColorForm form = new BackColorForm(); form.backColor = drawArea.BackGroundColor; if (form.ShowDialog() == DialogResult.OK) { drawArea.BackGroundColor = form.backColor; drawArea.Invalidate(); } }
void vs_MouseClick(object sender, MouseEventArgs e) { VisualGraph.VisualGraph drawArea = (VisualGraph.VisualGraph)sender; if (e.Button == MouseButtons.Left) { if (drawArea.ObjList.SelectionCount > 0) { DrawObject obj = drawArea.ObjList.GetSelectedObject(0); this.propertyGrid1.SelectedObject = obj; } else { this.propertyGrid1.SelectedObject = drawArea; } } }
private void SavePagesAndDevices() { //save pages form try { int count = tabMain.TabPages.Count; for (int i = 0; i < count; i++) { VisualGraph.VisualGraph drawArea = (VisualGraph.VisualGraph)tabMain.TabPages[i].Controls[0]; string s = myProjectPath + tabMain.TabPages[i].Text + ".page"; using (FileStream fs = new FileStream(s, FileMode.Create)) { if (fs != null) { BinaryFormatter BinaryWrite = new BinaryFormatter(); BinaryWrite.Serialize(fs, drawArea.ObjList); BinaryWrite.Serialize(fs, drawArea.BackGroundColor); fs.Close(); } } } } catch (System.Exception ex) { MessageBox.Show("Exception:" + ex.ToString(), " Save Page error."); } try { foreach (ChannelManage ch in ChannelList) { string s = myProjectPath + ch.ChannelName + ".dev"; using (FileStream fs = new FileStream(s, FileMode.Create)) { if (fs != null) { BinaryFormatter BinaryWrite = new BinaryFormatter(); BinaryWrite.Serialize(fs, ch); fs.Close(); } } } } catch (Exception err) { MessageBox.Show("Exception:" + err.ToString(), " Save device error."); } }
private void OpenPage(string pagename) { string s = myProjectPath + pagename + ".page"; try { using (FileStream fs = new FileStream(s, FileMode.Open)) { if (fs != null) { //open pages form VisualGraph.VisualGraph vs = new VisualGraph.VisualGraph(); vs.Name = pagename; vs.Width = 800; vs.Height = 480; vs.MouseClick += new MouseEventHandler(vs_MouseClick); vs.MouseDoubleClick += new MouseEventHandler(vs_MouseDoubleClick); TabPage page = new TabPage(); page.Name = pagename; page.Text = pagename; page.Tag = pagename; page.Controls.Add(vs); tabMain.TabPages.Add(page); tabMain.SelectTab(pagename); BinaryFormatter BinaryRead = new BinaryFormatter(); vs.ObjList = (ObjList)BinaryRead.Deserialize(fs); //设置每个图元的lock和runmode属性 int count = vs.ObjList.Count(); for (int i = 0; i < count; i++) { DrawObject o = (DrawObject)vs.ObjList[i]; o.RunMode = true; o.Lock = true; } vs.BackGroundColor = (Color)BinaryRead.Deserialize(fs);; fs.Close(); vs.Invalidate(); } } } catch (System.Exception ex) { MessageBox.Show("Exception:" + ex.ToString(), " Save Page error."); } }
//新建一个page private void NewPage(string pagename, Color back, int width, int height) { VisualGraph.VisualGraph vs = new VisualGraph.VisualGraph(); vs.Name = pagename; vs.Width = width; vs.Height = height; vs.BackGroundColor = back; vs.MouseClick += new MouseEventHandler(vs_MouseClick); //vs.ResizeCanvase(); TabPage page = new TabPage(); page.Name = pagename; page.Text = pagename; page.Tag = pagename; page.Controls.Add(vs); tabMain.TabPages.Add(page); tabMain.SelectTab(pagename); }
public void DealEventProperty(bool bClick, object sender, MouseEventArgs e) { VisualGraph.VisualGraph drawArea = (VisualGraph.VisualGraph)sender; if (e.Button == MouseButtons.Left) { //取得鼠标位置 Point point = new Point(e.X, e.Y); DrawObject gp = drawArea.ObjList.GetSelectedObject(point); if (gp != null)//选中了 { if (bClick) { if (gp.Click != "")//deal the click event { string[] strContent = gp.Click.Split('+'); if (strContent[0].Equals("打开画面")) { tabMain.SelectTab(strContent[1]); } else if (strContent[0].Equals("写变量值")) { WritetoDevice(strContent[1], strContent[2]); } } } else { if (gp.DoubleClick != "")//deal the dclick event { string[] strContent = gp.Click.Split('+'); if (strContent[0].Equals("打开画面")) { tabMain.SelectTab(strContent[1]); } else if (strContent[0].Equals("写变量值")) { WritetoDevice(strContent[1], strContent[2]); } } } } } }
//动作属性参数值变化事件响应函数 void propertyGridEx1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) { TabPage page = tabMain.SelectedTab;//获取当前画面 VisualGraph.VisualGraph drawArea = (VisualGraph.VisualGraph)page.Controls[0]; if (drawArea.ObjList.SelectionCount > 0) { //获得当前对象 DrawObject obj = drawArea.ObjList.GetSelectedObject(0); switch (e.ChangedItem.Label.ToString())//根据改变的动作属性值修改图元对应的动作属性名称 { case "可见": obj.visibleName = e.ChangedItem.Value.ToString(); break; case "X位置": obj.xName = e.ChangedItem.Value.ToString(); break; case "Y位置": obj.yName = e.ChangedItem.Value.ToString(); break; case "宽度": obj.widthName = e.ChangedItem.Value.ToString(); break; case "高度": obj.heightName = e.ChangedItem.Value.ToString(); break; case "文本": obj.textName = e.ChangedItem.Value.ToString(); break; case "文本格式": obj.Format = e.ChangedItem.Value.ToString(); break; } } }
//事件属性参数值变化响应函数 void propertyGridEx2_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) { TabPage page = tabMain.SelectedTab; //获取当前画面 VisualGraph.VisualGraph drawArea = (VisualGraph.VisualGraph)page.Controls[0]; if (drawArea.ObjList.SelectionCount > 0) { //获得当前对象 DrawObject obj = drawArea.ObjList.GetSelectedObject(0); switch (e.ChangedItem.Label.ToString()) { case "鼠标单击": obj.Click = e.ChangedItem.Value.ToString(); break; case "鼠标双击": obj.DoubleClick = e.ChangedItem.Value.ToString(); break; } } }
private void OpenPage(string pagename) { string s = myProjectPath + pagename + ".page"; try { //open pages form VisualGraph.VisualGraph vs = new VisualGraph.VisualGraph(); vs.Name = pagename; vs.Width = 800; vs.Height = 480; vs.Click += new EventHandler(vs_Click); vs.DoubleClick += new EventHandler(vs_DoubleClick); vs.MouseDown += new MouseEventHandler(vs_MouseDown); vs.MouseUp += new MouseEventHandler(vs_MouseUp); //建立监控画面 FormEdit page = new FormEdit(); page.Name = pagename; page.Text = pagename; page.Controls.Add(vs); editFormList.Add(page); FormState formState = new FormState(); formState.Maximize(page); vs.LoadFromXml(s); //设置每个图元的lock和runmode属性 int count = vs.ObjList.Count(); for (int i = 0; i < count; i++) { DrawObject o = (DrawObject)vs.ObjList[i]; o.RunMode = true; o.Lock = true; } vs.Invalidate(); } catch (System.Exception ex) { MessageBox.Show("Exception:" + ex.ToString(), " Open Page error."); } }
public override void Draw(Graphics g, VisualGraph drawArea) { SolidBrush drawBrush = new SolidBrush(Color.Black); Pen fontPen = new Pen(Color, PenWidth); if (_stringFormat == null) { _stringFormat = new StringFormat(); _stringFormat.Alignment = StringAlignment.Center; _stringFormat.LineAlignment = StringAlignment.Center;; } Font drawFont = new Font("Arial", 12); g.DrawString(CurText, drawFont, drawBrush, ShapeRect, _stringFormat); if (_Show) { g.DrawRectangle(fontPen, DrawRectangle.GetNormalizedRectangle(ShapeRect)); } drawFont.Dispose(); drawBrush.Dispose(); fontPen.Dispose(); }
private void OpenPage(string pagename) { string s = myProjectPath + pagename + ".page"; try { //open pages form VisualGraph.VisualGraph vs = new VisualGraph.VisualGraph(); vs.Name = pagename; vs.Width = 800; vs.Height = 480; //建立监控画面 FormEdit page = new FormEdit(); page.Name = pagename; page.Text = pagename; page.Controls.Add(vs); editFormList.Add(page); vs.LoadFromXml(s); //设置每个图元的lock和runmode属性 int count = vs.ObjList.Count(); for (int i = 0; i < count; i++) { DrawObject o = (DrawObject)vs.ObjList[i]; o.RunMode = true; o.Lock = true; } vs.Invalidate(); //select first page FormEdit edit = (FormEdit)editFormList[0]; edit.Show(); edit.BringToFront(); } catch (System.Exception ex) { MessageBox.Show("Exception:" + ex.ToString(), " Open Page error."); } }
private void OpenPage(string pagename) { string s = myProjectPath + pagename + ".page"; try { //open pages form VisualGraph.VisualGraph vs = new VisualGraph.VisualGraph(); vs.Name = pagename; vs.Width = 800; vs.Height = 480; vs.MouseClick += new MouseEventHandler(vs_MouseClick); vs.MouseDoubleClick += new MouseEventHandler(vs_MouseDoubleClick); TabPage page = new TabPage(); page.Name = pagename; page.Text = pagename; page.Tag = pagename; page.Controls.Add(vs); tabMain.TabPages.Add(page); tabMain.SelectTab(pagename); vs.LoadFromXml(s); //设置每个图元的lock和runmode属性 int count = vs.ObjList.Count(); for (int i = 0; i < count; i++) { DrawObject o = (DrawObject)vs.ObjList[i]; o.RunMode = true; o.Lock = true; } vs.Invalidate(); } catch (System.Exception ex) { MessageBox.Show("Exception:" + ex.ToString(), " Save Page error."); } }
public virtual void OnMouseDown(VisualGraph drawArea, MouseEventArgs e) { }
public void Clone(VisualGraph drawArea) { int n = tempList.Count; Point point; for (int i = 0; i < n; i++) { DrawObject o = (DrawObject)tempList[i]; point = new Point(o.ShapeRect.X + 10, o.ShapeRect.Y + 10); switch (o.ObjectType) { case Global.DrawType.DrawEllipse: DrawEllipse dp = new DrawEllipse(point, drawArea); dp.Selected = false; dp.ShapeRect = new Rectangle(point.X, point.Y, o.ShapeRect.Width, o.ShapeRect.Height); dp.PenWidth = o.PenWidth; dp.Color = o.Color; objList.Add(dp); break; case Global.DrawType.DrawLine: DrawLine dl = new DrawLine(point, drawArea); dl.Selected = false; dl.StartPoint = point; dl.EndPoint = new Point(point.X + o.ShapeRect.Width, point.Y + o.ShapeRect.Height); dl.Width = o.ShapeRect.Width; dl.Height = o.ShapeRect.Height; dl.PenWidth = o.PenWidth; dl.Color = o.Color; objList.Add(dl); break; case Global.DrawType.DrawRectangle: DrawRectangle dr = new DrawRectangle(point, drawArea); dr.Selected = false; dr.ShapeRect = new Rectangle(point.X, point.Y, o.ShapeRect.Width, o.ShapeRect.Height); dr.PenWidth = o.PenWidth; dr.Color = o.Color; objList.Add(dr); break; case Global.DrawType.DrawText: DrawText dt = new DrawText(point, drawArea); dt.Selected = false; dt.ShapeRect = new Rectangle(point.X, point.Y, o.ShapeRect.Width, o.ShapeRect.Height); dt.PenWidth = o.PenWidth; dt.Color = o.Color; objList.Add(dt); break; case Global.DrawType.DrawPic: DrawPic oldpic = (DrawPic)o; DrawPic dpic = new DrawPic(point, drawArea); Rectangle ret = new Rectangle(point.X, point.Y, oldpic.ShapeRect.Width, oldpic.ShapeRect.Height); dpic.ShapeRect = ret; dpic.TheImage = oldpic.TheImage; dpic.Selected = false; objList.Add(dpic); break; } } drawArea.ActivedObjType = Global.DrawType.POINTER; }
public void UpdatePage() { VisualGraph.VisualGraph vs = (VisualGraph.VisualGraph)tabMain.SelectedTab.Controls[0]; vs.Invalidate(); }
public void UpdatePage() { VisualGraph.VisualGraph vs = (VisualGraph.VisualGraph)SelectedPage.Controls[0]; vs.Invalidate(); }
public virtual void Draw(Graphics g, VisualGraph drawArea) { }
public void DealEventProperty(bool bClick, object sender, EventArgs e) { VisualGraph.VisualGraph drawArea = (VisualGraph.VisualGraph)sender; //取得鼠标位置 Point point = new Point(MousePosition.X, MousePosition.Y); DrawObject gp = drawArea.ObjList.GetSelectedObject(point); if (gp != null)//选中了 { if (bClick) { if (gp.Click != "")//deal the click event { string[] strContent = gp.Click.Split('+'); if (strContent[0].Equals("打开画面")) { try { int n = editFormList.Count; for (int i = 0; i < n; i++) { if (((FormEdit)editFormList[i]).Text.Equals(strContent[1])) { SelectedPage.SendToBack(); FormState state = new FormState(); state.Maximize((FormEdit)editFormList[i]); ((FormEdit)editFormList[i]).Show(); ((FormEdit)editFormList[i]).BringToFront(); SelectedPage = editFormList[i]; nCurrentForm = i; break; } } } catch (System.Exception ex) { MessageBox.Show(ex.Message, "Error"); } } else if (strContent[0].Equals("写变量值")) { WritetoDevice(strContent[1], strContent[2]); } } } else { if (gp.DoubleClick != "")//deal the dclick event { string[] strContent = gp.Click.Split('+'); if (strContent[0].Equals("打开画面")) { try { int n = editFormList.Count; for (int i = 0; i < n; i++) { if (((FormEdit)editFormList[i]).Text.Equals(strContent[1])) { FormState state = new FormState(); state.Maximize((FormEdit)editFormList[i]); ((FormEdit)editFormList[i]).Show(); ((FormEdit)editFormList[i]).BringToFront(); SelectedPage = editFormList[i]; break; } } } catch (System.Exception ex) { MessageBox.Show(ex.Message, "Error"); } } else if (strContent[0].Equals("写变量值")) { WritetoDevice(strContent[1], strContent[2]); } } } } }
public override void OnMouseDown(VisualGraph drawArea, MouseEventArgs e) { Point point = new Point(e.X, e.Y); selectMode = SelectionMode.None; int n = drawArea.ObjList.SelectionCount; for (int i = n - 1; i >= 0; i--) { DrawObject o = drawArea.ObjList.GetSelectedObject(i); int handleNumber = o.HitTest(point); if (handleNumber > 0) { selectMode = SelectionMode.Size; resizedObject = o; resizedObjectHandle = handleNumber; drawArea.ObjList.UnselectAll(); o.Selected = true; break; } } if (selectMode == SelectionMode.None) { int m = drawArea.ObjList.Count(); DrawObject o = null; for (int i = m - 1; i >= 0; i--) { if (drawArea.ObjList[i].HitTest(point) == 0) { o = drawArea.ObjList[i]; break; } } if (o != null) { selectMode = SelectionMode.Move; if ((Control.ModifierKeys & Keys.Control) == 0 && !o.Selected) { drawArea.ObjList.UnselectAll(); } o.Selected = true; //»Ñ¡Ôñ±ß¿ò drawArea.Cursor = Cursors.SizeAll; } } if (selectMode == SelectionMode.None) { if ((Control.ModifierKeys & Keys.Control) == 0) { drawArea.ObjList.UnselectAll(); } selectMode = SelectionMode.NetSelection; drawArea.DrawNetRectangle = true; } lastPoint.X = point.X; lastPoint.Y = point.Y; startPoint.X = point.X; startPoint.Y = point.Y; drawArea.Capture = true; drawArea.NetRectangle = GetNormalizedRectangle(startPoint, lastPoint); drawArea.Refresh(); }
public override void OnMouseMove(VisualGraph drawArea, MouseEventArgs e) { Point point = new Point(e.X, e.Y); if (e.Button == MouseButtons.None) { Cursor cursor = null; for (int i = drawArea.ObjList.Count() - 1; i >= 0; i--) { int n = drawArea.ObjList[i].HitTest(point); if (n > 0) { cursor = drawArea.ObjList[i].GetHandleCursor(n); break; } } if (cursor == null) { cursor = Cursors.Default; } drawArea.Cursor = cursor; return; } if (e.Button != MouseButtons.Left) { return; } int dx = point.X - lastPoint.X; int dy = point.Y - lastPoint.Y; lastPoint.X = point.X; lastPoint.Y = point.Y; if (selectMode == SelectionMode.Size) { if (resizedObject != null) { resizedObject.MoveHandleTo(point, resizedObjectHandle); drawArea.Refresh(); } } if (selectMode == SelectionMode.Move) { int n = drawArea.ObjList.SelectionCount; for (int i = n - 1; i >= 0; i--) { drawArea.ObjList.GetSelectedObject(i).Move(dx, dy); } DrawObject l = (DrawObject)drawArea.ObjList.GetSelectedObject(point); if (l != null) { drawArea.Cursor = Cursors.SizeAll; } drawArea.Refresh(); } if (selectMode == SelectionMode.NetSelection) { drawArea.NetRectangle = GetNormalizedRectangle(startPoint, lastPoint); drawArea.Refresh(); return; } }
void ReadModbusData(modbusrtu ModbusRtu, byte SlaveAddr, ushort ModbusAddr, DataType datatype, ushort nNumber, ref string[] sValue) { ushort ntype = (ushort)((ModbusAddr / 10000)); ushort naddr = (ushort)((ModbusAddr % 10000)); naddr = (ushort)(naddr - 1); switch (ntype) { case 0: //DO ushort[] coils = new ushort[nNumber]; bool bcoils = ModbusRtu.SendFc1(SlaveAddr, naddr, nNumber, ref coils); if (bcoils) { for (int i = 0; i < nNumber; i++) { sValue[i] = coils[i].ToString(); } } else { for (int i = 0; i < nNumber; i++) { sValue[i] = "0"; } } break; case 1: //DI ushort[] dis = new ushort[nNumber]; bool bdis = ModbusRtu.SendFc2(SlaveAddr, naddr, nNumber, ref dis); if (bdis) { for (int i = 0; i < nNumber; i++) { sValue[i] = dis[i].ToString(); } } else { for (int i = 0; i < nNumber; i++) { sValue[i] = "0"; } } break; case 4: //AO if (datatype.Equals("uint16")) { ushort[] registerhold = new ushort[nNumber]; bool bhold = ModbusRtu.SendFc3(SlaveAddr, naddr, nNumber, ref registerhold); if (bhold) { for (int i = 0; i < nNumber; i++) { sValue[i] = registerhold[i].ToString(); } } else { for (int i = 0; i < nNumber; i++) { sValue[i] = "0"; } } } else if (datatype.Equals("int16")) { ushort[] registerhold = new ushort[nNumber]; bool bhold = ModbusRtu.SendFc3(SlaveAddr, naddr, nNumber, ref registerhold); if (bhold) { for (int i = 0; i < nNumber; i++) { sValue[i] = ((short)registerhold[i]).ToString(); } } else { for (int i = 0; i < nNumber; i++) { sValue[i] = "0"; } } } else if (datatype.Equals("float")) { ushort[] registerhold = new ushort[2 * nNumber]; bool bhold = ModbusRtu.SendFc3(SlaveAddr, naddr, (ushort)(2 * nNumber), ref registerhold); if (bhold) { for (int i = 0; i < nNumber; i++) { int intValue = (int)registerhold[i * 2 + 1]; intValue <<= 16; Fc4(SlaveAddr, naddr, (ushort)(2 * nNumber), ref registerinput); if (binput) { for (int i = 0; i < nNumber; i++) { int intValue = (int)registerinput[2 * i + 1]; intValue <<= 16; intValue += (int)registerinput[2 * i + 0]; sValue[i] = BitConverter.ToSingle(BitConverter.GetBytes(intValue), 0).ToString(); } } else { for (int i = 0; i < nNumber; i++) { sValue[i] = "0"; } } } else if (datatype.Equals("int32")) { ushort[] registerinput = new ushort[2 * nNumber]; bool binput = ModbusRtu.SendFc4(SlaveAddr, naddr, (ushort)(2 * nNumber), ref registerinput); if (binput) { for (int i = 0; i < nNumber; i++) { int intValue = (int)registerinput[2 * i + 1]; intValue <<= 16; intValue += (int)registerinput[2 * i + 0]; sValue[i] = intValue.ToString(); } } else { for (int i = 0; i < nNumber; i++) { sValue[i] = "0"; } } } else if (datatype.Equals("uint32")) { ushort[] registerinput = new ushort[2 * nNumber]; bool binput = ModbusRtu.SendFc4(SlaveAddr, naddr, (ushort)(2 * nNumber), ref registerinput); if (binput) { for (int i = 0; i < nNumber; i++) { UInt32 intValue = (UInt32)registerinput[2 * i + 1]; intValue <<= 16; intValue += (UInt32)registerinput[2 * i + 0]; sValue[i] = intValue.ToString(); } } else { for (int i = 0; i < nNumber; i++) { sValue[i] = "0"; } } } break; } Invoke(showInfo, new object[] { ModbusRtu.modbusStatus, 1 }); } bool WriteModbusData(modbusrtu ModbusRtu, byte SlaveAddr, ushort ModbusAddr, string datatype, string sValue) { ushort ntype = (ushort)(ModbusAddr / 10000); ushort naddr = (ushort)(ModbusAddr % 10000); bool bok = false; naddr = (ushort)(naddr - 1); switch (ntype) { case 0: //DO short[] coils = new short[1]; if (sValue.Equals("1")) { coils[0] = 1; } else { coils[0] = 0; } bok = ModbusRtu.SendFc5(SlaveAddr, naddr, coils[0]); break; case 4: //AO if (datatype.Equals("uint16")) { ushort[] registerhold = new ushort[1]; registerhold[0] = ushort.Parse(sValue); bok = ModbusRtu.SendFc16(SlaveAddr, naddr, 1, registerhold); } else if (datatype.Equals("int16")) { ushort[] registerhold = new ushort[1]; registerhold[0] = (ushort)short.Parse(sValue); bok =Graph vs = new VisualGraph.VisualGraph(); vs.Name = pagename; vs.Width = 800; vs.Height = 480; vs.MouseClick += new MouseEventHandler(vs_MouseClick); vs.MouseDoubleClick += new MouseEventHandler(vs_MouseDoubleClick); TabPage page = new TabPage(); page.Name = pagename; page.Text = pagename; page.Tag = pagename; page.Controls.Add(vs); tabMain.TabPages.Add(page); tabMain.SelectTab(pagename); BinaryFormatter BinaryRead = new BinaryFormatter(); vs.ObjList = (ObjList)BinaryRead.Deserialize(fs); //设置每个图元的lock和runmode属性 int count = vs.ObjList.Count(); for (int i = 0; i < count; i++) { DrawObject o = (DrawObject)vs.ObjList[i]; o.RunMode = true; o.Lock = true; } vs.BackGroundColor = (Color)BinaryRead.Deserialize(fs);; fs.Close(); vs.Invalidate(); } } } catch (System.Exception ex) { MessageBox.Show("Exception:" + ex.ToString(), " Save Page error."); } }