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;
}
}
}
}
|