using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.ComponentModel; using System.Drawing; using FastReport.Utils; namespace FastReport.Controls { #if !DEBUG [DesignTimeVisible(false)] #endif internal class ToggleLineEventArgs { private Border border; private BorderLines line; private bool toggle; public Border Border { get { return border; } set { border = value; } } public BorderLines Line { get { return line; } set { line = value; } } public bool Toggle { get { return toggle; } set { toggle = value; } } public ToggleLineEventArgs(Border border, BorderLines line, bool toggle) { Border = border; Line = line; Toggle = toggle; } } internal delegate void ToggleLineEventHandler(object sender, ToggleLineEventArgs e); #if !DEBUG [DesignTimeVisible(false)] #endif internal class BorderSample : Control { private Border border; public event ToggleLineEventHandler ToggleLine; [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Border Border { get { return border; } set { border = value; } } protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; // draw control frame Pen p = new Pen(Color.FromArgb(127, 157, 185)); g.DrawRectangle(p, 0, 0, Width - 1, Height - 1); p.Dispose(); // draw corners p = SystemPens.ControlDark; g.DrawLine(p, 10, 10, 10, 5); g.DrawLine(p, 10, 10, 5, 10); g.DrawLine(p, 10, Height - 11, 10, Height - 6); g.DrawLine(p, 10, Height - 11, 5, Height - 11); g.DrawLine(p, Width - 11, 10, Width - 11, 5); g.DrawLine(p, Width - 11, 10, Width - 6, 10); g.DrawLine(p, Width - 11, Height - 11, Width - 11, Height - 6); g.DrawLine(p, Width - 11, Height - 11, Width - 6, Height - 11); // draw text using (StringFormat sf = new StringFormat()) { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; g.DrawString(Res.Get("Misc,Sample"), Font, SystemBrushes.WindowText, DisplayRectangle, sf); } // draw border if (Border != null) { using (GraphicCache cache = new GraphicCache()) { Border.Draw(new FRPaintEventArgs(g, 1, 1, cache), new RectangleF(10, 10, Width - 21, Height - 21)); } } } protected override void OnMouseDown(MouseEventArgs e) { BorderLines line = BorderLines.None; if (e.X > 12 && e.X < Width - 12 && e.Y > 5 && e.Y < 18) line = BorderLines.Top; else if (e.X > 12 && e.X < Width - 12 && e.Y > Height - 18 && e.Y < Height - 5) line = BorderLines.Bottom; else if (e.X > 5 && e.X < 18 && e.Y > 12 && e.Y < Height - 12) line = BorderLines.Left; else if (e.X > Width - 18 && e.X < Width - 5 && e.Y > 12 && e.Y < Height - 12) line = BorderLines.Right; if (Border != null && ToggleLine != null) { ToggleLine(this, new ToggleLineEventArgs(Border, line, (Border.Lines & line) == 0)); Refresh(); } } public BorderSample() { SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.OptimizedDoubleBuffer, true); BackColor = SystemColors.Window; Size = new Size(160, 94); } } }