예제 #1
0
 private void DoInsertFloatItem(HCCustomFloatItem aItem)
 {
     if (FOnInsertFloatItem != null)
     {
         FOnInsertFloatItem(this, aItem);
     }
 }
예제 #2
0
        public bool MouseUpFloatItem(MouseEventArgs e)
        {
            bool vResult = false;

            if (FMouseDownIndex >= 0)
            {
                if (this.ReadOnly)
                {
                    return(true);
                }

                Undo_New();
                UndoAction_FloatItemMirror(FMouseDownIndex);

                HCCustomFloatItem vFloatItem = FFloatItems[FMouseDownIndex];
                MouseEventArgs    vMouseArgs = new MouseEventArgs(e.Button, e.Clicks,
                                                                  e.X - vFloatItem.Left, e.Y - vFloatItem.Top, e.Delta);
                vResult = vFloatItem.MouseUp(vMouseArgs);
                if (vResult)
                {
                    Style.UpdateInfoRePaint();
                }
            }

            return(vResult);
        }
예제 #3
0
        protected override void DoLoadFromStream(Stream aStream, HCStyle aStyle, ushort aFileVersion)
        {
            base.DoLoadFromStream(aStream, aStyle, aFileVersion);

            if (aFileVersion > 12)
            {
                int    vFloatCount = 0;
                byte[] vBuffer     = BitConverter.GetBytes(vFloatCount);
                aStream.Read(vBuffer, 0, vBuffer.Length);
                vFloatCount = BitConverter.ToInt32(vBuffer, 0);
                HCCustomFloatItem vFloatItem = null;

                while (vFloatCount > 0)
                {
                    int vStyleNo = HCStyle.Null;
                    vBuffer = BitConverter.GetBytes(vStyleNo);
                    aStream.Read(vBuffer, 0, vBuffer.Length);
                    vStyleNo = BitConverter.ToInt32(vBuffer, 0);

                    if ((aFileVersion < 28) && (vStyleNo == (byte)HCShapeStyle.hssLine))
                    {
                        vFloatItem = new HCFloatLineItem(this);
                    }
                    else
                    {
                        vFloatItem = CreateItemByStyle(vStyleNo) as HCCustomFloatItem;
                    }

                    vFloatItem.LoadFromStream(aStream, aStyle, aFileVersion);
                    FFloatItems.Add(vFloatItem);

                    vFloatCount--;
                }
            }
        }
예제 #4
0
        protected override void DoLoadFromStream(Stream aStream, HCStyle aStyle, ushort aFileVersion)
        {
            base.DoLoadFromStream(aStream, aStyle, aFileVersion);

            if (aFileVersion > 12)
            {
                int    vFloatCount = 0;
                byte[] vBuffer     = BitConverter.GetBytes(vFloatCount);
                aStream.Read(vBuffer, 0, vBuffer.Length);
                vFloatCount = BitConverter.ToInt32(vBuffer, 0);
                HCCustomFloatItem vFloatItem = null;

                while (vFloatCount > 0)
                {
                    int vStyleNo = HCStyle.Null;
                    vBuffer = BitConverter.GetBytes(vStyleNo);
                    aStream.Read(vBuffer, 0, vBuffer.Length);
                    vStyleNo = BitConverter.ToInt32(vBuffer, 0);

                    vFloatItem = CreateFloatItemByStyle(vStyleNo);
                    vFloatItem.LoadFromStream(aStream, aStyle, aFileVersion);
                    FFloatItems.Add(vFloatItem);

                    vFloatCount--;
                }
            }
        }
예제 #5
0
        public bool MouseMoveFloatItem(MouseEventArgs e)
        {
            bool Result = true;

            if ((e.Button == MouseButtons.Left) && (FMouseDownIndex >= 0))
            {
                HCCustomFloatItem vFloatItem = FFloatItems[FMouseDownIndex];
                MouseEventArgs    vMouseArgs = new MouseEventArgs(e.Button, e.Clicks,
                                                                  e.X - vFloatItem.Left, e.Y - vFloatItem.Top, e.Delta);
                vFloatItem.MouseMove(vMouseArgs);

                if (!vFloatItem.Resizing)
                {
                    vFloatItem.Left = vFloatItem.Left + e.X - FMouseX;
                    vFloatItem.Top  = vFloatItem.Top + e.Y - FMouseY;

                    FMouseX = e.X;
                    FMouseY = e.Y;
                }

                Style.UpdateInfoRePaint();
            }
            else  // 普通鼠标移动
            {
                int vItemIndex = GetFloatItemAt(e.X, e.Y);
                if (FMouseMoveIndex != vItemIndex)
                {
                    if (FMouseMoveIndex >= 0)
                    {
                        FFloatItems[FMouseMoveIndex].MouseLeave();
                    }

                    FMouseMoveIndex = vItemIndex;
                    if (FMouseMoveIndex >= 0)
                    {
                        FFloatItems[FMouseMoveIndex].MouseEnter();
                    }
                }

                if (vItemIndex >= 0)
                {
                    HCCustomFloatItem vFloatItem = FFloatItems[vItemIndex];
                    MouseEventArgs    vMouseArgs = new MouseEventArgs(e.Button, e.Clicks,
                                                                      e.X - vFloatItem.Left, e.Y - vFloatItem.Top, e.Delta);
                    vFloatItem.MouseMove(vMouseArgs);
                }
                else
                {
                    Result = false;
                }
            }

            return(Result);
        }
예제 #6
0
        public bool MouseMoveFloatItem(MouseEventArgs e)
        {
            bool vResult = false;

            if (e.Button == MouseButtons.Left)
            {
                if (this.ReadOnly)
                {
                    return(vResult);
                }

                if (FMouseDownIndex >= 0)
                {
                    HCCustomFloatItem vFloatItem = FFloatItems[FMouseDownIndex];
                    MouseEventArgs    vMouseArgs = new MouseEventArgs(e.Button, e.Clicks,
                                                                      e.X - vFloatItem.Left, e.Y - vFloatItem.Top, e.Delta);
                    vResult = vFloatItem.MouseMove(vMouseArgs);

                    if (vResult)
                    {
                        Style.UpdateInfoRePaint();
                    }
                }
            }
            else  // 普通鼠标移动
            {
                int vItemIndex = GetFloatItemAt(e.X, e.Y);
                if (FMouseMoveIndex != vItemIndex)
                {
                    if (FMouseMoveIndex >= 0)
                    {
                        FFloatItems[FMouseMoveIndex].MouseLeave();
                    }

                    FMouseMoveIndex = vItemIndex;
                    if (FMouseMoveIndex >= 0)
                    {
                        FFloatItems[FMouseMoveIndex].MouseEnter();
                    }
                }

                if (vItemIndex >= 0)
                {
                    HCCustomFloatItem vFloatItem = FFloatItems[vItemIndex];
                    MouseEventArgs    vMouseArgs = new MouseEventArgs(e.Button, e.Clicks,
                                                                      e.X - vFloatItem.Left, e.Y - vFloatItem.Top, e.Delta);
                    vResult = vFloatItem.MouseMove(vMouseArgs);
                }
            }

            return(vResult);
        }
예제 #7
0
        public bool MouseUpFloatItem(MouseEventArgs e)
        {
            bool vResult = false;

            if (FMouseDownIndex >= 0)
            {
                HCCustomFloatItem vFloatItem = FFloatItems[FMouseDownIndex];
                MouseEventArgs    vMouseArgs = new MouseEventArgs(e.Button, e.Clicks,
                                                                  e.X - vFloatItem.Left, e.Y - vFloatItem.Top, e.Delta);
                vResult = vFloatItem.MouseUp(vMouseArgs);
            }

            return(vResult);
        }
예제 #8
0
        private HCCustomFloatItem CreateFloatItemByStyle(int aStyleNo)
        {
            HCCustomFloatItem Result = null;

            if (aStyleNo == (byte)HCShapeStyle.hssLine)
            {
                Result = new HCFloatLineItem(this);
            }
            else
            {
                throw new Exception("未找到类型 " + aStyleNo.ToString() + " 对应的创建FloatItem代码!");
            }

            return(Result);
        }
예제 #9
0
        public override void ParseXml(XmlElement aNode)
        {
            XmlElement vItemsNode = aNode.SelectSingleNode("items") as XmlElement;

            base.ParseXml(aNode);

            vItemsNode = aNode.SelectSingleNode("floatitems") as XmlElement;
            for (int i = 0; i <= vItemsNode.ChildNodes.Count - 1; i++)
            {
                XmlElement        vNode      = vItemsNode.ChildNodes[i] as XmlElement;
                HCCustomFloatItem vFloatItem = CreateFloatItemByStyle(int.Parse(aNode.Attributes["sno"].Value));
                vFloatItem.ParseXml(vNode);
                FFloatItems.Add(vFloatItem);
            }
        }
예제 #10
0
        private int GetFloatItemAt(int x, int y)
        {
            int Result = -1;
            HCCustomFloatItem vFloatItem = null;

            for (int i = 0; i <= FFloatItems.Count - 1; i++)
            {
                vFloatItem = FFloatItems[i];

                if (vFloatItem.PointInClient(x - vFloatItem.Left, y - vFloatItem.Top))
                {
                    Result = i;
                    break;
                }
            }

            return(Result);
        }
예제 #11
0
        public override void PaintFloatItems(int aPageIndex, int aDataDrawLeft,
                                             int aDataDrawTop, int aVOffset, HCCanvas aCanvas, PaintInfo aPaintInfo)
        {
            HCCustomFloatItem vFloatItem = null;

            for (int i = 0; i <= this.FloatItems.Count - 1; i++)
            {
                vFloatItem = this.FloatItems[i];

                if (vFloatItem.PageIndex == aPageIndex)
                {
                    vFloatItem.DrawRect = HC.Bounds(vFloatItem.Left, vFloatItem.Top, vFloatItem.Width, vFloatItem.Height);
                    vFloatItem.DrawRect.Offset(aDataDrawLeft, aDataDrawTop - aVOffset);  // 将数据起始位置映射到绘制位置
                    vFloatItem.PaintTo(this.Style, vFloatItem.DrawRect, aDataDrawTop, 0,
                                       0, 0, aCanvas, aPaintInfo);
                }
            }
        }
예제 #12
0
        public virtual void PaintFloatItems(int aPageIndex, int aDataDrawLeft, int aDataDrawTop,
                                            int aVOffset, HCCanvas aCanvas, PaintInfo aPaintInfo)
        {
            HCCustomFloatItem vFloatItem = null;

            for (int i = 0; i <= FFloatItems.Count - 1; i++)
            {
                vFloatItem = FFloatItems[i];
                // 代替下面不生效的代码
                RECT vRect = HC.Bounds(vFloatItem.Left, vFloatItem.Top, vFloatItem.Width, vFloatItem.Height);
                vRect.Offset(aDataDrawLeft, aDataDrawTop - aVOffset);  // 将数据起始位置映射到绘制位置
                vFloatItem.DrawRect = vRect;
                // 下面的操作vFloatItemDraw.DrawRect.Offset并不生效
                //vFloatItem.DrawRect = HC.Bounds(vFloatItem.Left, vFloatItem.Top, vFloatItem.Width, vFloatItem.Height);
                //vFloatItem.DrawRect.Offset(aDataDrawLeft, aDataDrawTop - aVOffset);  // 将数据起始位置映射到绘制位置
                vFloatItem.PaintTo(this.Style, vFloatItem.DrawRect, aDataDrawTop, 0,
                                   0, 0, aCanvas, aPaintInfo);
            }
        }
예제 #13
0
        /// <summary> 插入浮动Item </summary>
        public bool InsertFloatItem(HCCustomFloatItem aFloatItem)
        {
            int vStartNo     = this.SelectInfo.StartItemNo;
            int vStartOffset = this.SelectInfo.StartItemOffset;

            // 取选中起始处的DrawItem
            int vDrawNo = this.GetDrawItemNoByOffset(vStartNo, vStartOffset);

            aFloatItem.Left = this.DrawItems[vDrawNo].Rect.Left
                              + this.GetDrawItemOffsetWidth(vDrawNo, this.SelectInfo.StartItemOffset - this.DrawItems[vDrawNo].CharOffs + 1);
            aFloatItem.Top = this.DrawItems[vDrawNo].Rect.Top;

            this.FloatItems.Add(aFloatItem);
            FFloatItemIndex   = this.FloatItems.Count - 1;
            aFloatItem.Active = true;

            if (!this.DisSelect())
            {
                Style.UpdateInfoRePaint();
            }

            return(true);
        }
예제 #14
0
 private void DoInsertFloatItem(HCCustomFloatItem aItem)
 {
     DoInsertItem(aItem);
 }