[Guide]Eigene Forms Machen

  • Hallo Corelers
    Das wird warscheinlich eins meiner letzten tutorials
    es ist komplett sinlos und ihr werdet nur sehr wenig zum Thema Visual Basic dazulernen da sich dieses Tutorial zu den Formen ist
    Vllt haben sich mache von euch schonmal gefragt wie man eigene forms hinbekommt (wie z.b. mein neustes Tool) nun die antwort ist ganz einfach
    ein Bild und ein paar zeilen Code

    1. Eckige Forms
    Die eckigen Forms Gehen am leichtsesten dafür erstellen wir ein BackGround image das die Form darstellt (Photoshop, Gimp) das speichert ihr in einem der Formate ab:
    Jpeg, PNG, BMP, Gif(auch animiert)
    nun geht ihr in dem Form Editor von Visual Studio.
    Ihr Wählt die Form aus und seht im Eigenschafts fenster nach der Eigenschat Form Boarder Style.
    Die setzt ihr auf "None". Nun sollte sich eure Form verändert haben Windows Bar ist weg.
    nun geht ihr auf die eigenschaft Background Image und klickt auf den Button mit den 3 Punkten nun klickt ihr bei Projectressourcedatei auf Import. Im sich öffnenden Fenster wählt ihr die BG datei aus.
    nun habt ihr schonmal eure eigene Form jetzt kommen wir zu den eigenschaften die eine windows form hat
    1. Bewegen
    als erstes einmal denkt ihr darüber nach was auslöser sein soll (Bei windows forms ist is die windows bar) nehmt ihr das ganze Interface oder nur einen teil
    für nur einen teil erstellt ihr ein Panel, das ihr an die position setzt. nun geht ihr bei Panel1 für die bereich oder Form1 bei dem ganzen fenster im eigenschafts fenster auf Events (Der Blitz) und sucht nach MouseDown
    MouseDown ist das Event sobald/solange ein mausbutton runter geht(bei gedrückt halten wird es oft hintereinander ausgeführt)
    nun klickt ihr doppelt auf das leere Feld neben dem Event
    So nun kommt ihr in den Quelltext editor da sollte etwa das stehen

    Code
    Private Sub Form1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
        End Sub


    nun fügt ihr über diesem Code

    Code
    Dim ActualMousePos As Point


    en
    und in diese Sub fügt ihr

    Code
    ActualMousePos = New Point(-e.X, -e.Y)


    ein

    zur erklärung ActualMousePos ist die variable in der die position der Maus gespeichert wird wenn geklickt wurde man braucht -e da sonnst der wert falsch für den späteren code falsch ist
    bei MouseDown wird eben ein neuer werd übergeben
    so nun gehen wir wieder im Form editor zu den events und souchen MousMove raus und klicken wieder Doppelt auf das leere Feld und fügen in die neu entstandene sub folgendes ein

    Code
    If e.Button = Windows.Forms.MouseButtons.Left Then
                Dim mousePos As Point = Control.MousePosition
                mousePos.Offset(ActualMousePos.X, ActualMousePos.Y)
                Me.Location = mousePos
            End If


    damit wird als erstes mit der If abfrage überprüft ob auch mit dem linken Button geklickt wurde.
    die variable mousepos speichert erst mal die aktuelle maus Position
    dann mit offset wird sozusagen der unterschied zwischen ActualMousePos und MousPos berechnet nachdem sich auch die form dann mit Me.Location richtet
    Warum bewegt es sich nur wenn die mous gedrückt ist?
    ganz einfach weil sich nur dann ein unterschied mit ActualMousePos im offset erstellt wird

    nun nur noch picture Boxen für x, minniemieren, und maximieren button erstellen und bei dem Click event dann folgendes reinschreiben
    Für X

    Code
    End


    damit wird das Programm Beendet
    für Minnimieren

    Code
    Me.WindowState = FormWindowState.Minimized


    damit wird der Status des Interfaces auf minimiert gesetzt
    und für Maximieren

    Code
    If Me.WindowState = FormWindowState.Maximized Then
            Me.WindowState = FormWindowState.Normal
    Else
            Me.WindowState = FormWindowState.Normal
    End If


    durch die if abfrage wird abgefragt welcher status ist und welcher eingenommen werden mss

    nun zum vergrössern der Form durch ziehen
    dafür erstellen wir 2 Panels
    ich habe panel1 für die rechte seite für die seiteneinstellung genommen und pannel 2 für die Höhen einstellung unten hin gesetzt diese zieht ihr so das sie zur grössen einstellung dienen (solang wie die seite die sie abdecken und so von der breite so wenig wie möglich)
    nun geht ihr im eigenschafts fenster von Pannel 1 auf Cursor und stellt da den cursor Pfel rechts-links ein
    dann geht ihr auf events und erstellt damit die sub für MouseDown und MouseMove Event im code editor bearbeitet ihr die sub's dann so


    das meiste kennt ihr von Form1Move was ist neu

    Code
    Me.Size = New Size(mousePos.X - Me.Location.X, Me.Size.Height)


    vorher ging es um eine location die wird vom NullPunkt (Linke obere Bildschirmecke) abgemessen da wir allerdings jtz von einer size reden die von dem NullPunkt Fom1.Location ausgehet müssen wir auch den punkt für die neue grösse - den punkt der Form rechnen.

    Code
    Panel1.Location = New Point(Me.Width - Panel1.Width, Me.Height - Panel1.Height)


    das panel soll sich ja auch mitbewegen beim vergrössern der Form

    Code
    Panel2.Size = New Size(Me.Width, Panel2.Height)


    beim vergrössern der form muss sich auch die grösse des anderen panels verändern

    nun zum code des 2ten Panels


    gleiches wie oben

    nun gibt es noch einige probleme
    1. die panels sind grau
    das beheben wir indem wir im eigenschaftsFenster die eigenschaft BackgroundColor im Bereich Web ganz oben auf transparent setzen
    2. beim bewegen der form bewegen sich die pannels nicht
    dafür editiren wir den code so

    Code
    If e.Button = Windows.Forms.MouseButtons.Left Then
                Dim mousePos As Point = Control.MousePosition
                mousePos.Offset(ActualMousePos.X, ActualMousePos.Y)
                Me.Location = mousePos
                [COLOR="Red"]Panel1.Location = New Point(Me.Width - Panel1.Width, Me.Height - Panel1.Height)
                Panel2.Location = New Point(Me.Width - Panel2.Width, Me.Height - Panel2.Height)[/COLOR]
            End If


    damit wird einfach die position aktualisiert
    3. Beim Maximieren kommt es zu Bugs
    das geht auch ganz einfach indem wir den code so ändern

    Code
    If Me.WindowState = FormWindowState.Maximized Then
                Me.WindowState = FormWindowState.Normal
                Panel1.Show()
                Panel2.Show()
            Else
                Panel1.Hide()
                Panel2.Hide()
                Me.WindowState = FormWindowState.Maximized
            End If


    damit werden einfach die panels "ausgeschaltet" fürs maximieren

    so damit wären wir eigentlich fertig das programm ist benutzbar

    2. Runde/Mehreckige Formen
    So nun zu den mehreckigen Formen
    ihr erstellt ein Bild z.b. Ein Pentagramm. Den Hintergrund lasst ihr transparent und sichert es als png oder Gif datei. Nun sucht ihr eine Farbe die nie in eurem Programm vorkommen wird.
    Im Form Editor von Visual Basic stellt ihr bei den Eigenschaften für Form1 diese Farbe als Hintergrund Farbe ein und euer Bild als Background image
    nun Skript ihr in den Eigenschaften runter und sucht nach transparenzkey oder sowas und stellt da die gleiche Farbe ein.
    Und eure Form ist bereit

    Zitat von Steve Jobs

    Stay hungry - stay foolish.



  • Schönes Tutorial, benutze ich selber auch für meinen WAO Music Player :)

    [CENTER]

    [COLOR=Lime]
    50[/COLOR]|[COLOR=Lime]100[/COLOR]|[COLOR=lime]150[/COLOR]|[COLOR=lime]200[/COLOR]|[COLOR=Red]250[/COLOR]|[COLOR=Red]300[/COLOR]|[COLOR=Red]450[/COLOR]|[COLOR=Red]500[/COLOR][/CENTER]

  • Zitat von netw0rkcl0bber;194509

    Schönes Tutorial, benutze ich selber auch für meinen WAO Music Player :)

    Dann gib ihn doch ein Thanks, für seine Mühe. /loled.

    Schönes Tutorial. Sehr übersichtig, schön gemacht. Hast dir ein Thanks verdient :)

    [CENTER]​[/CENTER]

  • Wenn ihr wollt mache ich auch mal ein Tutorial wie man eigene Formen mithilfe von der System . Drawing dll erstellt da bei der far Methode immer Reste über bleiben die farblich nicht ganz passen

    Zitat von Steve Jobs

    Stay hungry - stay foolish.



  • [FONT="Comic Sans MS"][COLOR="DeepSkyBlue"][SIZE="2"]

    Zitat von ichbinniemand;194700

    Wenn ihr wollt mache ich auch mal ein Tutorial wie man eigene Formen mithilfe von der System . Drawing dll erstellt da bei der far Methode immer Reste über bleiben die farblich nicht ganz passen


    Wäre gut, habs selber in C# erlebt, da bleiben oftmals Ränder der Gui übrig, obwohl die eig nich sein dürfen[/SIZE][/COLOR][/FONT]

  • Ok werde mich dann nächstes wochenende dran setzen

    Diese Technik is wesentlich Ressourcen schonender, ist sauberer aber wesentlich komplexer

    Zitat von Steve Jobs

    Stay hungry - stay foolish.



  • Cool da freu ich mich schon drauf. Ich bin schon lange auf der suche nach einer Lösung um Runde Formen darzustellen ohne diese Pixeligen Ränder und Farbreste.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!