Beispiel #1
0
 public override void Dispose()
 {
     base.Dispose();
     FHotDomain.Dispose();
     FActiveDomain.Dispose();
     //FDomainStartDeletes.Free;
 }
Beispiel #2
0
        public bool DeleteDomain(HCDomainInfo aDomain)
        {
            if (aDomain.BeginNo < 0)
            {
                return(false);
            }

            Undo_New();

            int vCaretItemNo = aDomain.BeginNo;

            int vFirstDrawItemNo = GetFormatFirstDrawItem(Items[aDomain.BeginNo].FirstDItemNo);
            int vParaLastItemNo  = GetParaLastItemNo(aDomain.EndNo);

            if (Items[aDomain.BeginNo].ParaFirst)
            {
                if (aDomain.EndNo == vParaLastItemNo)
                {
                    if (aDomain.BeginNo > 0)
                    {
                        vFirstDrawItemNo = GetFormatFirstDrawItem(Items[aDomain.BeginNo].FirstDItemNo - 1);
                    }
                }
                else  // 域结束不是段尾,起始是段首
                {
                    UndoAction_ItemParaFirst(aDomain.EndNo + 1, 0, true);
                    Items[aDomain.EndNo + 1].ParaFirst = true;
                }
            }

            FormatPrepare(vFirstDrawItemNo, vParaLastItemNo);

            int vDelCount = 0;

            for (int i = aDomain.EndNo; i >= aDomain.BeginNo; i--)  // 删除域及域范围内的Ite
            {
                UndoAction_DeleteItem(i, 0);
                Items.Delete(i);
                vDelCount++;
            }

            FActiveDomain.Clear();
            ReFormatData(vFirstDrawItemNo, vParaLastItemNo - vDelCount, -vDelCount);

            this.InitializeField();
            if (vCaretItemNo > Items.Count - 1)
            {
                ReSetSelectAndCaret(vCaretItemNo - 1);
            }
            else
            {
                ReSetSelectAndCaret(vCaretItemNo, 0);
            }

            Style.UpdateInfoRePaint();
            Style.UpdateInfoReCaret();

            return(true);
        }
Beispiel #3
0
        public override void InitializeField()
        {
            base.InitializeField();
            if (FActiveDomain != null)
            {
                FActiveDomain.Clear();
            }

            if (FHotDomain != null)
            {
                FHotDomain.Clear();
            }
        }
Beispiel #4
0
        public override void GetCaretInfo(int aItemNo, int aOffset, ref HCCaretInfo aCaretInfo)
        {
            base.GetCaretInfo(aItemNo, aOffset, ref aCaretInfo);

            bool vRePaint = false;

            // 赋值激活Group信息,清除在 MouseDown
            if (this.SelectInfo.StartItemNo >= 0)
            {
                HCCustomData vTopData = GetTopLevelData();
                if (vTopData == this)
                {
                    if (this.Style.DrawActiveDomainRegion && (FActiveDomain.BeginNo >= 0))
                    {
                        vRePaint = true;
                    }

                    // 获取当前光标处ActiveDeGroup信息
                    GetDomainFrom(SelectInfo.StartItemNo, SelectInfo.StartItemOffset, FActiveDomain);

                    if (this.Style.DrawActiveDomainRegion && (FActiveDomain.BeginNo >= 0))
                    {
                        vRePaint = true;
                    }
                }
            }
            else
            if (this.Style.DrawActiveDomainRegion && (FActiveDomain.BeginNo >= 0))
            {
                FActiveDomain.Clear();
                vRePaint = true;
            }

            if (vRePaint)
            {
                Style.UpdateInfoRePaint();
            }

            if (FCaretItemChanged)
            {
                FCaretItemChanged = false;
                if (FOnCaretItemChanged != null)
                {
                    FOnCaretItemChanged(this, Items[SelectInfo.StartItemNo]);
                }
            }
        }
Beispiel #5
0
        public override void MouseDown(MouseEventArgs e)
        {
            if (FActiveDomain.BeginNo >= 0)
            {
                Style.UpdateInfoRePaint();
            }

            FActiveDomain.Clear();
            FDrawActiveDomainRegion = false;

            base.MouseDown(e);

            if (e.Button == MouseButtons.Right)
            {
                Style.UpdateInfoReCaret();
            }
        }
Beispiel #6
0
        protected override void DoDrawItemPaintBefor(HCCustomData aData, int aDrawItemNo,
                                                     RECT aDrawRect, int aDataDrawLeft, int aDataDrawBottom, int aDataScreenTop,
                                                     int ADataScreenBottom, HCCanvas ACanvas, PaintInfo APaintInfo)
        {
            base.DoDrawItemPaintBefor(aData, aDrawItemNo, aDrawRect, aDataDrawLeft,
                                      aDataDrawBottom, aDataScreenTop, ADataScreenBottom, ACanvas, APaintInfo);

            if (!APaintInfo.Print)  // 拼接域范围
            {
                bool vDrawHotDomainBorde    = false;
                bool vDrawActiveDomainBorde = false;
                int  vItemNo = DrawItems[aDrawItemNo].ItemNo;

                if (FHotDomain.BeginNo >= 0)
                {
                    vDrawHotDomainBorde = FHotDomain.Contain(vItemNo);
                }

                if (FActiveDomain.BeginNo >= 0)
                {
                    vDrawActiveDomainBorde = FActiveDomain.Contain(vItemNo);
                }

                if (vDrawHotDomainBorde || vDrawActiveDomainBorde)  // 在Hot域或激活域中
                {
                    IntPtr vDliRGN = (IntPtr)GDI.CreateRectRgn(aDrawRect.Left, aDrawRect.Top, aDrawRect.Right, aDrawRect.Bottom);
                    try
                    {
                        if ((FHotDomain.BeginNo >= 0) && vDrawHotDomainBorde)
                        {
                            GDI.CombineRgn(FHotDomainRGN, FHotDomainRGN, vDliRGN, GDI.RGN_OR);
                        }

                        if ((FActiveDomain.BeginNo >= 0) && vDrawActiveDomainBorde)
                        {
                            GDI.CombineRgn(FActiveDomainRGN, FActiveDomainRGN, vDliRGN, GDI.RGN_OR);
                        }
                    }
                    finally
                    {
                        GDI.DeleteObject(vDliRGN);
                    }
                }
            }
        }
Beispiel #7
0
        public bool DeleteDomainByItemNo(int aStartNo, int aEndNo)
        {
            if (aStartNo < 0)
            {
                return(false);
            }

            Undo_New();

            int vFirstDrawItemNo = GetFormatFirstDrawItem(Items[aStartNo].FirstDItemNo);
            int vParaLastItemNo  = GetParaLastItemNo(aEndNo);

            if (Items[aStartNo].ParaFirst)
            {
                if (aEndNo == vParaLastItemNo)
                {
                    if (aStartNo > 0)
                    {
                        vFirstDrawItemNo = GetFormatFirstDrawItem(Items[aStartNo].FirstDItemNo - 1);
                    }
                }
                else  // 域结束不是段尾,起始是段首
                {
                    UndoAction_ItemParaFirst(aEndNo + 1, 0, true);
                    Items[aEndNo + 1].ParaFirst = true;
                }
            }

            FormatPrepare(vFirstDrawItemNo, vParaLastItemNo);

            int  vDelCount       = 0;
            bool vBeginPageBreak = Items[aStartNo].PageBreak;

            for (int i = aEndNo; i >= aStartNo; i--)  // 删除域及域范围内的Ite
            {
                UndoAction_DeleteItem(i, 0);
                Items.Delete(i);
                vDelCount++;
            }

            FActiveDomain.Clear();

            if (aStartNo == 0)  // 删除完了
            {
                HCCustomItem vItem = CreateDefaultTextItem();
                vItem.ParaFirst = true;
                vItem.PageBreak = vBeginPageBreak;

                Items.Insert(aStartNo, vItem);
                UndoAction_InsertItem(aStartNo, 0);
                vDelCount--;
            }

            ReFormatData(vFirstDrawItemNo, vParaLastItemNo - vDelCount, -vDelCount);

            this.InitializeField();
            if (aStartNo > Items.Count - 1)
            {
                ReSetSelectAndCaret(aStartNo - 1);
            }
            else
            {
                ReSetSelectAndCaret(aStartNo, 0);
            }

            Style.UpdateInfoRePaint();
            Style.UpdateInfoReCaret();

            return(true);
        }