Laden...

Transparenter Button

Erstellt von CaptainIglo vor 17 Jahren Letzter Beitrag vor 16 Jahren 10.198 Views
C
CaptainIglo Themenstarter:in
366 Beiträge seit 2005
vor 17 Jahren
Transparenter Button

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:

  • ColorNormal/-Hover/-Down: Die Grundfarbe des Buttons beim jeweiligen Zustand
  • ImageNormal/-Hover/-Down: Ein Bitmap, dass auf den Button gelegt werden kann. Kann auch leer sein. Das Bitmap kann eine transparenten Hintergrund haben, welcher auch transparent ist.
  • Radius: Radius mit dem die Ecken abgerundet werden.
  • TransperencyNormal/-Hover/-Down: Die Transparenz beim jeweiligen Zustand: 0 -> durchsichtig; 255 -> Voll sichtbar

Bekannte Fehler:

  • beim Rollover "flacker" es manchmal kurz (trotz DoubleBuffer)

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).

B
14 Beiträge seit 2006
vor 17 Jahren

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

C
CaptainIglo Themenstarter:in
366 Beiträge seit 2005
vor 17 Jahren

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.

2.921 Beiträge seit 2005
vor 17 Jahren

@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.

X
92 Beiträge seit 2007
vor 16 Jahren

Pack doch bitte mal ein bild rein 🙂 dann gibts diese probs nicht.