User Passwort
 Passwort speichern Passwort vergessen?
 
 
 
 Alle Foren
 PDA-Dev :: Windows Mobile
 C#
 Tranparenter Button
Autor Vorheriges Thema Thema Nächstes Thema  

GFEMajor

Neumitglied


1 Beitrag

Erstellt am: 23.01.2009 :  21:02:45 Uhr  Profil anzeigen  Autor eine Email senden  Antwort mit Zitat
Hi. Ich suche eine Möglichkeit einen Button (halb-)Transparent zu machen. Ich hab schon hier im Forum gesucht, aber die Möglichkeiten sind nicht so befriedigend. Es wird immer nur die Farbe auf eines Bereiches des Buttons auf die aktuelle hintergrundfarbe gesetz. Problem bei mir ist aber, dass ich keinen einheitlichen hintergrund habe (um genau zu sein ist es eine Straßenkarte auf der der Button dargestellt werden soll).
Ich häng mal den Code von meiner Lösung (aus der MSDN) an, vielleicht weis ja einer Rat.
Nochmal die Problembeschreibung:
Der Button(selbst ein Bild) soll eine gewisse Transparenz (zwischen 25% und 50% Sichtbarkeit) auf einem uneinheitlichen Hintergrund (eine andere Grafik) dargestellt werden.
Laufen soll das ganze auf dem CF 2.0. Zum erstellen benutze ich das Visual Studio 2005
 
public class ImageButton : Control
{
//Private members
private Image image;
//flag to indicate the pressed state
private bool bPushed;
private Bitmap m_bmpOffscreen;
public ImageButton()
{
bPushed = false;
//default minimal size
this.Size = new Size(21, 21);
}
protected override void OnPaintBackground(PaintEventArgs e)
{
//Do nothing
}
public Image Image
{
get
{
return image;
}
set
{
image = value;
}
}
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
Graphics gxOff; //Offscreen graphics
Rectangle imgRect; //image rectangle
Brush backBrush; //brush for filling a backcolor
if (m_bmpOffscreen == null) //Bitmap for doublebuffering
{
m_bmpOffscreen = new Bitmap(ClientSize.Width, ClientSize.Height);
}
gxOff = Graphics.FromImage(m_bmpOffscreen);
gxOff.Clear(this.BackColor);
if (!bPushed)
backBrush = new SolidBrush(Parent.BackColor);
else //change the background when it's pressed
backBrush = new SolidBrush(Color.LightGray);
gxOff.FillRectangle(backBrush, this.ClientRectangle);
if (image != null)
{
//Center the image relativelly to the control
int imageLeft = (this.Width - image.Width) / 2;
int imageTop = (this.Height - image.Height) / 2;
if (!bPushed)
{
imgRect = new Rectangle(imageLeft, imageTop, image.Width,
image.Height);
}
else //The button was pressed
{
//Shift the image by one pixel
imgRect = new Rectangle(imageLeft + 1, imageTop + 1, image.Width,
image.Height);
}
//Set transparent key
ImageAttributes imageAttr = new ImageAttributes();
imageAttr.SetColorKey(BackgroundImageColor(image),
BackgroundImageColor(image));
//Draw image
gxOff.DrawImage(image, imgRect, 0, 0, image.Width, image.Height,
GraphicsUnit.Pixel, imageAttr);
}
if (bPushed) //The button was pressed
{
//Prepare rectangle
Rectangle rc = this.ClientRectangle;
rc.Width--;
rc.Height--;
//Draw rectangle
gxOff.DrawRectangle(new Pen(Color.Black), rc);
}
//Draw from the memory bitmap
e.Graphics.DrawImage(m_bmpOffscreen, 0, 0);
Double Opacity = new Double();
Opacity = 0.25;
base.OnPaint(e);
}
private Color BackgroundImageColor(Image image)
{
Bitmap bmp = new Bitmap(image);
return bmp.GetPixel(0, 0);
}
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
bPushed = true;
this.Invalidate();
}
protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
{
bPushed = false;
this.Invalidate();
}
}
 

Bearbeitet von: GFEMajor am: 24.01.2009 08:02:05 Uhr
   

jojo

PDA-Programmierer


65 Beiträge

Erstellt  am: 02.02.2009 :  12:05:06 Uhr  Profil anzeigen  Autor eine Email senden  Besuche jojo's Homepage  Antwort mit Zitat
Hi,
schau dir mal das Microsoft Programmbeispiel RomanLegion an. Ich meine die machen genau das was du suchst.
Gruß jojo
Zum Anfang der Seite
  Vorheriges Thema Thema Nächstes Thema  
Springe nach:
 
  Bookmark & Share  
 
 
 
  Tags  
   
 
 



pda-dev.de

Quicklinks: Foren-Übersicht | Developer-News | Suche | Impressum

© just-works! Software

Zum Anfang der Seite

Snitz Forums 2000