Hi Community
Da ihr mir so gut in letzter Zeit helfen konnten, wollte ich einen Lösungsansatz für mein neuestes Dilemma.
(seht auch Anhänge)
Ausgangslage:
1. Form mit Borderstyle none
2. Panels am Rand, mit denen man die die Grösse der Form ändern kann
3. gezeichnete Schatten im Form.Paint Event
Problemstellung:
Wenn ich die Formgrösse ändere (was tadellos so funktioniert mithilfe eines timers), verändern sich die initial gezeichneten Schatten im Hintergrund nicht.
Darum habe ich im Form.sizechanged Event, Me.invalidate() eingefügt, um es jedesmal neu zu zeichnen.
Wie sich einige von euch denken können, flackert das gewaltig. Obschon me.doublebuffered auf True ist!
Die Fragen:
A. Kennt jemand von euch eine Möglichkeit, die gezeichneten Schatten ohne invalidate der Grösse der momentanen Form anzupassen?
B. Oder kennt jemand eine Möglichkeit, wie man das effizienter lösen kann?
Vielen Dank schon im Voraus!
Noch die Codes, fürs bessere Verständnis:
Der Resize Code im Timer Tick Event:
Spoiler anzeigen
Der Form Paint Event:
Spoiler anzeigen
Der Form Load Event:
Spoiler anzeigen
Der Form SizeChanged Event:
Da ihr mir so gut in letzter Zeit helfen konnten, wollte ich einen Lösungsansatz für mein neuestes Dilemma.
(seht auch Anhänge)
Ausgangslage:
1. Form mit Borderstyle none
2. Panels am Rand, mit denen man die die Grösse der Form ändern kann
3. gezeichnete Schatten im Form.Paint Event
Problemstellung:
Wenn ich die Formgrösse ändere (was tadellos so funktioniert mithilfe eines timers), verändern sich die initial gezeichneten Schatten im Hintergrund nicht.
Darum habe ich im Form.sizechanged Event, Me.invalidate() eingefügt, um es jedesmal neu zu zeichnen.
Wie sich einige von euch denken können, flackert das gewaltig. Obschon me.doublebuffered auf True ist!
Die Fragen:
A. Kennt jemand von euch eine Möglichkeit, die gezeichneten Schatten ohne invalidate der Grösse der momentanen Form anzupassen?
B. Oder kennt jemand eine Möglichkeit, wie man das effizienter lösen kann?
Vielen Dank schon im Voraus!
Noch die Codes, fürs bessere Verständnis:
Der Resize Code im Timer Tick Event:
VB.NET-Quellcode
- 'dim x2 as integer = 0
- 'dim y2 as integer = 0
- 'dim alignside as integer = 0
- 'bei den Panels gebe ich mousedown event einfach nur die alignside mit und timer start, und im mouseup event timer stop
- Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
- If alignside = 0 Then
- x2 = Me.Location.X - MousePosition.X
- y2 = MousePosition.Y - Me.Location.Y
- Me.Width = -x2
- Me.Height = y2
- ElseIf alignside = 1 Then
- x2 = Me.Location.X - MousePosition.X
- y2 = MousePosition.Y - Me.Location.Y
- Me.Width = -x2
- ElseIf alignside = 2 Then
- x2 = Me.Location.X - MousePosition.X
- y2 = MousePosition.Y - Me.Location.Y
- Me.Height = y2
- ElseIf alignside = 3 Then
- x2 = Me.Location.X - MousePosition.X
- y2 = MousePosition.Y - Me.Location.Y
- Me.Width = Me.Width - -x2
- Me.Location = New Point(Me.Location.X + -x2, Me.Location.Y)
- End If
- End Sub
Der Form Paint Event:
VB.NET-Quellcode
Der Form Load Event:
VB.NET-Quellcode
- Private Sub main_window_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Me.MaximumSize = New Size(My.Computer.Screen.WorkingArea.Width, My.Computer.Screen.WorkingArea.Height)
- Me.DoubleBuffered = True
- Call form_shadow.getClassLong(Me.Handle.ToInt32, form_shadow.GCL_STYLE, form_shadow.SetClassLong(Me.Handle.ToInt32, form_shadow.GCL_STYLE) Or form_shadow.CS_DROPSHADOW) 'formschatten
- End Sub
Der Form SizeChanged Event:
"Die menschliche Vorstellungskraft ist unendlich"
->Versuch dir mal 'ne neue Farbe auszudenken!
Mit Schleifen kann man alles lösen!
Dim d as Double = 1
Do until d = 0
d = (d / 2)
Loop ∞
->Versuch dir mal 'ne neue Farbe auszudenken!
Mit Schleifen kann man alles lösen!
Dim d as Double = 1
Do until d = 0
d = (d / 2)
Loop ∞
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „M-Stef“ ()