Hallo liebe Community.
In diesem Tutorial möchte ich euch zeigen wie man eine SlideShow (basis) erstellt.
Dann fangen wir mal an:
Als erstes erstellt ihr eine einfache Form die etwa so aussehen soll:
Die Eigenschaften könnt ihr alle eigentlich selbst entscheiden. Falls ihr Sie so haben wollt wie ich, habe ich sie hier mal:
Eigentlich sind alle Eigenschaften nur Optisch. Jedoch sieht es so meiner Meinung nach am besten aus, da ja schwarz eingeblendet wird.
Kommen wir nun zum Code:
Ok als erstes erstellen wir eine Klasse unter dem Namen: Functions
Diese ist etwas komplizierter.
Wir importieren zuerst:
Nun kommen wir zu dem Modul das wir erstellen bzw. zu den Publics und Privats:
Sooo...
Nun kommen wir zu unserer ersten Sub:
-Erklärungen beigesetzt-
Jetzt komme ich auch schon zu den Übergangseffekten.
(Ihr könnt es mit
einkasteln.
Ich entschuldige mich gleichmal dafür dass hieer manchmal die erklärungen fehlen, ich hatte keine zeit. Kommen aber noch.
Übergangseffekte
Jetzt der Aufruf aller subs, bzw. das Bilderladen / Einblenden (in Form1.vb)
Ok zuerst benötigen wir einen BackGround-Worker.
So Nun erstellen wir die beiden Subs.
Zuerst die Load_Images sub. Diese Ladet die Bilder aus einem Vorgegebenem Ordner.
Diesen könnt ihr natürlich bearbeiten.
Ich glaube hier erklärt sich eigentlich alles von selbst.
Und nun kommen wir zu dem Ein-Blendungseffekt.
Ich habe hier in den Code gleich die Erklärungen eingefügt.
Das wars auch schon.
Ich hoffe ich konnte euch mit diesem Tutorial helfen.
Screenshots von Fertigem-Programm
Wie man leicht er kennen kann, ist das Bild leicht transparent.
Bild, mitten im Übergang.
Edit by ErfinderDesRades: Die Downloads sind leider down.
Bitte Downloads als VBP-DateiAnhang anhängen - nicht auf Fremd-Servern!
18.01.2023: Code-Quellen-Link wurde entfernt, da der Code nicht mehr zur Verfügung steht, auch nicht beim Autor selbst. ~VaporiZed
In diesem Tutorial möchte ich euch zeigen wie man eine SlideShow (basis) erstellt.
Dann fangen wir mal an:
Als erstes erstellt ihr eine einfache Form die etwa so aussehen soll:
Die Eigenschaften könnt ihr alle eigentlich selbst entscheiden. Falls ihr Sie so haben wollt wie ich, habe ich sie hier mal:
Eigentlich sind alle Eigenschaften nur Optisch. Jedoch sieht es so meiner Meinung nach am besten aus, da ja schwarz eingeblendet wird.
Kommen wir nun zum Code:
Ok als erstes erstellen wir eine Klasse unter dem Namen: Functions
Diese ist etwas komplizierter.
Wir importieren zuerst:
Nun kommen wir zu dem Modul das wir erstellen bzw. zu den Publics und Privats:
VB.NET-Quellcode
- Module Functions
- Private r As New Random(Now.Millisecond)
- Public Const Duration = 1000 'Anzeigedauer
- Public blend_form As New Form With {.FormBorderStyle = Windows.Forms.FormBorderStyle.None, .ShowIcon = False, .ShowInTaskbar = False, .WindowState = FormWindowState.Maximized, .BackColor = Color.Black, .Opacity = 0.0}
- Public AllImages As New List(Of Image)
- Private _state = -1
- Public PrevImage As Image
- Public NextImage As Image
Sooo...
Nun kommen wir zu unserer ersten Sub:
-Erklärungen beigesetzt-
VB.NET-Quellcode
- Public Sub ShowNextImage()
- _state += 1
- If _state = AllImages.Count Then
- 'Form ausblenden
- For index = 100 To 0 Step -1
- blend_form.Opacity = index / 100
- Threading.Thread.Sleep(15)
- Next
- blend_form.Close()
- Exit Sub
- End If
- 'Erstes Bild ist eine Ausnahme
- If _state = 0 Then
- Dim empty_image As New Bitmap(1, 1)
- PrevImage = empty_image
- NextImage = AllImages.First
- blend_form.Invoke(New Action(AddressOf TransparentBlend))
- GoTo 1
- End If
- 'Nächstes Bild wählen
- PrevImage = AllImages(_state - 1)
- NextImage = AllImages(_state)
- Select Case r.Next(0, 4)
- Case Is = 0
- blend_form.Invoke(New Action(AddressOf TransparentBlend))
- Case Is = 1
- blend_form.Invoke(New Action(AddressOf FromRight))
- Case Is = 2
- blend_form.Invoke(New Action(AddressOf FromUnder))
- Case Is = 3
- blend_form.Invoke(New Action(AddressOf UpperLeft))
- End Select
- 1: Threading.Thread.Sleep(Duration)
- ShowNextImage()
- End Sub
Jetzt komme ich auch schon zu den Übergangseffekten.
(Ihr könnt es mit
einkasteln.
Ich entschuldige mich gleichmal dafür dass hieer manchmal die erklärungen fehlen, ich hatte keine zeit. Kommen aber noch.
VB.NET-Quellcode
- Sub TransparentBlend()
- Dim bgc As New BufferedGraphicsContext
- Using bg = bgc.Allocate(blend_form.CreateGraphics, blend_form.ClientRectangle)
- With bg.Graphics
- 'Erstes Bild zeichnen
- .DrawImage(PrevImage, New Point(Screen.PrimaryScreen.WorkingArea.Width / 2 - PrevImage.Width / 2, Screen.PrimaryScreen.WorkingArea.Height / 2 - PrevImage.Height / 2))
- 'Altes Bild ausblenden
- For index = 0 To 200
- Dim b As New SolidBrush(Color.FromArgb(index, Color.Black))
- .FillRectangle(b, .ClipBounds)
- bg.Render()
- Threading.Thread.Sleep(5)
- Next
- For index As Single = 0 To 2 Step 0.01
- 'Zweites Bild zeichnen
- Dim cm As New ColorMatrix
- cm.Matrix33 = index
- Dim imga As New ImageAttributes
- imga.SetColorMatrix(cm)
- .DrawImage(NextImage, New Rectangle(New Point(Screen.PrimaryScreen.WorkingArea.Width / 2 - NextImage.Width / 2, Screen.PrimaryScreen.WorkingArea.Height / 2 - NextImage.Height / 2), NextImage.Size), _
- 0, 0, NextImage.Width, NextImage.Height, GraphicsUnit.Pixel, imga)
- bg.Render()
- Threading.Thread.Sleep(5)
- Next
- End With
- End Using
- End Sub
- Sub FromRight()
- Dim bgc As New BufferedGraphicsContext
- Using bg = bgc.Allocate(blend_form.CreateGraphics, blend_form.ClientRectangle)
- With bg.Graphics
- For index = 0 To Screen.PrimaryScreen.WorkingArea.Width / 2 + NextImage.Width / 2 Step 3
- .Clear(Color.Black)
- 'Erstes Bild zeichnen
- .DrawImage(PrevImage, New Point(Screen.PrimaryScreen.WorkingArea.Width / 2 - PrevImage.Width / 2, Screen.PrimaryScreen.WorkingArea.Height / 2 - PrevImage.Height / 2))
- .DrawImage(NextImage, New Point(Screen.PrimaryScreen.WorkingArea.Width - index, Screen.PrimaryScreen.WorkingArea.Height / 2 - NextImage.Height / 2))
- bg.Render()
- Next
- End With
- bg.Render()
- End Using
- End Sub
- Sub FromUnder()
- Dim bgc As New BufferedGraphicsContext
- Using bg = bgc.Allocate(blend_form.CreateGraphics, blend_form.ClientRectangle)
- With bg.Graphics
- For index = 0 To Screen.PrimaryScreen.WorkingArea.Height / 2 + NextImage.Height / 2 Step 3
- .Clear(Color.Black)
- 'Erstes Bild zeichnen
- .DrawImage(PrevImage, New Point(Screen.PrimaryScreen.WorkingArea.Width / 2 - PrevImage.Width / 2, Screen.PrimaryScreen.WorkingArea.Height / 2 - PrevImage.Height / 2))
- .DrawImage(NextImage, New Point(Screen.PrimaryScreen.WorkingArea.Width / 2 - NextImage.Width / 2, Screen.PrimaryScreen.WorkingArea.Height - index))
- bg.Render()
- Next
- End With
- bg.Render()
- End Using
- End Sub
- Sub UpperLeft()
- Dim bgc As New BufferedGraphicsContext
- Using bg = bgc.Allocate(blend_form.CreateGraphics, blend_form.ClientRectangle)
- With bg.Graphics
- Dim scrp = New Point(Screen.PrimaryScreen.WorkingArea.Width / 2 - NextImage.Width / 2, Screen.PrimaryScreen.WorkingArea.Height / 2 - NextImage.Height / 2)
- Dim x_step = NextImage.Height / NextImage.Width
- Dim y_step = NextImage.Width / NextImage.Height
- Dim max = IIf(NextImage.Height > NextImage.Width, NextImage.Height, NextImage.Width) * 2
- For index = 0 To max
- Dim x = x_step * index
- Dim y = y_step * index
- Dim gpth As New GraphicsPath()
- gpth.StartFigure()
- gpth.AddLine(scrp, New Point(0, y) + scrp)
- gpth.AddLine(New Point(0, y) + scrp, New Point(x, 0) + scrp)
- gpth.AddLine(New Point(x, 0) + scrp, scrp)
- gpth.CloseFigure()
- .SetClip(gpth)
- .DrawImage(NextImage, scrp)
- bg.Render()
- Next
- End With
- bg.Render()
- End Using
- End Sub
Jetzt der Aufruf aller subs, bzw. das Bilderladen / Einblenden (in Form1.vb)
Ok zuerst benötigen wir einen BackGround-Worker.
So Nun erstellen wir die beiden Subs.
Zuerst die Load_Images sub. Diese Ladet die Bilder aus einem Vorgegebenem Ordner.
Diesen könnt ihr natürlich bearbeiten.
VB.NET-Quellcode
- Private Sub LoadImages()
- lbl_images.Invoke(Sub() lbl_images.Text = "Bilder suchen...")
- For Each img_pth In IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "*.jpg", IO.SearchOption.AllDirectories)
- Try
- AllImages.Add(Image.FromFile(img_pth))
- lbl_images.Invoke(Sub() lbl_images.Text = AllImages.Count & " Bilder gefunden...")
- Catch ex As Exception
- 'Nichts tun
- End Try
- Next
- lbl_images.Invoke(Sub() lbl_images.Text = "Fertig...")
- Threading.Thread.Sleep(1000)
- bd_worker.Abort()
- 'Form ausblenden
- For index = 100 To 0 Step -1
- Me.Invoke(Sub() Me.Opacity = index / 100)
- Threading.Thread.Sleep(25)
- Next
- Me.Invoke(Sub() Me.Close())
- 'Diashow starten
- blend_form.Invoke(New Action(AddressOf ShowNextImage))
- End Sub
Ich glaube hier erklärt sich eigentlich alles von selbst.
Und nun kommen wir zu dem Ein-Blendungseffekt.
Ich habe hier in den Code gleich die Erklärungen eingefügt.
VB.NET-Quellcode
- Private Sub BlendDown()
- 'Blende einblenden
- For index = 50 To 100
- blend_form.Invoke(Sub() blend_form.Opacity = index / 100)
- Threading.Thread.Sleep(25)
- Next
- 'Jetzt die Form einblenden
- For index = 0 To 80
- Me.Invoke(Sub() Me.Opacity = index / 100)
- Threading.Thread.Sleep(25)
- Next
- 'Pulsieren lassen
- While Me.IsHandleCreated 'Wenn Fenster geschlossen aufhören
- For index = 100 To 50 Step -1
- Me.Invoke(Sub() Me.Opacity = index / 100)
- Threading.Thread.Sleep(25)
- Next
- For index = 50 To 100
- Me.Invoke(Sub() Me.Opacity = index / 100)
- Threading.Thread.Sleep(25)
- Next
- End While
- End Sub
Das wars auch schon.
Ich hoffe ich konnte euch mit diesem Tutorial helfen.
Wie man leicht er kennen kann, ist das Bild leicht transparent.
Bild, mitten im Übergang.
Edit by ErfinderDesRades: Die Downloads sind leider down.
Bitte Downloads als VBP-DateiAnhang anhängen - nicht auf Fremd-Servern!
18.01.2023: Code-Quellen-Link wurde entfernt, da der Code nicht mehr zur Verfügung steht, auch nicht beim Autor selbst. ~VaporiZed
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „VaporiZed“ ()