Icon dynamisch erstellen [gelöst]
Icon dynamisch erstellen [gelöst]
Hallo!
Ich möchte zur Laufzeit Icons generieren (um darüber z.B. Informationen im Systray anzuzeigen).
Mit Deplhi ging das so: http://www.swissdelphicenter.ch/torry/s ... php?id=426" onclick="window.open(this.href);return false;
Bei Lazarus fehlt aber die Methode TImageList.GetIcon() und mit TIcon.AssignImage() bin ich auch nicht weiter gekommen.
Hat jemand eine Idee?
Gruss, Joe
Ich möchte zur Laufzeit Icons generieren (um darüber z.B. Informationen im Systray anzuzeigen).
Mit Deplhi ging das so: http://www.swissdelphicenter.ch/torry/s ... php?id=426" onclick="window.open(this.href);return false;
Bei Lazarus fehlt aber die Methode TImageList.GetIcon() und mit TIcon.AssignImage() bin ich auch nicht weiter gekommen.
Hat jemand eine Idee?
Gruss, Joe
Zuletzt geändert von joe am Sa 24. Jul 2010, 22:13, insgesamt 1-mal geändert.
Re: Icon dynamisch erstellen
Ich weiss nicht genau, was du unter "dynamisch erstellen" verstehst, aber ich mach das jetzt mal.
Unter Linux klappt folgendes, du kannst das unter Win ja mal testen.
Bin aber nicht 100% sicher, ob das dokumentiertes Verhalten ist.
Unter Linux klappt folgendes, du kannst das unter Win ja mal testen.
Bin aber nicht 100% sicher, ob das dokumentiertes Verhalten ist.
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var ic:TPicture;
begin
ic:=TPicture.Create;
ic.Bitmap.Width:=32;
ic.Bitmap.Height:=32;
ic.Bitmap.Canvas.Brush.Color:=clyellow;
ic.Bitmap.Canvas.FillRect(0,0,32,32);
ic.Bitmap.Canvas.Brush.Color:=clblue;
ic.Bitmap.Canvas.FillRect(10,10,22,22);
Application.Icon:=ic.Icon;
ic.free;
end;
Re: Icon dynamisch erstellen
Klappt unter Windows auch
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!
it´s not a bug, it´s a feature!
Re: Icon dynamisch erstellen
Danke für die hilfreichen Antworten.
Letztlich hatte ich eine unzufriedenstelle Lösung gefunden. Mein Code war ein klein wenig Umständlicher also der von Theo. Ich hatte zuerst ein TBitmap erstellt und die dann per Assign einem TIcon zugewiesen.
Funktionierte so halbwegs. Problem war, dass ich da noch eine Zuweisung auf's Pixelformat drin hatte.
Mit folgende Änderungen funktioniert der Code bei mir zwar weiterhin unter Windows, aber nicht mehr unter Linux (mit Widget GTK2 unter Kubuntu 10.04):
Das AppIcon ist komplett gelb und das TrayIcon weiss. Ohne Zuweisung auf PixelFormat funktioniert es aber (Danke!).
Kleines Problem habe ich noch mit der Transparenz. Die funktioniert unter Linux zwar am AppIcon, aber offenbar nicht beim TrayIcon (Transparente Bereiche werden weiss dargestellt). Unter Windows geht's hingegen. Ich werd' da wohl mal einen Bug zu schreiben (oder mache ich noch was falsch?).
Gruss, Joe.
Letztlich hatte ich eine unzufriedenstelle Lösung gefunden. Mein Code war ein klein wenig Umständlicher also der von Theo. Ich hatte zuerst ein TBitmap erstellt und die dann per Assign einem TIcon zugewiesen.
Funktionierte so halbwegs. Problem war, dass ich da noch eine Zuweisung auf's Pixelformat drin hatte.
Mit folgende Änderungen funktioniert der Code bei mir zwar weiterhin unter Windows, aber nicht mehr unter Linux (mit Widget GTK2 unter Kubuntu 10.04):
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var ic:TPicture;
begin
ic:=TPicture.Create;
ic.Bitmap.PixelFormat:=pf4bit; // <- HIERmit gibt's Probleme unter Linux
ic.Bitmap.Width:=32;
ic.Bitmap.Height:=32;
ic.Bitmap.Canvas.Brush.Color:=clyellow;
ic.Bitmap.Canvas.FillRect(0,0,32,32);
ic.Bitmap.Canvas.Brush.Color:=clblue;
ic.Bitmap.Canvas.FillRect(10,10,22,22);
ic.Bitmap.Mask(clblue); // <- HIER fuer Transparenz
Application.Icon:=ic.Icon;
TrayIcon1.Icon:=ic.Icon; // <- HIER fuer TrayIcon
ic.free;
end;
Kleines Problem habe ich noch mit der Transparenz. Die funktioniert unter Linux zwar am AppIcon, aber offenbar nicht beim TrayIcon (Transparente Bereiche werden weiss dargestellt). Unter Windows geht's hingegen. Ich werd' da wohl mal einen Bug zu schreiben (oder mache ich noch was falsch?).
Gruss, Joe.
-
- Beiträge: 250
- Registriert: Di 16. Dez 2008, 20:13
- OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
- CPU-Target: 32/64Bit
Re: Icon dynamisch erstellen
Ich kenne das Problem bei GTK2, bei QT4 ist alles so, wie es sein soll. Ich würd bei gtk2 auf nen Bug tippen. Mir ist außerdem aufgefallen, dass auch python-gtk2-trayicons nicht transparent sind. Ich hab hier KDE4, wie's mit XFCE, bzw. Gnome aussieht kann ich nicht sagen.joe hat geschrieben:Kleines Problem habe ich noch mit der Transparenz. Die funktioniert unter Linux zwar am AppIcon, aber offenbar nicht beim TrayIcon (Transparente Bereiche werden weiss dargestellt). Ich werd' da wohl mal einen Bug zu schreiben (oder mache ich noch was falsch?).
mfg _X_
Re: Icon dynamisch erstellen
Ich würde meine App auch mal gerne mit dem QT WidgetSet kompilieren, bekomme aber immer diverse Fehlermeldungen. Hast du evtl. einen Tip oder Link dazu?_X_ hat geschrieben:...bei QT4 ist alles so, wie es sein soll.
Das mit der Transparenz des TrayIcon unter Gnome werde ich mal noch untersuchen - XFCE evtl. auch.
-
- Beiträge: 250
- Registriert: Di 16. Dez 2008, 20:13
- OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
- CPU-Target: 32/64Bit
Re: Icon dynamisch erstellen
Könnte daran liegen, das die libqt4pas nicht installiert ist. Mehr kann ich ohne die Fehlermeldungen nicht sagen.
mfg _X_
mfg _X_
Re: Icon dynamisch erstellen
Hmm, irgendwie stelle ich mich dazu heute zu blöd an._X_ hat geschrieben:Könnte daran liegen, das die libqt4pas nicht installiert ist.
Weder mit KPackagekit, Synaptic oder apt-cache search kann ich libqt4pas (früher hieß das wohl libqt4intf) finden.
Gemäß http://www.lazarus.freepascal.org/index ... 889.0.html" onclick="window.open(this.href);return false; funktioniert es bei mir also nicht.
Ok, hab mir jetzt libqt4pas5_2.1Qt4.5.3-1_i386.deb von http://packages.debian.org/de/squeeze/i ... 5/download" onclick="window.open(this.href);return false; gezogen und installiert.
Dann noch libqt4pas-dev_2.1Qt4.5.3-1_all.deb installiert (hab ich auch irgendwo bei packages.debian.org gefunden).
In meinem Lazarus Projekt musste ich dann noch im Unit Suchpfad "/usr/lib/lazarus/0.9.28.2/lcl/interfaces/qt/" eingeben, weil der Compiler die Unit "Interfaces" nicht finden konnte (der sucht offenbar in "/usr/lib/lazarus/0.9.28.2/lcl/units/i386-linux/qt/").
Dennoch bleibt eine Fehlermeldung beim linken:
Code: Alles auswählen
/usr/bin/ld: warning: /D/Pas/ChipDrive/Out/link.res contains output sections; did you forget -T?
/usr/bin/ld: cannot find -lqt4intf
TV.lpr(25,1) Error: Error while linking
TV.lpr(25,1) Fatal: There were 1 errors compiling module, stopping
Bin nachhaltig etwas verwirrt.

