예제 #1
0
        public override void LoadFromStream(Stream aStream, HCStyle aStyle, ushort aFileVersion)
        {
            base.LoadFromStream(aStream, aStyle, aFileVersion);

            byte vByte = (byte)aStream.ReadByte();

            FEditProtect = (vByte >> 7) == 1;

            if (aFileVersion > 34)
            {
                FDeleteAllow = (vByte >> 6) == 1;
            }
            else
            {
                FDeleteAllow = true;
            }

            string vS = "";

            HC.View.HC.HCLoadTextFromStream(aStream, ref vS, aFileVersion);
            DeProp.SetPropertyString(vS, FPropertys);
        }
예제 #2
0
        /// <summary> 直接设置当前数据元的值为扩展内容 </summary>
        /// <param name="aStream">扩展内容流</param>
        public void SetActiveItemExtra(Stream aStream)
        {
            string vFileFormat  = "";
            ushort vFileVersion = 0;
            byte   vLang        = 0;

            HC.View.HC._LoadFileFormatAndVersion(aStream, ref vFileFormat, ref vFileVersion, ref vLang);
            HCStyle vStyle = new HCStyle();

            try
            {
                vStyle.LoadFromStream(aStream, vFileVersion);
                this.BeginUpdate();
                try
                {
                    this.UndoGroupBegin();
                    try
                    {
                        this.Data.DeleteActiveDataItems(this.Data.SelectInfo.StartItemNo,
                                                        this.Data.SelectInfo.StartItemNo, true);

                        this.Data.InsertStream(aStream, vStyle, vFileVersion);
                    }
                    finally
                    {
                        this.UndoGroupEnd();
                    }
                }
                finally
                {
                    this.EndUpdate();
                }
            }
            finally
            {
                vStyle.Dispose();
            }
        }
예제 #3
0
        protected override void DoPaint(HCStyle aStyle, RECT aDrawRect, int aDataDrawTop, int aDataDrawBottom, int aDataScreenTop, int aDataScreenBottom, HCCanvas aCanvas, PaintInfo aPaintInfo)
        {
            if (this.Active && (!aPaintInfo.Print))
            {
                aCanvas.Brush.Color = HC.View.HC.clBtnFace;
                aCanvas.FillRect(aDrawRect);
            }

            aStyle.TextStyles[TextStyleNo].ApplyStyle(aCanvas, aPaintInfo.ScaleY / aPaintInfo.Zoom);
            if (FLeftTopText != "")
            {
                aCanvas.TextOut(aDrawRect.Left + FLeftTopRect.Left, aDrawRect.Top + FLeftTopRect.Top, FLeftTopText);
            }

            if (FLeftBottomText != "")
            {
                aCanvas.TextOut(aDrawRect.Left + FLeftBottomRect.Left, aDrawRect.Top + FLeftBottomRect.Top, FLeftBottomText);
            }

            if (FRightTopText != "")
            {
                aCanvas.TextOut(aDrawRect.Left + FRightTopRect.Left, aDrawRect.Top + FRightTopRect.Top, FRightTopText);
            }

            if (FRightBottomText != "")
            {
                aCanvas.TextOut(aDrawRect.Left + FRightBottomRect.Left, aDrawRect.Top + FRightBottomRect.Top, FRightBottomText);
            }

            // 十字线
            aCanvas.Pen.Color = Color.Black;
            aCanvas.MoveTo(aDrawRect.Left, aDrawRect.Top + FLeftTopRect.Bottom + FPadding);
            aCanvas.LineTo(aDrawRect.Right, aDrawRect.Top + FLeftTopRect.Bottom + FPadding);
            aCanvas.MoveTo(aDrawRect.Left + FLeftTopRect.Right + FPadding, aDrawRect.Top);
            aCanvas.LineTo(aDrawRect.Left + FLeftTopRect.Right + FPadding, aDrawRect.Bottom);

            if (!aPaintInfo.Print)
            {
                RECT vFocusRect = new RECT();

                if (FActiveArea != ToothArea.ctaNone)
                {
                    switch (FActiveArea)
                    {
                    case ToothArea.ctaLeftTop:
                        vFocusRect = FLeftTopRect;
                        break;

                    case ToothArea.ctaLeftBottom:
                        vFocusRect = FLeftBottomRect;
                        break;

                    case ToothArea.ctaRightTop:
                        vFocusRect = FRightTopRect;
                        break;

                    case ToothArea.ctaRightBottom:
                        vFocusRect = FRightBottomRect;
                        break;
                    }

                    vFocusRect.Offset(aDrawRect.Left, aDrawRect.Top);
                    vFocusRect.Inflate(2, 2);
                    aCanvas.Pen.Color = Color.Gray;
                    aCanvas.Rectangle(vFocusRect);
                }

                if ((FMouseMoveArea != ToothArea.ctaNone) && (FMouseMoveArea != FActiveArea))
                {
                    switch (FMouseMoveArea)
                    {
                    case ToothArea.ctaLeftTop:
                        vFocusRect = FLeftTopRect;
                        break;

                    case ToothArea.ctaLeftBottom:
                        vFocusRect = FLeftBottomRect;
                        break;

                    case ToothArea.ctaRightTop:
                        vFocusRect = FRightTopRect;
                        break;

                    case ToothArea.ctaRightBottom:
                        vFocusRect = FRightBottomRect;
                        break;
                    }

                    vFocusRect.Offset(aDrawRect.Left, aDrawRect.Top);
                    vFocusRect.Inflate(2, 2);
                    aCanvas.Pen.Color = Color.LightGray;
                    aCanvas.Rectangle(vFocusRect);
                }
            }
        }
예제 #4
0
        public override void FormatToDrawItem(HCCustomData aRichData, int aItemNo)
        {
            HCStyle vStyle = aRichData.Style;

            vStyle.ApplyTempStyle(TextStyleNo);
            int vH            = vStyle.TextStyles[TextStyleNo].FontHeight;
            int vLeftTopW     = Math.Max(vStyle.TempCanvas.TextWidth(FLeftTopText), FPadding);
            int vLeftBottomW  = Math.Max(vStyle.TempCanvas.TextWidth(FLeftBottomText), FPadding);
            int vRightTopW    = Math.Max(vStyle.TempCanvas.TextWidth(FRightTopText), FPadding);
            int vRightBottomW = Math.Max(vStyle.TempCanvas.TextWidth(FRightBottomText), FPadding);

            // 计算尺寸
            int vW = 4 * FPadding;

            if (vLeftTopW > vLeftBottomW)
            {
                vW = vW + vLeftTopW;
            }
            else
            {
                vW = vW + vLeftBottomW;
            }

            if (vRightTopW > vRightBottomW)
            {
                vW = vW + vRightTopW;
            }
            else
            {
                vW = vW + vRightBottomW;
            }

            Width  = vW;
            Height = vH * 2 + 4 * FPadding;

            // 计算各字符串位置
            if (vLeftTopW > vLeftBottomW)
            {
                FLeftTopRect    = HC.View.HC.Bounds(FPadding, FPadding, vLeftTopW, vH);
                FLeftBottomRect = HC.View.HC.Bounds(FPadding, Height - FPadding - vH, vLeftTopW, vH);
            }
            else  // 左下宽
            {
                FLeftTopRect    = HC.View.HC.Bounds(FPadding, FPadding, vLeftBottomW, vH);
                FLeftBottomRect = HC.View.HC.Bounds(FPadding, Height - FPadding - vH, vLeftBottomW, vH);
            }

            if (vRightTopW > vRightBottomW)
            {
                FRightTopRect    = HC.View.HC.Bounds(FLeftTopRect.Right + FPadding + FPadding, FPadding, vRightTopW, vH);
                FRightBottomRect = HC.View.HC.Bounds(FLeftTopRect.Right + FPadding + FPadding, Height - FPadding - vH, vRightTopW, vH);
            }
            else  // 右下宽
            {
                FRightTopRect    = HC.View.HC.Bounds(FLeftTopRect.Right + FPadding + FPadding, FPadding, vRightBottomW, vH);
                FRightBottomRect = HC.View.HC.Bounds(FLeftTopRect.Right + FPadding + FPadding, Height - FPadding - vH, vRightBottomW, vH);
            }

            if (FEmptyLower)
            {
                vH = 0;
                if ((FLeftTopText == "") && (FRightTopText == ""))
                {
                    vH = FLeftTopRect.Height - AreaMinSize;
                    FLeftTopRect.Height  = AreaMinSize;
                    FRightTopRect.Height = AreaMinSize;
                    FLeftBottomRect.Offset(0, -vH);
                    FRightBottomRect.Offset(0, -vH);
                }

                if ((FLeftBottomText == "") && (FRightBottomText == ""))
                {
                    vH = vH + FLeftBottomRect.Height - AreaMinSize;
                    FLeftBottomRect.Height  = AreaMinSize;
                    FRightBottomRect.Height = AreaMinSize;
                }

                Height = Height - vH;
            }
        }
