Grundlage: Man zeichnet mit DrawRectangle ein Rechteck auf ein Graphics-Objekt. Zu diesem Rechteck erstellt man das Rechteck für den Schatten derart, dass es rundum in der Größe der Schattenbreite größer ist, ein sogenanntes umschließendes Rechteck. Heißt: das originale Rechteck hat dann gewissermaßen einen Rand der Schattenbreite. Beispiel: Dim origRect As Rectangle = New Rectangle(100, 100, 200, 200) Dim sw As Short = 20 ' Schattenbreite Dim shadowRect As Rectangle = New Rectangle(100 - sw, 100 - sw, 200 + sw, 200 + sw) Angenommen das origRect ist auf Form gezeichnet worden. Dim g As Graphics = Me.CreateGraphics
Den Schatten definiert man weiter mit
Dim sColor As Color = Color.Gray ' die Schattenfarbe
Dim opac As Short = 164 ' die Anfangstransparenz des Schattens
Dann kann man die unten gezeigte Funktion folgendermaßen anwenden: ' Schatten rundum zeichnen RectangleDropShadow(g, shadowRect, sColor, sw, opac, PositionOfShadow.AllCorners) Es ist möglich, durch Angabe von PositionOfShadow verschiedene Schattenformen zu definieren. Hier die Definitionen und die Funktion: ''' <summary> ''' Rechteck mit Schatten versehen ''' </summary> ''' <param name="tg">das Graphics-Element</param> ''' <param name="rc">das betreffende Rechteck</param> ''' <param name="shadowColor">die Schattenfarbe</param> ''' <param name="si">die Breite des Schattens</param> ''' <param name="maxOpacity">die höchste Transparenz</param> ''' <param name="art">die Art des Schattens</param> Public Sub RectangleDropShadow(tg As Graphics, rc As Rectangle, shadowColor As Color, si As Short, maxOpacity As Short, Optional art As PositionOfShadow = PositionOfShadow.AllCorners) Dim i As Short ' calculate the opacities Dim darkShadow As Color = Color.FromArgb(maxOpacity, shadowColor) Dim lightShadow As Color = Color.FromArgb(0, shadowColor) ' Create a brush that will create a softshadow circle Dim gp As GraphicsPath = New GraphicsPath() gp.AddEllipse(0, 0, 2 * si, 2 * si) Dim pgb As PathGradientBrush = New PathGradientBrush(gp) pgb.CenterColor = darkShadow pgb.SurroundColors = New Color() {lightShadow} ' generate a softshadow pattern that can be used to paint the shadow Dim bm As Bitmap = New Bitmap(2 * si, 2 * si) Dim g As Graphics = Graphics.FromImage(bm) g.FillEllipse(pgb, 0, 0, 2 * si, 2 * si) g.Dispose() pgb.Dispose() ' top side If art = PositionOfShadow.UpperRightCorner Or art = PositionOfShadow.UpperleftCorner _ Or art = PositionOfShadow.AllCorners _ Then tg.DrawImage(bm, New Rectangle(rc.Left + si, rc.Top, rc.Width - 2 * si, si), si, 0, 1, si, GraphicsUnit.Pixel) ' right side If art = PositionOfShadow.UpperRightCorner Or art = PositionOfShadow.BottomRightCorner _ Or art = PositionOfShadow.AllCorners Then _ tg.DrawImage(bm, New Rectangle(rc.Right - si, rc.Top + si, si, rc.Height - 2 * si), si, si, si, 1, GraphicsUnit.Pixel) ' left side If art = PositionOfShadow.UpperleftCorner Or art = PositionOfShadow.BottomLeftCorner _ Or art = PositionOfShadow.AllCorners Then _ tg.DrawImage(bm, New Rectangle(rc.Left, rc.Top + si, si, rc.Height - 2 * si), 0, si, si, 1, GraphicsUnit.Pixel) ' bottom side If art = PositionOfShadow.BottomRightCorner Or art = PositionOfShadow.BottomLeftCorner _ Or art = PositionOfShadow.AllCorners Then _ tg.DrawImage(bm, New Rectangle(rc.Left + si, rc.Bottom - si, rc.Width - 2 * si, si), si, si, 1, si, GraphicsUnit.Pixel) ' top left corner If art = PositionOfShadow.UpperleftCorner Or art = PositionOfShadow.AllCorners Then _ tg.DrawImage(bm, New Rectangle(rc.Left, rc.Top, si, si), 0, 0, si, si, GraphicsUnit.Pixel) ' top right corner If art = PositionOfShadow.UpperRightCorner Or art = PositionOfShadow.AllCorners Then _ tg.DrawImage(bm, New Rectangle(rc.Right - si, rc.Top, si, si), si, 0, si, si, GraphicsUnit.Pixel) ' bottom right corner If art = PositionOfShadow.BottomRightCorner Or art = PositionOfShadow.AllCorners Then _ tg.DrawImage(bm, New Rectangle(rc.Right - si, rc.Bottom - si, si, si), si, si, si, si, GraphicsUnit.Pixel) ' bottom left corner If art = PositionOfShadow.BottomLeftCorner Or art = PositionOfShadow.AllCorners Then _ tg.DrawImage(bm, New Rectangle(rc.Left, rc.Bottom - si, si, si), 0, si, si, si, GraphicsUnit.Pixel) bm.Dispose() End Sub Dieser Tipp wurde bereits 169 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Tipp des Monats Januar 2025 Dieter Otter Zeilen einer MultiLine-TextBox ermitteln (VB.NET) Dieser Zipp zeigt, wie man die Zeilen einer MultiLine-TextBox exakt so ermitteln kann, wie diese auch in der TextBox dargestellt werden. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |