[C#] Dynamisches Icon als Tray-Icon (NotifyIcon)

Fabsch

Erfahrenes Mitglied
Hallo,

ich möchte mit C# das Icon des Tray-Icons dynamisch erzeugen und dann anzeigen, und zwar eine Uhr ;)
Die Uhr selber ist eigentlich kein Problem, das habe ich bereits gemacht.
Aber das Zeichnen in ein Icon, da weiß ich nicht, wie man das macht, da die Icon-Klasse von .NET das Zeichnen nicht zulässt bzw unterstützt.
Da ich jedoch keine eigene Klasse schreiben will (da ich mir dafür die ganze Struktur eines Icons ansehen müsste ;) ), suche ich eine andere Lösung dafür.

Suche schon die ganze Zeit und hab bis jetzt noch keine Lösung gefunden, also frage ich euch ;)

MfG
Fabsch
 
Hallo Fabsch,

es ist eigentlich kein Problem, ein Bitmap-Objekt in ein Icon-Objekt umzuwandeln:

Code:
// Die Bitmap muss irgendwo erstellt worden sein
Bitmap bmp = new Bitmap(...);

(...)

// Icon erstellen
Icon newIcon = Icon.FromHandle(bmp.GetHicon());


Wenn du die Uhr also z.B. per GDI+ zeichnest, kannst du nach dem Zeichnen das Icon ganz einfach mit dem obigen Code erstellen und als NotifyIcon anzeigen lassen.

Gruß
PhoenixLoe
 
Hallo,

stimmt, danke ;)

Da ich jedoch mit der Bitmap-Klasse nur einzelne Pixel setzen kann, muss ich wohl eine eigene Funktion dafür schreiben. Oder gibt es da schon irgendwas?

MfG
Fabsch
 
Hallo Fabsch,

per Graphics-Objekt und GDI+ lassen sich auch komplexe Grafikoperationen durchführen:

Code:
Bitmap bmp = new Bitmap(...)

(...)

Graphics g = Graphics.FromImage(bmp);
Zu diesem Thema gibt es bereits unzählige Posts in diesem Forum. Wenn Du in der Suchfunktion GDI+ eingibst, wirst du verstehen, was ich meine... ;-)

Gruß
PhoenixLoe
 
Hallo,

ja ich weiß, dass man mit dem Graphics-Object sowas zeichnen kann, jedoch kann man soweit ich weiß und bis jetzt gefunden hab, aus einem Graphics-Object kein Bitmap bzw Icon mehr bekommen. Das ist ja eben das Problem ;)

MfG
Fabsch
 
Hallo Fabsch,

das ist die falsche Vorstellung von der GDI+. Das Graphics-Objekt dient einfach nur dazu, Grafiken auszugeben (egal ob auf einem Steuerelement oder auf einer Bitmap im Speicher).
Alle Grafikoperationen, die du mit einem Graphics-Objekt direkt auf einer Bitmap ausführst, verändern diese natürlich. Alle Daten werden also in dem Bitmap-Objekt gespeichert.

Der folgende Code sollte Dir eigentlich weiterhelfen:

Code:
 // Neue Bitmap anlegen (300x300 Pixel)
Bitmap bmp = new Bitmap(300, 300);

// Graphics-Objekt erstellen
using(Graphics g = Graphics.FromImage(bmp))
{// Hier folgen beliebige Grafikoperationen.
// Als Beispiel wird im Folgenden eine Ellipse gezeichnet:
g.FillEllipse(Brushes.Blue, 0, 0, 300, 300);

(...)
}

 // Nach der using-Direktive kann das Bitmap-Objekt wieder ganz normal verwendet werden:
Icon ico = Icon.FromHandle(bmp.GetHicon());

(...)
Probier's aus. Du wirst feststellen, dass die Ellipse korrekt vorhanden ist. :)

Das, was Du angesprochen hast, gilt für das Zeichnen auf Steuerelementen.

Ich hoffe, dass Dir das weiterhilft.

Gruß
PhoenixLoe
 
Hallo,

danke, habe ich noch nicht gewusst ;)
Werde ich mal ausprobieren, aber ich denke, der Thread ist erledigt ;)

MfG
Fabsch
 

Neue Beiträge

Zurück