예제 #5
0
 protected override void DoPaint(HCStyle aStyle, RECT aDrawRect, int aDataDrawTop, int aDataDrawBottom,
                                 int aDataScreenTop, int aDataScreenBottom, HCCanvas aCanvas, PaintInfo aPaintInfo)
 {
     base.DoPaint(aStyle, aDrawRect, aDataDrawTop, aDataDrawBottom, aDataScreenTop, aDataScreenBottom, aCanvas, aPaintInfo);
 }
예제 #6
0
        protected override void DoPaint(HCStyle aStyle, RECT aDrawRect, int aDataDrawTop, int aDataDrawBottom,
                                        int aDataScreenTop, int aDataScreenBottom, HCCanvas aCanvas, PaintInfo aPaintInfo)
        {
            base.DoPaint(aStyle, aDrawRect, aDataDrawTop, aDataDrawBottom, aDataScreenTop,
                         aDataScreenBottom, aCanvas, aPaintInfo);

            if (FOnPaintBKG != null)
            {
                FOnPaintBKG(this, aCanvas, aDrawRect, aPaintInfo);
            }

            if (FStyleEx == StyleExtra.cseDel)
            {
                int vTextHeight = aStyle.TextStyles[this.StyleNo].FontHeight;
                int vAlignVert  = User.DT_BOTTOM;
                switch (aStyle.ParaStyles[this.ParaNo].AlignVert)
                {
                case ParaAlignVert.pavCenter:
                    vAlignVert = User.DT_CENTER;
                    break;

                case ParaAlignVert.pavTop:
                    vAlignVert = User.DT_TOP;
                    break;

                default:
                    vAlignVert = User.DT_BOTTOM;
                    break;
                }

                int vTop = aDrawRect.Top;
                switch (vAlignVert)
                {
                case User.DT_TOP:
                    vTop = aDrawRect.Top;
                    break;

                case User.DT_CENTER:
                    vTop = aDrawRect.Top + (aDrawRect.Bottom - aDrawRect.Top - vTextHeight) / 2;
                    break;

                default:
                    vTop = aDrawRect.Bottom - vTextHeight;
                    break;
                }

                // 绘制删除线
                aCanvas.Pen.BeginUpdate();
                try
                {
                    aCanvas.Pen.Style = HCPenStyle.psSolid;
                    aCanvas.Pen.Color = Color.Red;
                }
                finally
                {
                    aCanvas.Pen.EndUpdate();
                }

                vTop = vTop + (aDrawRect.Bottom - vTop) / 2;
                aCanvas.MoveTo(aDrawRect.Left, vTop - 1);
                aCanvas.LineTo(aDrawRect.Right, vTop - 1);
                aCanvas.MoveTo(aDrawRect.Left, vTop + 2);
                aCanvas.LineTo(aDrawRect.Right, vTop + 2);
            }
            else
            if (FStyleEx == StyleExtra.cseAdd)
            {
                aCanvas.Pen.BeginUpdate();
                try
                {
                    aCanvas.Pen.Style = HCPenStyle.psSolid;
                    aCanvas.Pen.Color = Color.Blue;
                }
                finally
                {
                    aCanvas.Pen.EndUpdate();
                }

                aCanvas.MoveTo(aDrawRect.Left, aDrawRect.Bottom);
                aCanvas.LineTo(aDrawRect.Right, aDrawRect.Bottom);
            }
        }
예제 #7
0
 public override void ApplySelectTextStyle(HCStyle aStyle, HCStyleMatch aMatchStyle)
 {
     FTextStyleNo = aMatchStyle.GetMatchStyleNo(aStyle, FTextStyleNo);
 }
        protected override void DoPaint(HCStyle aStyle, RECT aDrawRect, int aDataDrawTop, int aDataDrawBottom, int aDataScreenTop, int aDataScreenBottom, HCCanvas aCanvas, PaintInfo aPaintInfo)
        {
            if (this.Active && (!aPaintInfo.Print))
            {
                aCanvas.Brush.Color = HC.View.HC.clBtnFace;
                aCanvas.FillRect(aDrawRect);
            }

            aStyle.TextStyles[TextStyleNo].ApplyStyle(aCanvas, aPaintInfo.ScaleY / aPaintInfo.Zoom);
            aCanvas.TextOut(aDrawRect.Left + LeftRect.Left, aDrawRect.Top + LeftRect.Top, LeftText);
            aCanvas.TextOut(aDrawRect.Left + TopRect.Left, aDrawRect.Top + TopRect.Top, TopText);
            aCanvas.TextOut(aDrawRect.Left + RightRect.Left, aDrawRect.Top + RightRect.Top, RightText);
            aCanvas.TextOut(aDrawRect.Left + BottomRect.Left, aDrawRect.Top + BottomRect.Top, BottomText);

            aCanvas.Pen.Color = Color.Black;
            aCanvas.DrawLine(aDrawRect.Left, aDrawRect.Top, aDrawRect.Right, aDrawRect.Bottom);
            aCanvas.DrawLine(aDrawRect.Right, aDrawRect.Top, aDrawRect.Left, aDrawRect.Bottom);

            if (!aPaintInfo.Print)
            {
                RECT vFocusRect = new RECT();

                if (FMouseIn)
                {
                    aCanvas.Pen.Color = Color.Gray;

                    vFocusRect = LeftRect;
                    vFocusRect.Offset(aDrawRect.Left, aDrawRect.Top);
                    vFocusRect.Inflate(2, 2);
                    aCanvas.Rectangle(vFocusRect);

                    vFocusRect = TopRect;
                    vFocusRect.Offset(aDrawRect.Left, aDrawRect.Top);
                    vFocusRect.Inflate(2, 2);
                    aCanvas.Rectangle(vFocusRect);

                    vFocusRect = RightRect;
                    vFocusRect.Offset(aDrawRect.Left, aDrawRect.Top);
                    vFocusRect.Inflate(2, 2);
                    aCanvas.Rectangle(vFocusRect);

                    vFocusRect = BottomRect;
                    vFocusRect.Offset(aDrawRect.Left, aDrawRect.Top);
                    vFocusRect.Inflate(2, 2);
                    aCanvas.Rectangle(vFocusRect);
                }

                if (FActiveArea != ExpressArea.ceaNone)
                {
                    switch (FActiveArea)
                    {
                    case ExpressArea.ceaLeft:
                        vFocusRect = LeftRect;
                        break;

                    case ExpressArea.ceaTop:
                        vFocusRect = TopRect;
                        break;

                    case ExpressArea.ceaRight:
                        vFocusRect = RightRect;
                        break;

                    default:
                        vFocusRect = BottomRect;
                        break;
                    }

                    vFocusRect.Offset(aDrawRect.Left, aDrawRect.Top);
                    vFocusRect.Inflate(2, 2);
                    aCanvas.Pen.Color = Color.Blue;
                    aCanvas.Rectangle(vFocusRect);
                }
            }
        }