Transparente Form - Ohne TransparencyKey

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von LuaX.

    Transparente Form - Ohne TransparencyKey

    Hallo!

    Mich würde mal interressieren ob es eine möglichkeit gibt, ohne Form.TransparencyKey eine Form vollkommen transparent zu machen,
    also eine mit FormBorderStyle=None.

    Falls die frage aufkommt warum ich kein TransparencyKey nutzen möchte:
    Die Umrandung von Controls ist dann meistens Unscharf bzw. verfärbt und das sieht blöd aus.

    MsfG,
    Luca
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Du kannst die Form-Property "Opacity" auf 0% stellen. Allerdings willst Du wahrscheinlich eventuelle Controls darauf noch sehen, oder?
    Inwieweit sind die Ränder unscharf? Was sind das für Bilder? Meist ist es die eigene (Nach)Bearbeitung in Malprogrammen, die hier zu Problemen führt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Nun, der Text war mal Schwarz :D
    Das Problem ist das ich u.A. auch alle verfügbaren farben verwenden möchte, und dennoch transparenz habe



    MfG Luca
    Bilder
    • yeah.PNG

      1,39 kB, 318×58, 544 mal angesehen
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    mach mal späßleshalber TransparencyKey und BackColor der Form nicht "Magenta", sondern z.B. "Control". Mit Magenta sieht's sch...lecht aus.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Bluespide Nun WPF wäre zwar möglich, aber ich möchte erstmal C#.NET "fertig" lernen, dann kann ich wieder was neues erlernen, aber Danke, ich behalte es im Hinterkopf.
    @VaporiZed Es kommt halt immer auf den Rahmen des Controls an, und wenn das Control als Hintergrund Control hat dann, Ja......
    @~blaze~ Ok, ich werde es mal probieren und mich dann nochmal melden.

    MfF Luca

    EDIT: Mittlerweile habe ich gemerkt, das ich nicht verstanden hast was du mit
    Setze einfach die Region-Eigenschaft der Form
    gemeint hast @~blaze~.
    Also auf was soll ich sie sitzen

    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „LuaX“ ()

    Achso der Code bleibt gleich?!
    Ich hatte befürchtet aus MessageBox.Show("Bla"); wird Computer.WindowsUtilities.System.DisplayFramework.Information.Output.Message(new Message("Blub", UTF8));

    Nun das mit Region habe ich noch nicht ganz verstanden......kann mir das jmd. erklären?
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Hallo, ich danke dir mit der Idee mit GraphicsPath, ich hatte das Probiert, hat aber nich so wirklich funktioniert.
    Mit ein bissle Recherche habe ich dann diesen Code gefunden:

    Spoiler anzeigen

    C#-Quellcode

    1. public struct MARGINS
    2. {
    3. public int LeftWidth;
    4. public int RightWidth;
    5. public int TopHeight;
    6. public int Buttomheight;
    7. }
    8. public partial class InvisibleForm : Form
    9. {
    10. [DllImport("dwmapi.dll")]
    11. public static extern int DwmExtendFrameIntoClientArea(IntPtr hWnd, ref MARGINS pMarinset);
    12. public InvisibleForm()
    13. {
    14. this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
    15. InitializeComponent();
    16. try
    17. {
    18. this.BackColor = Color.Black;
    19. MARGINS margins = new MARGINS();
    20. margins.LeftWidth = -1;
    21. margins.RightWidth = -1;
    22. margins.TopHeight = -1;
    23. margins.Buttomheight = -1;
    24. int result = DwmExtendFrameIntoClientArea(this.Handle, ref margins);
    25. }
    26. catch (Exception)
    27. {
    28. this.TransparencyKey = Color.Tan;
    29. this.BackColor = this.TransparencyKey;
    30. }
    31. }
    32. }


    Ist zwar C#, aber das kann man problemlos übersetzen,

    Danke an alle!
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Also ich fände es wirklich schön, wenn du auch ohne Quellcode irgendwann zu einer Lösung kommen kannst.

    VB.NET-Quellcode

    1. Using g As New GraphicsPath()
    2. g.AddString("test", Font.FontFamily, CInt(FontStyle.Regular), 12.0F, location, null)
    3. Me.Region = New Region(g)
    4. End Using

    location ist der Punkt, an dem auf der Form der Text sein soll. Entferne zudem den Paint-Code von dir und setze lediglich die BackgroundColor auf das, was sichtbar sein soll. Abgerundete Resultate wirst du aber denoch nicht erhalten, dafür ist Region einfach nicht gemacht.

    Viele Grüße
    ~blaze~
    Nun danke dir,
    aber mein Code funktioniert sowohl unter Windows 7 und 10 und ich glaube solange es funktioniert ist ok.

    Aber das nächste mal wenn ich sowas mache benutze ich den

    Quellcode

    1. GraphicsPath


    MfG, Luca
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.