DropShadow onder Form maken??

Status
Niet open voor verdere reacties.

RubenK

Gebruiker
Lid geworden
23 sep 2008
Berichten
23
Hé...

Ik ben al een hele tijd bezig geweest met zoeken op internet en ik kan het nergens vinden. Ik heb een Plaatje in een PictureBox als Form, maar ik kan er niet uitkomen hoe ik er een Schaduw onder krijg.

Ik hoop dat iemand het wel weet.
Alvast bedankt.

Ik Bedoel iets zoals dit:

DropShadow.jpg
 
Hey

Wat bedoel je met "een Plaatje in een PictureBox als Form"?
 
Ik heb dat plaatje van het voorbeeld (maar dan zonder slagschaduw)
als Form. Oftewel ik heb geen Borderstyle, maar gebruik die Picturebox als Form.
 
Stel bij het form zelf het plaatje in als achtergrond van je form...

Lijkt me zeer onlogisch dat je zoiets met een picturebox doet maat ligt vast aan mij...:o
 
Idd, vrij logisch dat je het bij je form doet en niet in een picbox :)
 
Ik geloof niet dat jullie helemaal begrijpen wat ik probeer te doen.
Als ik dat plaatje als achtergrond van de From zet dan heb ik dus het normale scherm (met Min, Max en sluit knoppen.) en het plaatje binnen deze normale Windows Form.

Ik wil dat plaatje gebruiken als Form. (oftewel ik wil geen normaal windows scherm zien)
Dus als ik mijn plaatje als achtergrond instel v.d Form en dan de FormBorderStyle op None zet dan heb ik een plaatje zonder slagschaduw, en is niet te verplaatsen.

Via de PictureBox kan ik hem ook verplaatsen.
Maar ik krijg er geen schaduw onder.
 
Werkt die tutorial van ninjaplayer dan niet?

Daar word uitgelegd hoe je een afbeelding als form gebruikt, en ook hoe je transparante (nodig voor shaduw!) delen kan maken :)
 
Heb wat zitten klooien vanochtend.

Maar kwam niet verder met die schaduw. Die moet je met hdc namelijk buiten je form gaan tekenen. Ik kon het wel tekenen maar de schaduw werd niet opnieuw getekend als het form werd verplaatst. Bovendien zal hij door het tekenen erg traag worden.

Code:
Public Class Form1

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)

        Select Case m.Msg
            Case 132
                MyBase.WndProc(m)
                If m.Result = 1 Then m.Result = 2
            Case Else
                MyBase.WndProc(m)
        End Select

    End Sub

    Protected Overrides Sub OnPaint(ByVal pe As PaintEventArgs)

        Dim a As New System.Drawing.Drawing2D.LinearGradientBrush(New RectangleF(0, 0, Me.Width, Me.Height), Color.LightGray, Color.Black, Drawing.Drawing2D.LinearGradientMode.Vertical)
        Dim g As Graphics = Me.CreateGraphics
        g.FillRectangle(a, New RectangleF(0, 0, Me.Width, Me.Height))
        g.Dispose()

        Dim path As System.Drawing.Drawing2D.GraphicsPath = New System.Drawing.Drawing2D.GraphicsPath()

        path.StartFigure()
        path.AddArc(New Rectangle(0, 0, 40, 40), 180, 90)
        path.AddLine(40, 0, Me.Width - 40, 0)
        path.AddArc(New Rectangle(Me.Width - 40, 0, 40, 40), -90, 90)
        path.AddLine(Me.Width, 40, Me.Width, Me.Height - 40)
        path.AddArc(New Rectangle(Me.Width - 40, Me.Height - 40, 40, 40), 0, 90)
        path.AddLine(Me.Width - 40, Me.Height, 40, Me.Height)
        path.AddArc(New Rectangle(0, Me.Height - 40, 40, 40), 90, 90)

        Me.Region = New Region(path)
        Me.Opacity = 50
        Me.Show()

    End Sub


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        FormBorderStyle = Windows.Forms.FormBorderStyle.None
        Me.Width = 400
        Me.Height = 400
        Me.Left = 150
        Me.Top = 200

    End Sub

End Class
 
Die tutorial van Ninja Player heeft me inderdaad tot het punt geholpen waar ik een eigen ontwerp maak en die kan verplaatsen.
Ik krijg alleen die schaduw er niet onder. Ik dacht dat het niet zo moeilijk zou zijn.
Ik heb ook nog even flink op internet gezocht en kwam erachter dat je het ook kan doen met een tweede Form die dan de Schaduw-Form wordt en precies achter de 1e Form moet blijven.

(leek me een beetje lastig)
Maar ik blijf wel zoeken en proberen als ik wat weet Post ik het wel. Hulp is altijd welkom :)
 
Dan heb je waarschijnlijk mijn code nog niet geprobeerd.

want :

Code:
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)

        Select Case m.Msg
            Case 132
                MyBase.WndProc(m)
                If m.Result = 1 Then m.Result = 2
            Case Else
                MyBase.WndProc(m)
        End Select

    End Sub

zorgt ook voor de verplaatsing.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan