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 1.116 mal aufgerufen.
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv 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. |
Neu! sevPopUp 2.0 ![]() Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Tipp des Monats Dieter Otter Alle Datumsangaben einer Datei ermitteln Eine Funktion, welche das Erstellungsdatum, das Datum des letzten Zugriffs und der letzten Speicherung einer Datei zurückgibt. Access-Tools Vol.1 ![]() Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
|
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. |
|||||||||||||||||


Ein Schatten für ein gezeichnetes Rechteck


