/// <summary> /// 解析数据将布局当前所有控件 /// </summary> /// <param Name="bin">二进制数据</param> /// <param Name="isFirst">是否为其实页面 true表示起始页面</param> void fromPageBin(PageBin bin, Boolean isFirst) { SVSPage page = new SVSPage(); page.fromBin(bin, picBuffer); ///标题栏高度 Int32 titleHeight = this.Height - this.ClientRectangle.Height; ///设置窗口起始位置和宽高尺寸 this.Size = new Size(page.Attrib.Width + 200, page.Attrib.Height + titleHeight); page.Size = this.Size; ///设置控件显示尺寸 mainPanel.Location = new Point(0, 0); mainPanel.Size = new Size(page.Attrib.Width, page.Attrib.Height); ///设置数据显示 dataPanel.Location = new Point(mainPanel.Location.X + mainPanel.Width, mainPanel.Location.Y); dataPanel.Size = new Size(200, mainPanel.Height); page.Paint += new PaintEventHandler((sender, e) => { for (int i = 0; i < bin.lineNum; i++) { LineBin lineBin = bin.m_line[i]; Graphics gh = e.Graphics; Color lineColor = Color.FromArgb((Int32)lineBin.color); SolidBrush brush = new SolidBrush(lineColor); Pen pen = new Pen(brush, lineBin.width); gh.DrawLine(pen, lineBin.x1, lineBin.y1, lineBin.x2, lineBin.y2); } }); //添加ID和页面的映射关系 pageDict.Add(page.ID, page); for (int i = 0; i < bin.btnNum; i++) { SVSButton button = new SVSButton(); button.fromBin(bin.m_btn[i], picBuffer); page.Controls.Add(button); ButtonBin bbb = bin.m_btn[i]; button.Click += new EventHandler((sender, e) => { UInt16 id = (UInt16)(bbb.param.pageId); if (pageDict.ContainsKey(id)) { SVSPage vPage = pageDict[id]; this.mainPanel.Controls.Clear(); this.mainPanel.Controls.Add(vPage); } }); } ///添加所有的模拟量控件 for (int i = 0; i < bin.analog_num; i++) { SVSAnalog analog = new SVSAnalog(_timer); analog.fromBin(bin.m_analog[i]); page.Controls.Add(analog); analog.MouseDown += new MouseEventHandler((sender, e) => { this.dataPanel.Controls.Clear(); this.dataPanel.Controls.Add(analog.DataControl); }); } ///添加所有开关量控件 for (int i = 0; i < bin.binaryNum; i++) { SVSBinary binary = new SVSBinary(_timer); binary.fromBin(bin.m_binary[i], picBuffer); page.Controls.Add(binary); binary.MouseDown += new MouseEventHandler((sender, e) => { this.dataPanel.Controls.Clear(); this.dataPanel.Controls.Add(binary.DataControl); }); } for (int i = 0; i < bin.trendChartNum; i++) { SVSCurve curve = new SVSCurve(); curve.fromBin(bin.m_trendChart[i]); page.Controls.Add(curve); } for (int i = 0; i < bin.gif_num; i++) { SVSGif gif = new SVSGif(_timer); gif.fromBin(bin.m_gif[i], picBuffer); page.Controls.Add(gif); } for (int i = 0; i < bin.iconNum; i++) { SVSIcon icon = new SVSIcon(); icon.fromBin(bin.m_icon[i], picBuffer); page.Controls.Add(icon); } for (int i = 0; i < bin.areaNum; i++) { SVSLabel label = new SVSLabel(); label.fromBin(bin.m_area[i]); page.Controls.Add(label); } for (int i = 0; i < bin.tickNum; i++) { SVSHeartBeat heart = new SVSHeartBeat(_timer); heart.fromBin(bin.m_tick[i], picBuffer); page.Controls.Add(heart); heart.MouseDown += new MouseEventHandler((sender, e) => { this.dataPanel.Controls.Clear(); this.dataPanel.Controls.Add(heart.DataControl); }); } if (isFirst) { this.mainPanel.Controls.Clear(); this.mainPanel.Controls.Add(page); } }
public void fromBin(ButtonBin bin, byte[] picBuffer) { this.MouseDown += new MouseEventHandler((sender, e) => { ///如果为0,表示以颜色显示按钮背景 if (bin.bgUpFlag == 0 && bin.bgDownFlag == 0) { Attrib.BackColorgroundDown = Color.FromArgb((Int32)bin.bgDownColor); _paintEvent = drawButtonDown; Refresh(); } else { SVPixmapFile file = new SVPixmapFile(); this.BackgroundImage = file.getFromFile(picBuffer, bin.bgDownColor); } }); this.MouseUp += new MouseEventHandler((sender, e) => { ///如果为0,表示以颜色显示按钮背景 if (bin.bgUpFlag == 0 && bin.bgDownFlag == 0) { Attrib.BackColorground = Color.FromArgb((Int32)bin.bgUpColor); _paintEvent = drawButtonNormal; Refresh(); } else { SVPixmapFile file = new SVPixmapFile(); this.BackgroundImage = file.getFromFile(picBuffer, bin.bgUpColor); } }); ///如果为0,表示以颜色显示按钮背景 if (bin.bgUpFlag == 0 && bin.bgDownFlag == 0) { Attrib.BackColorground = Color.FromArgb((Int32)bin.bgUpColor); _paintEvent = drawButtonNormal; Refresh(); } else { SVPixmapFile file = new SVPixmapFile(); this.BackgroundImage = file.getFromFile(picBuffer, bin.bgUpColor); } ///按钮位置和尺寸 this.Location = new Point(bin.rect.sX, bin.rect.sY); this.Width = bin.rect.eX - bin.rect.sX; this.Height = bin.rect.eY - bin.rect.sY; ///字体 Dictionary <Byte, Font> FontConfig = new Dictionary <Byte, Font>(); FontConfig.Add(8, new Font("华文细黑", 8)); FontConfig.Add(12, new Font("华文细黑", 12)); FontConfig.Add(16, new Font("华文细黑", 16)); this.Font = FontConfig[bin.font]; int len = 0; for (int i = 0; i < bin.text.Length; i += 2) { if (bin.text[i] == 0 && bin.text[i + 1] == 0) { break; } len += 2; } ///显示字体颜色 this.ForeColor = Color.FromArgb((Int32)bin.fontClr); ///显示字体 this.Text = System.Text.Encoding.Unicode.GetString(bin.text, 0, len); }
public void make(ref PageArrayBin pageArrayBin, ref SVSerialize serialize) { UInt32 pageNum = pageArrayBin.pageCount; UInt32 btnNum = pageArrayBin.pageArray[pageNum].btnNum++; if (pageArrayBin.pageArray[pageNum].m_btn == null) { pageArrayBin.pageArray[pageNum].m_btn = new ButtonBin[SVLimit.PAGE_BTN_MAXNUM]; } ButtonBin btnBin = pageArrayBin.pageArray[pageNum].m_btn[btnNum]; btnBin.id = ID; btnBin.rect.sX = (UInt16)Rect.X; btnBin.rect.sY = (UInt16)Rect.Y; btnBin.rect.eX = (UInt16)(Rect.Width + btnBin.rect.sX); btnBin.rect.eY = (UInt16)(Rect.Height + btnBin.rect.sY); btnBin.fontClr = (UInt32)FrontColorground.ToArgb(); ///为真的文本 btnBin.text = new Byte[SVLimit.BTN_MAX_LEN]; copyDestByteArray(Encoding.Unicode.GetBytes(Text), btnBin.text); ///为假的文本 btnBin.fText = new Byte[SVLimit.BTN_MAX_LEN]; copyDestByteArray(Encoding.Unicode.GetBytes(FText), btnBin.fText); ///备注信息 btnBin.fMemo = new Byte[SVLimit.BTN_MAX_LEN]; copyDestByteArray(Encoding.Unicode.GetBytes(FMemo), btnBin.fMemo); btnBin.font = (Byte)_font.Size; //是否有确认窗口 btnBin.confirm = Comfirm ? (byte)1 : (byte)0; //按钮的类型 if (_buttonType == 0) { btnBin.type = 0; btnBin.param.pageId = _btnType.PageID; } else { var varInstance = SVVaribleType.instance(); btnBin.param.addrOffset = varInstance.strToAddress(_btnVarText.VarName, _btnVarText.VarBlockType); btnBin.varTypeBtn = (Byte)varInstance.strToType(_btnVarText.VarName, _btnVarText.VarBlockType); btnBin.type = _buttonType; btnBin.enable = Convert.ToByte(_btnEnable); btnBin.enableAddrOffset = varInstance.strToAddress(_enVarText.VarName, _enVarText.VarBlockType); btnBin.varTypeEn = (Byte)varInstance.strToType(_enVarText.VarName, _enVarText.VarBlockType); } ///显示背景图片或者显示背景颜色 if (!IsShowPic) { btnBin.bgUpFlag = 0; btnBin.bgDownFlag = 0; btnBin.bgUpColor = (UInt32)BackColorground.ToArgb(); btnBin.bgDownColor = (UInt32)BackColorgroundDown.ToArgb(); } else { btnBin.bgUpFlag = 1; btnBin.bgDownFlag = 1; //设置弹起图片 var upAddress = BtnUpPic.bitmap8Data(Rect.Width, Rect.Height); if (upAddress != null) { btnBin.bgUpColor = (UInt32)serialize.ToArray().Length; serialize.pack(upAddress); } //设置按下图片 var downAddress = BtnDownPic.bitmap8Data(Rect.Width, Rect.Height); if (downAddress != null) { btnBin.bgDownColor = (UInt32)serialize.ToArray().Length; serialize.pack(downAddress); } } pageArrayBin.pageArray[pageNum].m_btn[btnNum] = btnBin; }