Exemplo n.º 1
0
 /// <summary>
 /// 画网格线,标准备的横竖线交叉的线
 /// </summary>
 /// <param name="g">绘图表面</param>
 /// <param name="p_rec">绘图区</param>
 /// <param name="p_pen">绘图线的笔,可以定义颜色与线宽</param>
 /// <param name="arrStrGrid">二维数组,对应了网格行、列数</param>
 /// <param name="p_rowHeight">行高</param>
 /// <param name="p_arrColsWidth">列宽</param>
 /// <param name="p_gridLineFlag">网格线类型</param>
 /// <param name="p_gridBorderFlag">边框类型</param>
 /// <param name="p_scaleXY">水平与垂直方向缩放量</param>
 /// <remarks>
 /// 作    者:周方勇
 /// 修改日期:2004-08-07
 /// </remarks>
 protected void DrawGridLine(Graphics g, Rectangle p_rec, Pen p_pen, string[,] arrStrGrid, int p_rowHeight,
     int[] p_arrColsWidth, GridLineFlag p_gridLineFlag, GridBorderFlag p_gridBorderFlag, PointF p_scaleXY)
 {
     int lngRows = arrStrGrid.GetLength(0); //行数
     int lngCols = arrStrGrid.GetLength(1); //列数
     DrawGridLine(g, p_rec, p_pen, lngRows, lngCols, p_rowHeight, p_arrColsWidth, p_gridLineFlag,
         p_gridBorderFlag, p_scaleXY);
 }
Exemplo n.º 2
0
        private Top _top; //�򵥵�һ�����д�ӡ��ʽ,��һ�о���,�����о���,�м��о���

        #endregion Fields

        #region Constructors

        //�����Խ��˳�����΢�޸�,��һ���������,��̬���ش�ӡ����,�γ�����������������,��ӡ���⸴�ӵ�����
        public MisPrinter()
        {
            mCurrentPageIndex = 1;
            _rowsPerPage = 0;
            mCurrentRowIndex = 0;
            mCurrentRowIndexForFooter = 0;
            _isSewingLine = false;
            _isPrinterMargins = false;
            _isSubTotalPerPage = false;
            _subTotalCol = "";

            _sewing = new Sewing(0,SewingDirectionFlag.Left);
            mPrintDocument = new PrintDocument();
            _body = new Body();			//��Ҫ��������ʵ����
            _gridBorder = GridBorderFlag.Double;
        }
Exemplo n.º 3
0
        } //End Function

        #endregion

        #region protected void DrawGridBorder(Graphics g,Rectangle rec,Pen p_pen,GridBorderFlag p_gridBorderFlag)

        /// <summary>
        /// 绘制网格边框
        /// </summary>
        /// <param name="g"></param>
        /// <param name="rec"></param>
        /// <param name="p_gridBorderFlag"></param>
        protected void DrawGridBorder(Graphics g, Rectangle rec, Pen p_pen, GridBorderFlag p_gridBorderFlag)
        {
            //无边框就退出
            if (p_gridBorderFlag == GridBorderFlag.None)
            {
                return;
            }

            float penwidth = 1F; //笔宽
            int movXY = 0; //根据笔的粗细要相应的调整矩形

            switch (p_gridBorderFlag)
            {
                case GridBorderFlag.Single:
                    break;
                case GridBorderFlag.SingleBold:
                    penwidth = 2F;
                    break;
                case GridBorderFlag.Double:
                    //双线内边框
                    g.DrawRectangle(p_pen, rec);
                    movXY = 2;
                    break;
                case GridBorderFlag.DoubleBold:
                    //双线内边框
                    g.DrawRectangle(p_pen, rec);
                    penwidth = 2F;
                    movXY = 3;
                    break;
            }


            Pen pen = (Pen) (p_pen.Clone());
            pen.Width = penwidth;

            //g.DrawRectangle(pen,rec);			

            Rectangle recBorder = rec;
            recBorder.X = rec.X - movXY;
            recBorder.Y = rec.Y - movXY;
            recBorder.Width = rec.Width + movXY*2;
            recBorder.Height = rec.Height + movXY*2;
            //外边框
            g.DrawRectangle(pen, recBorder);

            pen.Dispose();
        }
