Bitmaps darstellen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

Hallo,

Ich bin gerade dabei an einem Datei-Browser zu arbeiten.
Als Grundlage habe ich wxPython.
Mit wxListCtrl soll eine Liste mit Dateien erzeugt werden.
Nun möchte ich das Default-Datei-Symbol in der Liste mit "InsertImageStringItem()" darstellen.
Über die Registry hole ich mir das zur Dateiendung passende Dateisymbol.
Nun treten aber drei Probleme auf:

1.
Mit

Code: Alles auswählen

ext=".py"
openReg=wreg.OpenKey(wreg.HKEY_CLASSES_ROOT, wreg.QueryValue(wreg.HKEY_CLASSES_ROOT,ext))
path=wreg.QueryValue(openReg, "DefaultIcon")
hole ich mir das DefaultIcon. Aber nicht jeder Value wird mir ausgegeben. Bei manchen Dateiendungen schreibt er:
WindowsError: [Errno 13] Die Daten sind unzulässig
und das obwohl der Value vorhanden ist. Warum?

2.
Einige Icons sind in Dll oder exe-Dateien eingebunden. Wie kann ich die Icons daraus herauslösen um sie zu verwenden?

3.
Die Icons liegen im Foramt 32x32 pixel vor. Ich benötige sie aber im Format 16x16 pixel. Gibt es eine Möglichkeit sie zu skalieren?

Ich hoffe ihr könnt mir ein wenig weiterhelfen! Danke
Gruß, Harry
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Hallo Harry
das sind schwierige Problem :shock:
Folgendes hab ich gefunden:
es wird empfohlen die Funktion SHGetFileInfo zu verwenden. Diese kannst Du mit Hilfe von ctypes aus einer dll ausführen.
Wie das bspw. geht wird hier erläutert.

ctypes lohnt eine genauere Betrachtung. Hab es auch für meinen SciteBrowser benutzt und fand das wirklich gut!

zu 3)
Falls Du also irgendwann mal ein wxIcon hast (;)) könntest Du es vermutlich mit setHeight() und setWidth() anpassen.
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

Hallo,

Ich habs rausbekommen wie es geht. :D
Folgender Code erfüllt alle Anforderungen die ich mir vorgestellt habe:

Code: Alles auswählen

mtm=wxMimeTypesManager()
ft=mtm.GetFileTypeFromExtension(".txt")
icon=ft.GetIcon()
        
self.il = wxImageList(16,16)
self.idx1 = self.il.AddIcon(icon)
self.list.SetImageList(self.il, wxIMAGE_LIST_SMALL )
        
self.list.InsertImageStringItem(0, "neu.txt",self.idx1)
Die ersten drei Zeilen liefern mir das Icon zur File-Extension.
Die nächsten drei Zeilen fügen mir im gewünschten Format das Icon zu einer Imageliste.
Und in der letzten Zeile füge ich das Icon zusammen mit einem String zu meinem wxListCtrl.
Gruß, Harry
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Bild
Gut zu wissen, dass es sowas gibt.
re:

Hallo Christopy,

Übrigens noch danke für deinen Beitrag. Auch der war recht interessant.
Antworten