Mega Code Archive

 
Categories / C# / 2D Graphics
 

Text Format

/* GDI+ Programming in C# and VB .NET by Nick Symmonds Publisher: Apress ISBN: 159059035X */ using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Text; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace TextFormat_c {   public class TextFormat : System.Windows.Forms.Form   {     #region Class Local Variables     Rectangle UserRect      = Rectangle.Empty;     bool RectStarted        = false;     bool RectFinished       = false;     bool Typing             = false;     bool InsideRect         = false;     Cursor ClientCursor     = Cursors.Default;     string RectText         = string.Empty;     StringFormat BoxFormat  = StringFormat.GenericDefault;     #endregion     private System.Windows.Forms.Button cmdNew;     private System.Windows.Forms.Button cmdLeft;     private System.Windows.Forms.Button cmdTop;     private System.ComponentModel.Container components = null;     public TextFormat()     {       InitializeComponent();       //All the mouse move events use the same delegate       this.cmdNew.MouseMove  += new MouseEventHandler(this.Button_MouseMove);       this.cmdLeft.MouseMove += new MouseEventHandler(this.Button_MouseMove);       this.cmdTop.MouseMove  += new MouseEventHandler(this.Button_MouseMove);       this.KeyPress += new KeyPressEventHandler(this.FormKeyPress);       BoxFormat.Alignment = StringAlignment.Center;       BoxFormat.LineAlignment = StringAlignment.Center;     }     protected override void Dispose( bool disposing )     {       if( disposing )       {         if (components != null)          {           components.Dispose();         }       }       ClientCursor.Dispose();       base.Dispose( disposing );     }         #region Windows Form Designer generated code     /// <summary>     /// Required method for Designer support - do not modify     /// the contents of this method with the code editor.     /// </summary>     private void InitializeComponent()     {       this.cmdNew = new System.Windows.Forms.Button();       this.cmdLeft = new System.Windows.Forms.Button();       this.cmdTop = new System.Windows.Forms.Button();       this.SuspendLayout();       //        // cmdNew       //        this.cmdNew.Location = new System.Drawing.Point(16, 328);       this.cmdNew.Name = "cmdNew";       this.cmdNew.Size = new System.Drawing.Size(56, 24);       this.cmdNew.TabIndex = 0;       this.cmdNew.Text = "&New";       this.cmdNew.Click += new System.EventHandler(this.cmdNew_Click);       //        // cmdLeft       //        this.cmdLeft.Location = new System.Drawing.Point(104, 328);       this.cmdLeft.Name = "cmdLeft";       this.cmdLeft.Size = new System.Drawing.Size(104, 24);       this.cmdLeft.TabIndex = 1;       this.cmdLeft.Text = "Center Left Align";       this.cmdLeft.Click += new System.EventHandler(this.cmdLeft_Click);       //        // cmdTop       //        this.cmdTop.Location = new System.Drawing.Point(248, 328);       this.cmdTop.Name = "cmdTop";       this.cmdTop.Size = new System.Drawing.Size(104, 24);       this.cmdTop.TabIndex = 2;       this.cmdTop.Text = "Top Left Align";       this.cmdTop.Click += new System.EventHandler(this.cmdTop_Click);       //        // TextFormat       //        this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);       this.ClientSize = new System.Drawing.Size(392, 373);       this.Controls.AddRange(new System.Windows.Forms.Control[] {                                                                   this.cmdTop,                                                                   this.cmdLeft,                                                                   this.cmdNew});       this.MaximizeBox = false;       this.MinimizeBox = false;       this.Name = "TextFormat";       this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;       this.Text = "TextFormat";       this.Load += new System.EventHandler(this.TextFormat_Load);       this.ResumeLayout(false);     }         #endregion     [STAThread]     static void Main()      {       Application.Run(new TextFormat());     }     private void TextFormat_Load(object sender, System.EventArgs e)     {     }     protected override void OnPaint(PaintEventArgs e)     {       Graphics G = e.Graphics;       using(Pen P = new Pen(Brushes.Black, 1))       {         if ( !RectFinished )           P.DashStyle = DashStyle.Dash;         G.DrawRectangle(P,UserRect);       }       if (RectFinished && ClientCursor == Cursors.IBeam)         G.DrawString(RectText, new Font("Arial", 16), Brushes.Black,                                                  UserRect, BoxFormat);       base.OnPaint(e);     }     protected override void OnMouseDown(MouseEventArgs e)     {       //If left button then start the rectangle       if ( e.Button == MouseButtons.Left )       {         if (UserRect == Rectangle.Empty)         {           UserRect.X = e.X;           UserRect.Y = e.Y;           RectStarted = true;           RectFinished = false;         }       }       //If right button then start the edit       else if ( e.Button == MouseButtons.Right )       {         if ( UserRect != Rectangle.Empty )         {           ClientCursor = Cursors.IBeam;           this.Cursor  = ClientCursor;           Point pos    = new Point(UserRect.X+UserRect.Width/2,                                     UserRect.Y+UserRect.Height/2);           //Translate cursor screen postion to position on form           int Offset = this.Height-this.ClientRectangle.Height;           pos += new Size(this.Location.X, this.Location.Y+Offset);           Cursor.Position = pos;           Typing          = true;           this.KeyPreview = true;         }       }       base.OnMouseDown(e);     }     protected override void OnMouseUp(MouseEventArgs e)     {       base.OnMouseUp(e);       // A negative rectangle is not allowed.       // Mouse_down then Mouse_up without Mouse_move is not allowed       if (UserRect.Width <= 0 || UserRect.Height <=0 )          UserRect = Rectangle.Empty;       //Rectangle has ended       RectStarted = false;       RectFinished = true;       Invalidate();     }     protected override void OnMouseMove(MouseEventArgs e)     {       base.OnMove(e);       //Let program know if cursor is inside user rectangle       InsideRect = false;       if (UserRect != Rectangle.Empty)         if (UserRect.Contains(new Point(e.X, e.Y)))           InsideRect = true;              this.Cursor = ClientCursor;       //Increase the size of the rectangle each time the mouse moves.       if (RectStarted)       {         Size s = new Size(e.X-UserRect.X, e.Y-UserRect.Y);         UserRect.Size=s;         Invalidate();       }     }     private void cmdNew_Click(object sender, System.EventArgs e)     {       if ( Typing && InsideRect )         return;       //Start a new blank form       UserRect = Rectangle.Empty;       ClientCursor = Cursors.Default;       RectStarted = false;       RectFinished = false;       RectText = string.Empty;       this.KeyPreview=false;       Invalidate();     }     private void Button_MouseMove(object sender, MouseEventArgs e)     {       this.Cursor = Cursors.Default;     }     void FormKeyPress(object sender, KeyPressEventArgs e)     {       //Handle backspace key       if (e.KeyChar == (char)8)       {         if ( RectText != string.Empty )           RectText = RectText.Remove(RectText.Length-1, 1);       }       else         RectText += e.KeyChar;              Invalidate();     }     private void cmdLeft_Click(object sender, System.EventArgs e)     {       //Change horizontal alignement and redraw       BoxFormat.Alignment = StringAlignment.Near;       Invalidate();     }     private void cmdTop_Click(object sender, System.EventArgs e)     {       //Chnage vertical alignment and redraw       BoxFormat.LineAlignment = StringAlignment.Near;       Invalidate();     }   } }