Eigene Form flackert

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Cr4ckY.

    Eigene Form flackert

    Hallo,
    habe mir heute ein Design für meine Windows-Forms-Anwendung in Photoshop erstellt, also das komplette Fenster: Rand, Controlbox, Titelleiste usw. Und hab dann die nötigen Stellen gesliced und als .png Bilder gespeichert. Nun, habe ich in VB eine Form mit dem Borderstyle = None erstellt und die verschiedenen Bildteile in Pictureboxen eingefügt. So, alles ist so wie ich es mir vorgestellt habe und ich kann das Fenster eigentlich auch mit diesem Code vergrößern:

    VB.NET-Quellcode

    1. Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Int32, ByVal wParam As Int32, ByVal lParam As IntPtr) As Int32
    2. Private Declare Function ReleaseCapture Lib "user32.dll" () As Int32
    3. Private Const HTBOTTOMLEFT As Int32 = 16
    4. Private Const HTBOTTOMRIGHT As Int32 = 17
    5. Private Const WM_NCLBUTTONDOWN As Int32 = &HA1
    6. 'Picturebox_Links.MouseDown
    7. ReleaseCapture()
    8. SendMessage(Me.Handle, WM_NCLBUTTONDOWN, HTBOTTOMLEFT, IntPtr.Zero)
    9. 'Picturebox_Rechts.MouseDown
    10. ReleaseCapture()
    11. SendMessage(Me.Handle, WM_NCLBUTTONDOWN, HTBOTTOMRIGHT, IntPtr.Zero)


    aber während man es vergrößert sieht man immer kurz einen Abstand zwischen den einzelnen Pictureboxen bis man halt mit dem Ziehen aufhört..kann man das vllt irgendwie anders machen, damit es so flüssig wie bei dem normalen Design ist?
    Hm..bringt leider nichts :(
    Sry hab mich oben ein wenig verschrieben, das Vergrößern an den Rändern geht ganz gut, ich meinte eigentlich, dass im Form_Load die Größe erstmal auf 50, 50 gestellt wird und in einem Timer mit Intervall = 1 immer um 50px vergrößert wird. Bei dieser Aktion ruckelt es sehr stark, bei den normalen Formen klappt es aber normal..
    Hm..GDI, hab mich damit noch nie beschäftigt, aber glaubst du wenn ich es mit GDI mache die Form sich dann in einem Timer flüssig um z.B. immer 50px vergrößern wird?
    Hab mal meine Form hochgeladen, kannst du mir sagen ob es schwer ist sowas zu Coden, also ohne Bilder? Und ob das vergrößern rechts und links auch noch gehen wird. Ist ja aber eigentlich ein simples Design..
    Dateien
    • Meine Form.rar

      (11,66 kB, 119 mal heruntergeladen, zuletzt: )
    Ich hab mal eine Frage dazu: Hab jetzt mal rumprobiert und auch schon die 1px dünne schwarze Umrandung hinbekommen :D aber bei meinem Design in Photoshop ist zusätzlich noch eine weiße transparente Umrandung. Nun wollte ich fragen wie ich diese "Transparenz" hinbekomme. Da ich aber keinen Verlauf als Hintergrund habe sondern eine Farbe könnte ich doch auch die Farbe dieser weißen Umrandung angeben oder? Also die Farbe ist #0b4b79 aber in VB kann man nur die Wörter angeben, also Black, Gray, White usw..

    Edit: Habs schon raus, glaube ich^^ Color.FromArgb(11, 75, 121)

    Edit2: So, bin fertig mit der Form :), fehlen nur noch diese zwei "Punkt-Dreiecke" rechts und links unten. Irgendwie find ich keinen Begriff um einen einzigen Punkt (.) zu malen, nur eine Linie..und noch was: wenn ich es dann gezeichnet habe, wie kann ich dann einstellen dass man die Form nur in diesem kleinen Bereich vergrößern kann? Bei den Pictureboxen hab ich MouseDown benutzt, aber hier hab ich keine Ahnung..

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Cr4ckY“ ()

    zu Edit2, 1.:
    für einen einzelnen Punkt verwendet man FillRectangle(ich weiß war für mich beim Umstieg aus VB 6 auch komisch...xD) also FillRectangle(PositionX,PositionY,1,1)...
    zu 2.:
    dazu verwendest du das MouseDown Event des Formulars und musst die Position der Maus überprüfen, also If X > 100 And X < 110 usw...(nur Dynamisch versteht sich...xD)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    So, alles ist fertig außer die Vergrößern-Funktion.. :(
    Kapier einfach nicht wie ich das anstellen soll, damit man nur in diesem bestimmten Bereich vergrößern kann. Hab im Internet was von Curso.Clip gelesen und auch getestet, aber das ist nur der Bereich wo die Maus sein darf..könntest du mir vielleicht ein kleines Beispiel oder irgendwas zeigen, weil ich weiß überhaupt nicht wie ich da anfangen soll..bei Cursor.Position kann ich auch immer nur einen Punkt angeben

    Irgendwie so in der Art:

    VB.NET-Quellcode

    1. 'Form1_MouseDown
    2. If Cursor.Position = New Point(x: 0 bis 5, y: Me.Height - 1 bis Me.Height - 5) then
    3. Me.Cursor = Cursors.SizeNESW
    4. 'Code zum vergrößern
    5. End If

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

    also du gehst für den Cursor ins MouseMove:

    VB.NET-Quellcode

    1. If e.X >=0 AndAlso e.X <= 5 AndAlso e.Y >= Me.Height -5 AndAlso e.Y <= Me.Height -1 Then
    2. Me.Cursor = Cursors.SizeNESW
    3. End If

    und bei MouseDown vom prinzip her dasselbe + den Code zum vergrößern...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Vielen Dank, klappt wunderbar!^^
    Edit: So, alles gemacht :D jetzt hätte ich aber noch eine Frage, kann ich diese Form als ein Control erstellen damit ich sie in die Toolbox reinpacken kann anstatt für jede neue Form den Code immer zu kopieren? Hab mich damals mal etwas bei den UserControls umgeschaut, und hab z.B. mal einen Button erstellt aber den konnte ich dann auf der Form nicht mehr vergrößern oder den Text ändern..

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

    du machst eine Klasse, welche von einer Form erbt, also mit "Inherits System.Windows.Forms.Form" und dort packst du den Code zum zeichnen usw. rein...im Formular, welches dann dieses Design haben soll tippst du wiederum Inherits KlassenName ein, somit wird der "Style" autom. übernommen...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---