Exemplo n.º 4
0
        /// <summary>
        /// 画网格线,根据合并方式判断相邻单元格内容一格一格的画
        /// </summary>
        /// <param name="g">绘图表面</param>
        /// <param name="p_rec">绘图区</param>
        /// <param name="p_pen">绘图线的笔,可以定义颜色与线宽</param>
        /// <param name="arrStrGrid">二维数组</param>
        /// <param name="p_rowHeight">行高</param>
        /// <param name="p_arrColsWidth">列宽</param>
        /// <param name="p_gridLineFlag">网格线类型</param>
        /// <param name="p_gridBorderFlag">边框类型</param>
        /// <param name="p_scaleXY">水平与垂直方向缩放量</param>
        /// <param name="gridMergeFlag">网格单元格合并方式</param>
        /// <remarks>
        /// 作    者:周方勇
        /// 修改日期:2004-08-07
        /// </remarks>
        protected void DrawGridLine(Graphics g, Rectangle p_rec, Pen p_pen, string[,] arrStrGrid, int p_rowHeight,
            int[] p_arrColsWidth, GridLineFlag p_gridLineFlag, GridBorderFlag p_gridBorderFlag, PointF p_scaleXY,
            GridMergeFlag gridMergeFlag)
        {
            //缩放矩阵,用于绘图
            Rectangle rec = new Rectangle(p_rec.X, p_rec.Y, p_rec.Width, p_rec.Height);

            int lngRows = arrStrGrid.GetLength(0); //行数
            int lngCols = arrStrGrid.GetLength(1); //列数

            //网格不合并直接画标准网格线,否则一个单元格一个单元格的画
            if (gridMergeFlag == GridMergeFlag.None)
            {
                this.DrawGridLine(g, rec, p_pen, lngRows, lngCols, p_rowHeight, p_arrColsWidth, p_gridLineFlag,
                    p_gridBorderFlag, p_scaleXY);
                return;
            }
            else
            {
                #region 有网格线才画

                if (p_gridLineFlag != GridLineFlag.None)
                {
                    //变换
                    this.TransGrid(g, rec, p_scaleXY);

                    //起止坐标
                    int X1, X2, Y1, Y2;

                    //列宽
                    int[] mArrColWidth = new int[lngCols];
                    mArrColWidth = p_arrColsWidth;

                    #region	画单元格线

                    //边界不画
                    for (int i = 0; i < lngRows; i++)
                    {
                        X1 = rec.X;
                        Y1 = rec.Y;

                        for (int j = 0; j < lngCols; j++)
                        {
                            //-----水平线-----
                            X2 = X1 + mArrColWidth[j];

                            Y1 = rec.Y + p_rowHeight*i; //****可用行高数组
                            Y2 = Y1;
                            //画第二行开始及以下的横线,当前行与上一行文本不同
                            if (i > 0)
                            {
                                switch (gridMergeFlag)
                                {
                                    case GridMergeFlag.None:
                                        //无合并,直接画线
                                        g.DrawLine(p_pen, X1, Y1, X2, Y2);
                                        break;
                                    case GridMergeFlag.Row:
                                        //仅行上相邻列相同就合并,即合并列
                                        //画线(条件:无条件,只要是行上进行列合并,水平线肯定画)
                                        g.DrawLine(p_pen, X1, Y1, X2, Y2);
                                        break;
                                    case GridMergeFlag.Col:
                                        //仅列上相邻行相同就合并,即合并列
                                        //画线(条件:此列不合并 || 文本空 || 当前行与上一行文本不同)
                                        if (arrStrGrid[i, j] == "" || arrStrGrid[i, j] != arrStrGrid[i - 1, j])
                                        {
                                            g.DrawLine(p_pen, X1, Y1, X2, Y2);
                                        }
                                        break;
                                    case GridMergeFlag.Any:
                                        //任意合并,只要相邻单元格内容不同就画线,即只要相邻单元格内容相同就合并
                                        //画线(条件: 文本空 || 当前行与上一行文本不同)
                                        if (arrStrGrid[i, j] == "" || arrStrGrid[i, j] != arrStrGrid[i - 1, j])
                                        {
                                            g.DrawLine(p_pen, X1, Y1, X2, Y2);
                                        }
                                        break;
                                }
                            }

                            //-----'竖线-----
                            //画第二列以后的竖线,当前列与上一列比较
                            if (j > 0)
                            {
                                Y2 = Y2 + p_rowHeight; //****可用行高数组
                                X2 = X1;

                                switch (gridMergeFlag)
                                {
                                    case GridMergeFlag.None:
                                        //无合并,直接画线
                                        g.DrawLine(p_pen, X1, Y1, X2, Y2);
                                        break;
                                    case GridMergeFlag.Row:
                                        //仅行上相邻列相同就合并,即合并列
                                        //画线(条件:此行不合并 || 文本空 || 当前列与上一列文本不同)
                                        if (arrStrGrid[i, j] == "" || arrStrGrid[i, j] != arrStrGrid[i, j - 1])
                                        {
                                            g.DrawLine(p_pen, X1, Y1, X2, Y2);
                                        }
                                        break;
                                    case GridMergeFlag.Col:
                                        //仅列上相邻行相同就合并,即合并列
                                        //画线(条件:无,列竖线要画)
                                        g.DrawLine(p_pen, X1, Y1, X2, Y2);
                                        break;
                                    case GridMergeFlag.Any:
                                        //任意合并,只要相邻单元格内容不同就画线,即只要相邻单元格内容相同就合并
                                        //画线(条件: 文本空 || 当前行与上一行文本不同)
                                        if (arrStrGrid[i, j] == "" || arrStrGrid[i, j] != arrStrGrid[i, j - 1])
                                        {
                                            g.DrawLine(p_pen, X1, Y1, X2, Y2);
                                        }
                                        break;
                                }
                            }

                            //下一列,宽加上						
                            X1 += mArrColWidth[j];
                        } //End For 列	
                    } //End For 行					

                    #endregion

                    //******边框******
                    if (p_gridBorderFlag != GridBorderFlag.None)
                    {
                        this.DrawGridBorder(g, rec, p_pen, p_gridBorderFlag);
                    }

                    //重置,不再变换
                    this.ResetTransGrid();
                } //End If

                #endregion
            } //End If		
        } //End Function
