예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        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;
        }