vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück
Rubrik: Grafik und Font · Grafische Effekte   |   VB-Versionen: VB202207.12.24
Ein Schatten für ein gezeichnetes Rechteck

Es wird eine Funktion veröffentlicht, die das Zeichnen eines Schattens um ein Rechteck realisiert.

Autor:   Dietrich HerrmannBewertung:     [ Jetzt bewerten ]Views:  169 
ohne HomepageSystem:  Win7, Win8, Win10, Win11kein Beispielprojekt 

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

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel