[Guide]Eigene Forms Machen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [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

      Quellcode

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

      nun fügt ihr über diesem Code

      Quellcode

      1. Dim ActualMousePos As Point

      en
      und in diese Sub fügt ihr

      Quellcode

      1. 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

      Quellcode

      1. If e.Button = Windows.Forms.MouseButtons.Left Then
      2. Dim mousePos As Point = Control.MousePosition
      3. mousePos.Offset(ActualMousePos.X, ActualMousePos.Y)
      4. Me.Location = mousePos
      5. 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

      Quellcode

      1. End

      damit wird das Programm Beendet
      für Minnimieren

      Quellcode

      1. Me.WindowState = FormWindowState.Minimized

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

      Quellcode

      1. If Me.WindowState = FormWindowState.Maximized Then
      2. Me.WindowState = FormWindowState.Normal
      3. Else
      4. Me.WindowState = FormWindowState.Normal
      5. 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

      Quellcode

      1. Dim ActualMousePos2 As Point
      2. Private Sub Panel1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown
      3. ActualMousePos2 = New Point(-e.X, -e.Y)
      4. End Sub
      5. Private Sub Panel1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove
      6. If e.Button = Windows.Forms.MouseButtons.Left Then
      7. Dim mousePos As Point = Control.MousePosition
      8. mousePos.Offset(ActualMousePos2)
      9. Me.Size = New Size(mousePos.X - Me.Location.X, Me.Size.Height)
      10. Panel1.Location = New Point(Me.Width - Panel1.Width, Me.Height - Panel1.Height)
      11. Panel2.Size = New Size(Me.Width, Panel2.Height)
      12. End If
      13. End Sub
      Alles anzeigen

      das meiste kennt ihr von Form1Move was ist neu

      Quellcode

      1. 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.

      Quellcode

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

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

      Quellcode

      1. 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

      Quellcode

      1. Dim ActualMousePos3 As Point
      2. Private Sub Panel2_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel2.MouseDown
      3. ActualMousePos3 = New Point(-e.X, -e.Y)
      4. End Sub
      5. Private Sub Panel2_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel2.MouseMove
      6. If e.Button = Windows.Forms.MouseButtons.Left Then
      7. Dim mousePos As Point = Control.MousePosition
      8. mousePos.Offset(ActualMousePos3)
      9. Me.Size = New Size(Me.Size.Width, mousePos.Y - Me.Location.Y)
      10. Panel2.Location = New Point(Me.Width - Panel2.Width, Me.Height - Panel2.Height)
      11. Panel1.Size = New Size(Panel1.Width, Me.Height)
      12. End If
      13. End Sub
      Alles anzeigen

      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

      Quellcode

      1. If e.Button = Windows.Forms.MouseButtons.Left Then
      2. Dim mousePos As Point = Control.MousePosition
      3. mousePos.Offset(ActualMousePos.X, ActualMousePos.Y)
      4. Me.Location = mousePos
      5. [COLOR="Red"]Panel1.Location = New Point(Me.Width - Panel1.Width, Me.Height - Panel1.Height)
      6. Panel2.Location = New Point(Me.Width - Panel2.Width, Me.Height - Panel2.Height)[/COLOR]
      7. 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

      Quellcode

      1. If Me.WindowState = FormWindowState.Maximized Then
      2. Me.WindowState = FormWindowState.Normal
      3. Panel1.Show()
      4. Panel2.Show()
      5. Else
      6. Panel1.Hide()
      7. Panel2.Hide()
      8. Me.WindowState = FormWindowState.Maximized
      9. 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
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

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

      ichbinniemand;194700 schrieb:

      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]