Hi,
da ich einen transparenten Button für mein Projekt brauche und ich keinen fand, habe ich mir selber einen gebastelt und möchte diesen nun allen zur Verfügung stellen.
Man kann die dll in die Toolbox importieren und den Button dann gleich wie den normalen verwenden, nur für die optische Ausgabe müssen/können ein paar Einstellungen vorgenommen werden:
Bekannte Fehler:
Ich hoffe jemand kann den Button brauchen.
Mit folgende Funktionen habe ich die Transparenz hingekriegt:
public TransparentButton()
{
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.SupportsTransparentBackColor | ControlStyles.AllPaintingInWmPaint | ControlStyles.Selectable | ControlStyles.UserPaint, true);
this.BackColor = Color.Transparent;
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020;
return cp;
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.InvokePaintBackground(this, e);
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
if (m_bMouseDown)
{
e.Graphics.FillRectangle(new SolidBrush(m_clDown), this.ClientRectangle);
if (imagePressed != null)
{
e.Graphics.DrawImage(imagePressed, 0, 0, base.Width, base.Height);
}
}
else if (m_bMouseHovered || m_bFocus)
{
e.Graphics.FillRectangle(new SolidBrush(m_clHover), this.ClientRectangle);
if (imageHover != null)
{
e.Graphics.DrawImage(imageHover, 0, 0, base.Width, base.Height);
}
}
else
{
e.Graphics.FillRectangle(new SolidBrush(m_clNormal), this.ClientRectangle);
if (imageNormal != null)
{
e.Graphics.DrawImage(imageNormal, 0, 0, base.Width, base.Height);
}
}
if (this.Text != "")
{
SizeF fSize = e.Graphics.MeasureString(this.Text, this.Font);
int xpos = Convert.ToInt32(this.Width / 2 - fSize.Width / 2);
int ypos = Convert.ToInt32(this.Height / 2 - fSize.Height / 2);
e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), xpos, ypos, new StringFormat(StringFormatFlags.NoClip));
}
}
Man muß als erstes eine Transparenz zulassen (CreateParams) und dann erstmals den Hintergrund transparend machen und schließlich beim painten den Hintergrund mitzeichnen (InvokePaintBackground).
Hallo zusammen,
das hört sich doch gut an, genau sowas suche ich. Allerdings kann ich die dll nicht einbinden. Ich erhalte einen Fehler, dass dies keine gültige Assembly oder COM-Komponente wäre. Liegt das daran, das ich VS 2003 verwende? Ist das eine VS 2005 dll? Wenn ja, gibt es auch eine VS 2003-Variante oder sonstige Alternativen?
Grüße,
Bierstuebl
Ja, liegt an VS 2k3 bzw .net 1.1. Die dll ist .net 2.0.
Mangels eines VS 2k3 kann ich dir auch keine .net 1.1 dll erstellen.
Ich kann dir höchstens den Source zukommen lassen und du erstellst dir das Control selber.
@bierstuebl: soweit ich das sehe, sollte sich die Komponente ohne Probleme in VS 2003 übersetzen lassen, das Projekt gibt's ja hier mit Quellcode.
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
Pack doch bitte mal ein bild rein 🙂 dann gibts diese probs nicht.