Re: Icon dynamisch erstellen
Die "Umbenennung" des Pakets dürfte nach der Freigabe von Lazarus 0.9.28 erfolgt sein. Für die Verwendung von libqt4pas wirst du um eine aktuelle Lazarus-Version (0.9.29) wohl nicht herumkommen.joe hat geschrieben:brauche ich doch libqt4intf anstelle von libqt4pas?!
knight
Re: Icon dynamisch erstellen
Ok, dann werd' ich wohl mal auf die Veröffentlichung der 0.9.29 warten...
- af0815
- Lazarusforum e. V.
- Beiträge: 6780
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Icon dynamisch erstellen
Oder den SVN verwendenjoe hat geschrieben:Ok, dann werd' ich wohl mal auf die Veröffentlichung der 0.9.29 warten...
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Icon dynamisch erstellen
Ja, damit sollte ich mich wohl mal vertraut machen.af0815 hat geschrieben:Oder den SVN verwendenjoe hat geschrieben:Ok, dann werd' ich wohl mal auf die Veröffentlichung der 0.9.29 warten...
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Icon dynamisch erstellen
Da wirst du lange warten können... Die ungeraden Releasenummer (letzte Zahl) sind immer Entwicklungsversionen (wie beim Linux-Kernel). Die nächste Veröffentlichung wird also Version 0.9.30 sein.joe hat geschrieben:Ok, dann werd' ich wohl mal auf die Veröffentlichung der 0.9.29 warten...
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein