Seite 1 von 2

Verfasst: Mittwoch 1. August 2007, 04:14
von nkoehring
Nagut, dann hier eine Zip mit dem Testprogramm von mir...

http://www.newagedesigns.de/bunt.zip

Verfasst: Mittwoch 1. August 2007, 07:25
von gerold
nkoehring hat geschrieben:Testprogramm
Hallo nkoehring!

Na, sieht doch schon mal nicht so schlecht aus. Wenn du die Anzeigeprobleme (Transparenz) unter Windows XP in den Griff bekommen hast, dann könnte es sein, dass es auch keine Probleme mehr unter Linux gibt. :-)

Ubuntu im VirtualBox:
http://gerold.bcom.at/bilder/petool_linux_01.png
http://gerold.bcom.at/bilder/petool_linux_02.png
Windows XP:
http://gerold.bcom.at/bilder/petool_windowsxp_01.png

mfg
Gerold
:-)

Verfasst: Mittwoch 1. August 2007, 14:45
von nkoehring
Ah, vielen Dank fuers Testen.

Mir ist aufgefallen, dass die Transparenz unter Windows zurueckkehrt, wenn ich das Fenster am unteren Monitorrand kurz "verschwinden" lasse und dann wieder in den sichtbaren bereich hole. Was ist denn der Unterschied zwischen einem Refresh und dieser Art des Neuzeichnens? Kann ich das vielleicht direkt erzwingen oder ist es doch eine Windows-Sache?

Verfasst: Mittwoch 1. August 2007, 15:23
von gerold
nkoehring hat geschrieben:Mir ist aufgefallen, dass die Transparenz unter Windows zurueckkehrt, wenn ich das Fenster am unteren Monitorrand kurz "verschwinden" lasse und dann wieder in den sichtbaren bereich hole. Was ist denn der Unterschied zwischen einem Refresh und dieser Art des Neuzeichnens? Kann ich das vielleicht direkt erzwingen oder ist es doch eine Windows-Sache?
Hallo nkoehring!

Wenn das Fenster verdeckt wird und danach wieder in den sichtbaren Bereich vorgeholt wird, dann wird EVT_PAINT automatisch ausgelöst.

``Refresh`` sollte das eigentlich auch tun. :K Aber ``Refresh`` arbeitet erst beim nächsten Event-Loop. Wenn du einen sofortigen Refresh erzwingen willst, dann führe zuerst ``Refresh`` und sofort danach ``Update`` aus. Vielleicht sogar noch ein ``YieldIfNeeded`` nachschieben... Zumindest sollte es dann laut Doku sofort neu gezeichnet werden. Ob es in der Praxis funktioniert, werde ich von dir erfahren. ;-)

mfg
Gerold
:-)

Verfasst: Mittwoch 1. August 2007, 17:49
von nkoehring
so, es sieht auch nach zusaetzlichem Update genauso aus wie vorher... YieldIfNeeded hab ich allerdings auch nirgends gefunden :K

EDIT: Es wird ja neugezeichnet, auch nach einem einfachen Refresh, aber dadurch wird eben die Transparenz ausgeloescht.
Ich habe das Problem jetzt so geloest, dass einfach mehrere Panels uebereinander gelegt und jeweils (un-)sichtbar geschalten werden.

Verfasst: Freitag 3. August 2007, 13:32
von gerold
Ich habe keine Ahnung, wie diese Buttons generiert werden, aber evt. passt dieser Link zu diesem Thema: http://xoomer.alice.it/infinity77/main/ ... utton.html

mfg
Gerold
:-)

Verfasst: Freitag 3. August 2007, 14:45
von Sr4l
Hallo ich kämpfe ja auch gerade damit wx / PNG.

MaskColour #000000 ist nicht ideal, aber der mir die Grafiken erstellt ist das durch eine Gameengine (3dGS) gewohnt das #000000 Transparent ist.

Manchmal funktioniert bei mir Transparenz und manchmal nicht, die Bilder die ich geschickt bekomme ( mit Adobe Photoshop) erstellt funzktionieren 100%, dann habe ich jedoch das Bild nach bearbeitet mit Gimp und habe nun so eine weissen Rand den ich nicht mehr weg bekomme.
So wie ein Pixel einmal rund ums Bild wird mit default BackgroundColour gemacht, alles weil ich da mit Gimp nachgearbeitet habe.
Halbtransparenz geht nur auf einem wx Bild aber nicht da wo es auf den DesktopHintergrund geht.
Also am besten geht es bei mir über die MaskColour.
Bei meine Buttons muss ich allerdings sagen habe ich nur Transparenz (GIMP) und es geht auch siehe das Close X oben und Login Button

Screenshot:
Bild

Code der das Bild erzeugt, auf das ich meine Buttons setze:

Code: Alles auswählen

class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, "MK3d Loader", style = wx.FRAME_SHAPED | wx.SIMPLE_BORDER )

        panel = wx.Panel(self)
        self.panel = panel
        self.panel.SetBackgroundColour("#4F3217")
        self.panel.Bind(wx.EVT_PAINT, self.OnPaint)
        .........
        ....

    def OnPaint(self, evt):
        dc = wx.PaintDC(self.panel)
        self.bmp = wx.Bitmap("panel.png")
        self.SetClientSize((self.bmp.GetWidth(), self.bmp.GetHeight()))
        dc.DrawBitmap(self.bmp, 0,0, True)
        self.bmp.SetMaskColour("#FFFFFF")
        self.SetShape(wx.RegionFromBitmap(self.bmp))
PS: Wie man sieht bekomme ich die BackgroundColour von den ListBoxen nicht gesetzet, warum?

Code: Alles auswählen

        self.packet_install = wx.ListBox(self.panel, -1, (538, 169), (122, 121), ["lol","lal"])
        self.packet_install.SetBackgroundColour("#4F3217")
*edit*
habe ListBox gegen ListCtrl getauscht und alles geht.