Laden...

Icon blinken lassen

Erstellt von Rimm vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.838 Views
R
Rimm Themenstarter:in
19 Beiträge seit 2007
vor 16 Jahren
Icon blinken lassen

Ich habe eine UserControl in der unter anderem ein Bild (png, transparent) angezeigt wird. Jetzt möchte ich das Bild blinken lassen z.b. in rot.
Einer eine Idee wie man umsetzten kann, ohne ein neues Bild zu laden welches dann rot eingefärbt ist.
Es soll nur das Bild blinken, Rest vom UserControl soll normal bleiben

keine

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Rimmm,

auf welche Weise zeigst du das Bild denn momentan an?

herbivore

F
171 Beiträge seit 2006
vor 16 Jahren

Hallo Rimm,

ist das eine Vorgabe mit der *.png Datei und ist die Blinkrate konstant?
Wenn nein, dann würde ich nicht ein Zeile Code schreiben, sondern mir ein animiertes *.gif erzeugen bzw. basteln. Fertig.

Gruß falangkinjau

R
Rimm Themenstarter:in
19 Beiträge seit 2007
vor 16 Jahren

Es wird im moment in einer PictureBox angezeigt

keine

R
Rimm Themenstarter:in
19 Beiträge seit 2007
vor 16 Jahren

Das soll ja nicht durchgehen blinken, und es soll ein png bleiben

keine

2.187 Beiträge seit 2005
vor 16 Jahren

Hi,

Wie wärs mit einem halb-durchsichtigen Pannel in Rot, welches du über der PictureBox ein- und ausblendet? (Keine Ahnung ob das in System.Windows.Forms geht.)

Gruß
Juy Juka

U
44 Beiträge seit 2007
vor 16 Jahren

Nur so' ne Idee:

Variante 1
Bei Picturebox voreingestellte Images im Speicher vorhalten und über Timer wechselseitig zuweisen, bei Button Imagelist erstellen und über Timer den Zugriffsindex auf Imagelist ändern. Im einfachsten Fall also rotes und weißes Rechteck abwechselnd als Bild. Das macht aber keinen Spaß, deshalb ...

Variante 2 (ggf. weniger performant, aber sehr ausbaufähig)
Zur Laufzeit in Abhängigkeit vom Benutzerverhalten Image erstellen und Picturebox zuweisen.
Google mal nach ColorMatrix. Mit den Matrizen läßt sich so ziemlich alles machen.
Matrix33 ist z.B. für Durchsichtigkeit verantwortlich.

Beispiel für eine 80/20-durchsichtiges Image beim Verschieben in einem TreeView:

            Bitmap bmp1 = new Bitmap(imageListBaum.Images[QuellNode.Name]);
            ImageAttributes ia1 = new ImageAttributes();
            ColorMatrix cm1 = new ColorMatrix();
            cm1.Matrix33 = 0.8f;
            ia1.SetColorMatrix(cm1);

Wahrscheinlich brauchst Du aber auch einen Thread für die gleichzeitige Ausführung. Ich hatte doch mal irgendwann einen thread gemacht ... Hier ein Beispiel, noch aus VS2002:

namespace WindowsApplication1
{
	public class Form1 : Form
	{
		public Form1()
		{
		}
		[STAThread]
		static void Main() 
		{
		         Application.Run(new Form1());
		}
	}
	public class PanCla : Panel
	{
		Thread th = new Thread(new ThreadStart(Malen));
		th.Start();
	}
	public void Malen()
	{
	     while(true)
		{
			try{Thread.Sleep(0);}
			catch(ThreadAbortException e){}
		}
	}	

}

Gruß
Uwe

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo uwen2,

nur mal so am Rande: Das catch(ThreadAbortException e){} ist witzlos, zumindest wenn die Behandlung wirklich leer ist, denn

ThreadAbortException ist eine spezielle Ausnahme, die abgefangen werden kann, die aber am Ende des catch-Blocks automatisch wieder ausgelöst wird.

Mal angesehen davon, dass die Exception auch während des Prüfens der While-Bedingung auftreten kann und dann gar nicht erst gefangen werden würde.

herbivore