Exemplo n.º 5
0
        /// <summary>
        /// 画网格线,标准备的横竖线交叉的线
        /// </summary>
        /// <param name="g">绘图表面</param>
        /// <param name="p_rec">绘图区</param>
        /// <param name="p_pen">绘图线的笔,可以定义颜色与线宽</param>
        /// <param name="p_rows">行数</param>
        /// <param name="p_cols">列数</param>
        /// <param name="p_rowHeight">行高</param>
        /// <param name="p_arrColsWidth">列宽</param>
        /// <param name="p_gridLineFlag">网格线类型</param>
        /// <param name="p_gridBorderFlag">边框类型</param>
        /// <param name="p_scaleXY">水平与垂直方向缩放量</param>
        /// <remarks>
        /// 作    者:周方勇
        /// 修改日期:2004-08-07
        /// </remarks>
        protected void DrawGridLine(Graphics g, Rectangle p_rec, Pen p_pen, int p_rows, int p_cols, int p_rowHeight,
            int[] p_arrColsWidth, GridLineFlag p_gridLineFlag, GridBorderFlag p_gridBorderFlag, PointF p_scaleXY)
        {
            //缩放矩阵,用于绘图
            Rectangle rec = new Rectangle(p_rec.X, p_rec.Y, p_rec.Width, p_rec.Height);

            //缩放程序
            this.TransGrid(g, rec, p_scaleXY);

            #region 有网格线才画

            if (p_gridLineFlag != GridLineFlag.None)
            {
                int lngRows = p_rows; //arrStrGrid.GetLength(0);			//行数,也可由二维数组算出
                int lngCols = p_cols; //arrStrGrid.GetLength(1);			//列数

                int lngRowIndex; //当前行
                int lngColIndex; //当前列

                //起止坐标
                int X1, X2, Y1, Y2;

                int lngLineLen; //线长
                int lngLineHei; //线高


                //计算坐标、线长、线高
                lngLineLen = rec.Width;
                lngLineHei = rec.Height;

                #region 包括横线就画

                if (p_gridLineFlag == GridLineFlag.Horizontal || p_gridLineFlag == GridLineFlag.Both)
                {
                    //******先画横线******
                    X1 = rec.X;
                    Y1 = rec.Y;
                    X2 = X1 + lngLineLen;

                    //最上边与最下边的线不画
                    for (lngRowIndex = 1; lngRowIndex < lngRows; lngRowIndex++)
                    {
                        Y1 += p_rowHeight; //这里可以换成行高数组

                        //Y1 += p_arrRowsWidth[lngRowIndex - 1];//这里可以换成行高数组

                        Y2 = Y1;
                        g.DrawLine(p_pen, X1, Y1, X2, Y2);
                    }
                }

                #endregion

                #region 包括竖线就画

                if (p_gridLineFlag == GridLineFlag.Vertical || p_gridLineFlag == GridLineFlag.Both)
                {
                    //******再画竖线******
                    //列宽
                    int[] mArrColWidth = new int[lngCols];
                    mArrColWidth = p_arrColsWidth;

                    //Y不变
                    X1 = rec.X;
                    Y1 = rec.Y;
                    Y2 = Y1 + lngLineHei;

                    //最左边与右边的线不画
                    for (lngColIndex = 0; lngColIndex < lngCols - 1; lngColIndex++)
                    {
                        X1 += mArrColWidth[lngColIndex];
                        X2 = X1;
                        g.DrawLine(p_pen, X1, Y1, X2, Y2);
                    }
                }

                #endregion
            } //End If

            #endregion

            //******边框******
            if (p_gridBorderFlag != GridBorderFlag.None)
            {
                this.DrawGridBorder(g, rec, p_pen, p_gridBorderFlag);
            }

            //重置,不再变换
            this.ResetTransGrid();
        }