Runde Ecken

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von NoIde.

    Hey Leute,
    Ich benutze seit einiger Zeit einen Code um Controls abzurunden (Siehe Spoiler). Aber ich finde, dass es viel zu Pixelig ist. Geht das auch damit es wirklich Rund ist?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Dim p As New Drawing2D.GraphicsPath()
    2. p.StartFigure()
    3. p.AddArc(New Rectangle(0, 0, 24, 24), 180, 90)
    4. p.AddLine(24, 0, Me.Width - 24, 0)
    5. p.AddArc(New Rectangle(Me.Width - 24, 0, 24, 24), -90, 90)
    6. p.AddLine(Me.Width, 24, Me.Width, Me.Height - 24)
    7. p.AddArc(New Rectangle(Me.Width - 24, Me.Height - 24, 24, 24), 0, 90)
    8. p.AddLine(Me.Width - 24, Me.Height, 24, Me.Height)
    9. p.AddArc(New Rectangle(0, Me.Height - 24, 24, 24), 90, 90)
    10. p.CloseFigure()
    11. Me.Region = New Region(p)
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down
    Nicht ohne zu tricksen ;) . Auch wenn der eine oder andere vllt. sagen wird OMG. Ich mach mir ein Image fertig(evtl. auch mehr), nutze ein eigenes Control und zeichne einfach das Image. So sieht es rund aus, obwohl das Control es garnicht ist. Kannst natürlich auch einfach nur geschickt zeichnen(PaintEvent) mit AntiAlising, natürlich sollte dir Hintergrundfarbe des Control Transparent oder die gleiche wie der Parent haben, lass am Rand etwas Platz und gut.



    In WPF geht das allerdings recht einfach, ohne Tricks.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

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

    @Toni03 Die Form ist kleiner als ihr Size!

    Wenn Du dies berücksichtigst, kommt Dein Arc auch tangential bei den Lines raus.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany

    Er setzt doch die Region, also wird das ein eigenes Control sein, nicht das Form ;) . Geht ja um abgerundete Controls nicht Forms.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Pascalony schrieb:

    Wäre die tatsächliche Formgröße die ClientSize der Form?
    Sieh Dir mal das von mir gepostete Bild gaaaaaaaanz genau an. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    NoIde schrieb:

    Geht ja um abgerundete Controls nicht Forms.

    Genau das meine Ich.

    RodFromGermany schrieb:


    Wenn Du dies berücksichtigst, kommt Dein Arc auch tangential bei den Lines raus.


    Wie meinst du das?
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down

    Toni03 schrieb:

    Genau das meine Ich.
    Der Button ist kleiner als sein Size!

    RodFromGermany schrieb:

    Wenn Du dies berücksichtigst, kommt Dein Arc auch tangential bei den Lines raus.
    Das kannst Du allerdings allein auszählen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Wenn Du dies berücksichtigst, kommt Dein Arc auch tangential bei den Lines raus.


    Das ändert allerdings nichts daran, das es pixelig bleibt, Winforms ist nun mal pixelbasiert und nicht vectorbasiert.


    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

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

    @NoIde Der Bildschirm stellt Pixel dar, auch Vektorgrafiken werden in Pixeln dargestellt.
    Wenngleich da manchmal ein schatten generiert wird, so dass es smooth aussieht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    @Toni03 Die Form ist kleiner als ihr Size!
    vb-paradise.de/index.php/Attac…4efb40e395470af8a85cd52ec
    Wenn Du dies berücksichtigst, kommt Dein Arc auch tangential bei den Lines raus.


    Ich habe etwas gefunden:

    VB.NET-Quellcode

    1. ​Graphics.SmoothingMode = SmoothingMode.AntiAlias


    Wie funktioniert das. Habe es mit Drawing2d.GraphicsPath probiert
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down
    Das ist eine "Einstellung" des Graphic-Objectes, lässt sich also nur da anwenden. EInfach vorm malen einstellen, dann den GraphicsPath zeichnen, hier mit einer Ellipse:

    VB.NET-Quellcode

    1. Private Sub MyControl_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    2. e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
    3. e.Graphics.FillEllipse(Brushes.Black, ClientRectangle)
    4. End Sub
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

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