Teile des Programmhintergrunds transparent machen



  • Bei mir funktioniert das mit SetStyle und BackColor = Color.Transparent auch nicht (habs schon in de ctor geschrieben)...
    Eine andere Möglichkeit ist mittels TransparencyKey (hab den MSDN-link leider gerade nicht zur hand) Da ich aber auf meiner Form Fotos anzeigen will, kann ich keine Farbe Transparent machen, weil auf Fotos grundsätzlich jede Farbe vorkommen kann.

    Sind WinForms überhaupt geeignet, solche Dinge zu realisieren? Oder sollte ich mich besser in WPF einarbeiten? Oder gibt es noch andere, evtl. bessere Lösungen?

    mfg Argus Magnus

    :: edit ::

    Das könnte er sein 😉



  • Diesen Link hatte ich auch schon.
    Hat jedoch bei mir auch nicht gewirkt, da mit dem Transparency-Key Farben transparent gemacht werden, die auf der Form angebracht werden - nicht jedoch Teile der Form selbst.



  • doch, dass hat bei mir funktionirt. Ich habe für den TransparencyKey und meinen Hintergrund dieselbe Farbe gewählt und meine Form war tatsächlich Transparent. Aber leider ist dann jedes Pixel auf der Form (und sei es auf einem Foto das in einer PictureBox angezeigt wird), welches diese Farbe hat, transparent. Was nicht dem gewünschten Effekt entspricht 😞



  • Möglicherweise kannst du für die PictureBoxen einen anderen TransparencyKey nutzen? Oder ihn dafür ausstellen?
    Oder du nimmst einfach so ein krasses lilablassblau, was mit hoher wahrscheinlichkeit nicht in den Bildern vorkommt.

    //EDIT:

    Du kannst ja einfach mal R255, G0, B255; Du ersetzt ja nicht den Farbton, sondern genau diese Farbe, falls sie vorkommt. Müsste ja eigentlich funktionieren.


  • Administrator

    Ich habe ein paar Tests laufen lassen auch auf WinXP. Das mit SetStyle scheint wirklich nicht zu funktionieren unter WinXP SP3. Ich habe es jedenfalls auch nicht zum laufen gebracht. Die Methode mit TransparencyKey und OnPaintBackground haben allerdings funktioniert.

    Wahrscheinlich machst du irgendwo irgendetwas falsch. Allerdings habe ich leider keine Zeit mich durch einen fremden Quellcode zu wühlen. Tut mir leid.
    Wenn er nicht zu gross ist, kannst du ihn ja trotzdem mal als zip File hier anbieten. Vielleicht nimmt sich jemand anderes die Zeit. Aber die Chancen sind meistens gering.

    Grüssli



  • Also mit der onpaintbackground Methode wird bei mir der Hintergrund schwarz. Wenn ich dann den TransparencyKey auf schwarz stelle ist alles transparent, ausser die Buttons und Labels.
    Wie kann man den "Rang" von Buttons und Labels bearbeiten, also einstellen welches oben angezeigt wird und welches darunter verschwindet?
    Ich will so mal ein bisschen rumprobieren.
    __________________________________________________________________________________
    EDIT: okay, habe nun rausgefunden, wie man den Z-Index ändert.



  • Bei Fotos können eben wirklich alle Farben vorkommen. Selbst wenn da nur ein paar wenige pixel betroffen sind, fällt das doch auf. Ich hab auch versucht, den TransparencyKey auf Color.Transparent und den Background auf Color.Transparent zu setzen. Das hat zwar funktioniert, aber sogar diese "Farbe" ist in den Fotos vorgekommen (was ich komisch finde, dachte jpg's können nicht transparent sein).

    Egal, ich schau mir jetzt zuerst mal WPF genauer an, ist anscheinend geeigneter für solche Spielereien als WinForms 🙂

    mfg



  • So. Meine Arbeit ist getan 😃
    ich habe nun die Variante mit onpaintbackground genommen, welches meinen gesamten Hintergrund geschwärzt hat. dann habe ich einfach mit der TransparencyKey Funktion das schwarz auf transparent gesetzt. Die Hintergrundgrafik habe ich dann in eine PictureBox gesetzt und in den Hintergrund geschickt.
    Ist zwar keine professionelle Lösung, aber hat den Effekt erzielt.

    Danke, Thread erledigt.
    MFG Deffcon


Anmelden zum Antworten