Mega Code Archive

 
Categories / C# Tutorial / GUI Windows Forms
 

Clipboard Viewer

using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Windows.Forms;     class ClipView: Form {      string[] astrFormats =       {       DataFormats.Bitmap, DataFormats.CommaSeparatedValue, DataFormats.Dib,      DataFormats.Dif, DataFormats.EnhancedMetafile, DataFormats.FileDrop,       DataFormats.Html, DataFormats.Locale, DataFormats.MetafilePict,       DataFormats.OemText, DataFormats.Palette, DataFormats.PenData,       DataFormats.Riff, DataFormats.Rtf, DataFormats.Serializable,       DataFormats.StringFormat, DataFormats.SymbolicLink, DataFormats.Text,       DataFormats.Tiff, DataFormats.UnicodeText, DataFormats.WaveAudio       };            Panel         panelDisplay;      RadioButton[] aradio;      RadioButton   radioChecked;          public static void Main()      {           Application.Run(new ClipView());      }      public ClipView()      {           panelDisplay = new Panel();           panelDisplay.Parent = this;           panelDisplay.Dock = DockStyle.Fill;           panelDisplay.Paint += new PaintEventHandler(PanelOnPaint);           panelDisplay.BorderStyle = BorderStyle.Fixed3D;               Splitter split = new Splitter();           split.Parent = this;           split.Dock = DockStyle.Left;               Panel panel = new Panel();           panel.Parent = this;           panel.Dock = DockStyle.Left;           panel.Width = 200;                      aradio = new RadioButton[astrFormats.Length];           EventHandler eh = new EventHandler(RadioButtonOnClick);               for (int i = 0; i < astrFormats.Length; i++)           {                aradio[i] = new RadioButton();                aradio[i].Parent = panel;                aradio[i].Location = new Point(4, 12 * i);                aradio[i].Size = new Size(300, 12);                aradio[i].Click += eh;                aradio[i].Tag = astrFormats[i];           }           AutoScaleBaseSize = new Size(4, 8);               Timer timer = new Timer();           timer.Interval = 1000;           timer.Tick += new EventHandler(TimerOnTick);           timer.Enabled = true;      }      void TimerOnTick(object obj, EventArgs ea)      {           IDataObject data = Clipboard.GetDataObject();               for (int i = 0; i < astrFormats.Length; i++)           {                aradio[i].Text = astrFormats[i];                aradio[i].Enabled = data.GetDataPresent(astrFormats[i]);                    if (aradio[i].Enabled)                {                     if (!data.GetDataPresent(astrFormats[i], false))                          aradio[i].Text += "*";                         object objClip = data.GetData(astrFormats[i]);                         try                     {                          aradio[i].Text += " (" + objClip.GetType() + ")";                     }                     catch                     {                          aradio[i].Text += " (Exception on GetType!)";                     }                }           }           panelDisplay.Invalidate();      }      void RadioButtonOnClick(object obj, EventArgs ea)      {           radioChecked = (RadioButton) obj;           panelDisplay.Invalidate();      }      void PanelOnPaint(object obj, PaintEventArgs pea)      {           Panel    panel = (Panel) obj;           Graphics grfx  = pea.Graphics;           Brush    brush = new SolidBrush(panel.ForeColor);               if (radioChecked == null || !radioChecked.Enabled)                return;               IDataObject data = Clipboard.GetDataObject();               object objClip = data.GetData((string) radioChecked.Tag);               if (objClip == null)                return;               else if (objClip.GetType() == typeof(string))           {                grfx.DrawString((string)objClip, Font, brush,                                 panel.ClientRectangle);           }           else if (objClip.GetType() == typeof(string[]))   // FileDrop           {                string str = string.Join("\r\n", (string[]) objClip);                    grfx.DrawString(str, Font, brush, panel.ClientRectangle);           }           else if (objClip.GetType() == typeof(Bitmap) ||                    objClip.GetType() == typeof(Metafile) ||                    objClip.GetType() == typeof(Image))           {                grfx.DrawImage((Image)objClip, 0, 0);           }           else if (objClip.GetType() == typeof(MemoryStream))           {                Stream stream = (Stream) objClip;                byte[] abyBuffer = new byte[16];                long   lAddress = 0;                int    iCount;                Font   font = new Font(FontFamily.GenericMonospace,                                      Font.SizeInPoints);                float  y = 0;                    while ((iCount = stream.Read(abyBuffer, 0, 16)) > 0)                {                     lAddress += 16;                     y += font.GetHeight(grfx);                         if (y > panel.Bottom)                          break;                }           }      } }