Einfaches Docklet mit Übergangeffekte - Part 1

    • VB.NET

    Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von darkfr3ak.

      Einfaches Docklet mit Übergangeffekte - Part 1

      Anhang:
      Anhang.zip

      Ich will euch zeigen wie Ihr ein einfaches Docklet mit Icons und Übergangseffekten erstellt.
      Als erstes öffnet ihr Visual Studio/Visual Basic Express und erstellt ein neues Projekt. Folgende Elemente ung Einstellungen benötigt ihr:


      -Form1.vb im Projektmappen Explorer auf Bar1.vb umbennen
      -9 PictureBoxen
      -FormBorderStyle auf None
      -BackColor auf Black
      -Namen der Form auf Bar1
      -Control-, Maximize- und Minimizebox auf False
      -ShowIcon und ShowInTaskbar auf False
      -Location (Frei wählbar) in unserem Fall auf 490;0
      -MaximumSize auf 284;80, MinimumSize auf 284;20
      -Size auf 284;80, StartPosition auf Manual


      Das waren die ersten Eigenschaften die Ihr alle übernehmen solltet (bis auf die Frei wählbaren)
      damit ihr die identische Ergebnisse erzielt.

      Als nächstes positioniert ihr die ersten 7 Pictureboxen, PictureBoxen 1-7, auf die Form und fügt ein die Icons die ich im Anhang zur Verfügung stelle (siehe oben).
      Die Applikationsicons befinden sich im Unterverzeichnis Applikationen.


      Hinweis:

      Um ein Bild einzufügen, klickt ihr mit der rechten Maustaste auf die gewünschte PictureBox und wählt die Option "Bild auswählen".
      Danach erscheint ein neues Fenster, ihr klickt auf die 2 option, wählt "Importieren" und fügt die gewünschten Dateien ein. Ihr markiert dann zunächst das gewünschte Bild auf der Liste und bestätigt mit einem Klick auf "OK".

      Nun verseht noch die letzten 2 Pictureboxen (Pictureboxen 8 und 9) mit den Ein- & Aufklappicons

      Zu allerletzt setzzen wir noch den SizeMode der PictureBoxen auf Autosize, indem wir die gewünschte PictureBox auswählen den Pfeil am Rahmen der PictureBox anklicken und die Option "Grössenmodus" auf "AutoSize" stellt. Das macht ihr mit allen 9 PictureBoxen.

      Nun Ordnet die PictureBoxen nach dem folgendem Schema ein:


      PictureBox1 = Papierkorb
      PictureBox2 = Internet Explorer
      PictureBox3 = Benutzer Sperren
      PictureBox4 = Systemsteuerung
      PictureBox5 = Ausführen
      PictureBox6 = Computer
      PictureBox7 = Ordner

      PictureBox8 = Einklappicon
      PictureBox9 = Ausklappicon

      Wenn ihr alles richtig gemacht habt sieht die Form folgendermassen aus:





      Tipp:

      Stellt sicher, dass die PictureBoxen 8 und 9 übereinander liegen und das die PictureBox Eigenschaft BackGroundColor auf Transparent ist.


      So, da nun das Designen fertig ist, fangen wir endlich mit dem wirklichen Programmieren an.

      Wir fangen ganz einfach an und werden gleich den Windows Vista/7 Aero-Style definieren.

      Dafür brauchen wir zu erst 4 Variable, 2 DLL Dateien und den Aufruf des Aerostyles in der Bar1_Load:

      VB.NET-Quellcode

      1. Imports System.Runtime.InteropServices
      2. Public Class Bar1
      3. Public Structure DWM_BLURBEHIND
      4. Public dwFlags As Integer
      5. Public fEnable As Boolean
      6. Public hRgnBlur As IntPtr
      7. Public fTransitionOnMaximized As Boolean
      8. End Structure
      9. <System.Runtime.InteropServices.DllImport("dwmapi")> _
      10. Private Shared Function DwmEnableBlurBehindWindow(ByVal hWnd As System.IntPtr, ByRef pBlurBehind As DWM_BLURBEHIND) As Integer
      11. End Function
      12. <System.Runtime.InteropServices.DllImport("gdi32.dll")> _
      13. Private Shared Function CreateRectRgn(ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer) As IntPtr
      14. End Function
      15. Private Sub Bar1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      16. Dim dbb As DWM_BLURBEHIND
      17. dbb.fEnable = True
      18. dbb.dwFlags = 1 Or 2
      19. dbb.hRgnBlur = CreateRectRgn(0, 0, Me.Width, Me.Height)
      20. dbb.fTransitionOnMaximized = True
      21. DwmEnableBlurBehindWindow(Me.Handle, dbb)
      22. dbb.hRgnBlur = CreateRectRgn(0, 0, Me.Width, Me.Height)
      23. End Sub
      24. End Class


      *Fortsetzung folgt*

      *Topic verschoben*

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Infil“ () aus folgendem Grund: Überschrift geändert.

      Einfaches Docklet mit Übergangseffekte - Part 2

      Nun Testen wir auch ob alles funktioniert wie wir es wollen.

      Vergleicht eure Applikation mit meiner:




      Da wir jetzt den Windows Aero Style einprogrammiert haben, fahren wir mit dem Ein- und Aufklappen der Form fort.

      Wie wir sehen können, ist das Aufklapp-Icon zu sehen und keine Spur vom Einklapp-Icon.
      Um das zu ändern, schreiben wir folgenden Code in der Bar1_Load unter dem Aufruf des Aero Style.

      VB.NET-Quellcode

      1. ...
      2. PictureBox9.Hide()
      3. ...


      Nun sieht der Code der Funktion Private Sub Bar1_Load folgendermassen aus.

      VB.NET-Quellcode

      1. Private Sub Bar1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      2. Dim dbb As DWM_BLURBEHIND
      3. dbb.fEnable = True
      4. dbb.dwFlags = 1 Or 2
      5. dbb.hRgnBlur = CreateRectRgn(0, 0, Me.Width, Me.Height)
      6. dbb.fTransitionOnMaximized = True
      7. DwmEnableBlurBehindWindow(Me.Handle, dbb)
      8. dbb.hRgnBlur = CreateRectRgn(0, 0, Me.Width, Me.Height)
      9. PictureBox9.Hide()
      10. End Sub


      Startet nun wieder die Anwendung und überprüft ob nun das Aufklapp-Icon (PictureBox9) unsichtbar und das Einklapp-Icon (PictureBox8) sicht bar ist.
      Wenn dies nicht der Fall ist, überprüft erneut und ändert, falls nötig, den Code.


      Jetzt werden wir uns mit der Ein- und Aufklappfunktion des Docklet beschäftigen.

      Zunächst wechselt ihr zum Code und Deklariert 4 neue Variablen. Die 4 Varbiablen Deklariert Ihr unter der "Public Structure"
      (benötigt für Windows Aero Style).


      VB.NET-Quellcode

      1. ...
      2. Private AusgeklapptBeiStart As Boolean = True
      3. Private HoeheAusgeklappt As Integer = 80
      4. Private HoeheEingeklappt As Integer = 20
      5. Private k As Integer = 1
      6. ...


      Da wir jetzt die Variablen haben, benötigen wir noch die Ein- und Aufklapp Funktion. Diese sieht folgendermassen aus:


      VB.NET-Quellcode

      1. Private Sub AusEinKlappen()
      2. Select Case AusgeklapptBeiStart
      3. Case False
      4. Do Until Me.Height >= HoeheAusgeklappt
      5. Me.Height = Me.Height + ((k + 9) / 10000) * Me.Height * ((HoeheAusgeklappt + 10) - Me.Height)
      6. System.Threading.Thread.Sleep(5)
      7. Loop
      8. AusgeklapptBeiStart = True
      9. Case True
      10. Do Until Me.Height <= HoeheEingeklappt
      11. Me.Height = Me.Height - ((k + 9) / 10000) * Me.Height * ((HoeheAusgeklappt + 10) - Me.Height)
      12. System.Threading.Thread.Sleep(5)
      13. Loop
      14. AusgeklapptBeiStart = False
      15. End Select
      16. End Sub


      Den Funktionscode platziert ihr zwischen der letzten System.Runtime.InteropServices.DllImport und der Bar1_Load.


      Hinweis:

      Die Anordnung der einzelenen Codeabschnitte ist zwar nicht wichtig, dient aber der erleichterten Lesbarkeit und der sauberen Strukturierug des kompletten Quellcodes.


      Da wir jetzt die nötigen Funktionen für das ein- und ausklappen haben, müssen wir der Applikation noch zuweisen wann die Form eingeklappt.
      Dafür fügen wir den Namen der Funktion in den Events PictureBox8_MouseClick und PictureBox8_MouseClick.
      Für dieses Event reicht ein einfaches Doppelklicken auf die PictureBoxen 8 und 9.


      Tipp:

      Durch ein doppelklicken auf die gewählte pictureBox erscheint nicht das PictureBoxXY_MouseClick-Event sondern das einfache
      PictureBoxXY_Click-Event. Da das keinen enormen bzw. gar keinen Unterschied ausmacht könnt ihr das Event so belassen wie es ist.
      Das anpassen des Click-Events auf MouseClick ist nicht notwendig, auch wenn es in diesem Tutorial anderst ist.


      Jetzt sollte euer kompletter Code in etwa wie hier aussehen:

      VB.NET-Quellcode

      1. Imports System.Runtime.InteropServices
      2. Public Class Bar1
      3. Public Structure DWM_BLURBEHIND
      4. Public dwFlags As Integer
      5. Public fEnable As Boolean
      6. Public hRgnBlur As IntPtr
      7. Public fTransitionOnMaximized As Boolean
      8. End Structure
      9. Private AusgeklapptBeiStart As Boolean = True
      10. Private HoeheAusgeklappt As Integer = 80
      11. Private HoeheEingeklappt As Integer = 20
      12. Private k As Integer = 1
      13. <System.Runtime.InteropServices.DllImport("dwmapi")> _
      14. Private Shared Function DwmEnableBlurBehindWindow(ByVal hWnd As System.IntPtr, ByRef pBlurBehind As DWM_BLURBEHIND) As Integer
      15. End Function
      16. <System.Runtime.InteropServices.DllImport("gdi32.dll")> _
      17. Private Shared Function CreateRectRgn(ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer) As IntPtr
      18. End Function
      19. Private Sub AusEinKlappen()
      20. Select Case AusgeklapptBeiStart
      21. Case False
      22. Do Until Me.Height >= HoeheAusgeklappt
      23. Me.Height = Me.Height + ((k + 9) / 10000) * Me.Height * ((HoeheAusgeklappt + 10) - Me.Height)
      24. System.Threading.Thread.Sleep(5)
      25. Loop
      26. AusgeklapptBeiStart = True
      27. Case True
      28. Do Until Me.Height <= HoeheEingeklappt
      29. Me.Height = Me.Height - ((k + 9) / 10000) * Me.Height * ((HoeheAusgeklappt + 10) - Me.Height)
      30. System.Threading.Thread.Sleep(5)
      31. Loop
      32. AusgeklapptBeiStart = False
      33. End Select
      34. End Sub
      35. Private Sub Bar1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      36. Dim dbb As DWM_BLURBEHIND
      37. dbb.fEnable = True
      38. dbb.dwFlags = 1 Or 2
      39. dbb.hRgnBlur = CreateRectRgn(0, 0, Me.Width, Me.Height)
      40. dbb.fTransitionOnMaximized = True
      41. DwmEnableBlurBehindWindow(Me.Handle, dbb)
      42. dbb.hRgnBlur = CreateRectRgn(0, 0, Me.Width, Me.Height)
      43. PictureBox9.Hide()
      44. End Sub
      45. Private Sub PictureBox8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox8.Click
      46. AusEinKlappen()
      47. End Sub
      48. Private Sub PictureBox9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox9.Click
      49. AusEinKlappen()
      50. End Sub
      51. End Class



      Das war noch nicht alles mit der Ein- und Aufklapp Funktion.
      Bevor ihr die Applikation auch Ordnungsgemäss verwendet, müssen noch die PictureBoxen 8 & 9 so angepasst werden, dass man nur jedesmal die korrekte Picturebox mit der korrekten Aktion sieht.

      Das machen wir mit den Show() und Hide() Funktionen.

      Code:

      VB.NET-Quellcode

      1. ...
      2. Private Sub PictureBox8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox8.Click
      3. AusEinKlappen()
      4. PictureBox8.Hide()
      5. PictureBox9.Show()
      6. End Sub
      7. Private Sub PictureBox9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox98.Click
      8. AusEinKlappen()
      9. PictureBox9.Hide()
      10. PictureBox8.Show()
      11. End Sub
      12. ...


      *Fortsetzung folgt*

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Infil“ () aus folgendem Grund: Themenfortsetzung

      Einfaches Docklet mit Übergangseffekte - Part 3

      Der ganze Code sollte nun ungefähr wie hier aussehen:

      VB.NET-Quellcode

      1. Imports System.Runtime.InteropServices
      2. Public Class Bar1
      3. Public Structure DWM_BLURBEHIND
      4. Public dwFlags As Integer
      5. Public fEnable As Boolean
      6. Public hRgnBlur As IntPtr
      7. Public fTransitionOnMaximized As Boolean
      8. End Structure
      9. Private AusgeklapptBeiStart As Boolean = True
      10. Private HoeheAusgeklappt As Integer = 80
      11. Private HoeheEingeklappt As Integer = 20
      12. Private k As Integer = 1
      13. <System.Runtime.InteropServices.DllImport("dwmapi")> _
      14. Private Shared Function DwmEnableBlurBehindWindow(ByVal hWnd As System.IntPtr, ByRef pBlurBehind As DWM_BLURBEHIND) As Integer
      15. End Function
      16. <System.Runtime.InteropServices.DllImport("gdi32.dll")> _
      17. Private Shared Function CreateRectRgn(ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer) As IntPtr
      18. End Function
      19. Private Sub AusEinKlappen()
      20. Select Case AusgeklapptBeiStart
      21. Case False
      22. Do Until Me.Height >= HoeheAusgeklappt
      23. Me.Height = Me.Height + ((k + 9) / 10000) * Me.Height * ((HoeheAusgeklappt + 10) - Me.Height)
      24. System.Threading.Thread.Sleep(5)
      25. Loop
      26. AusgeklapptBeiStart = True
      27. Case True
      28. Do Until Me.Height <= HoeheEingeklappt
      29. Me.Height = Me.Height - ((k + 9) / 10000) * Me.Height * ((HoeheAusgeklappt + 10) - Me.Height)
      30. System.Threading.Thread.Sleep(5)
      31. Loop
      32. AusgeklapptBeiStart = False
      33. End Select
      34. End Sub
      35. Private Sub Bar1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      36. Dim dbb As DWM_BLURBEHIND
      37. dbb.fEnable = True
      38. dbb.dwFlags = 1 Or 2
      39. dbb.hRgnBlur = CreateRectRgn(0, 0, Me.Width, Me.Height)
      40. dbb.fTransitionOnMaximized = True
      41. DwmEnableBlurBehindWindow(Me.Handle, dbb)
      42. dbb.hRgnBlur = CreateRectRgn(0, 0, Me.Width, Me.Height)
      43. PictureBox9.Hide()
      44. End Sub
      45. Private Sub PictureBox8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox8.Click
      46. AusEinKlappen()
      47. PictureBox8.Hide()
      48. PictureBox9.Show()
      49. End Sub
      50. Private Sub PictureBox9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox9.Click
      51. AusEinKlappen()
      52. PictureBox9.Hide()
      53. PictureBox8.Show()
      54. End Sub
      55. End Class



      In diesem Moment stehen wir vor einem kleinem Problem. Das wäre, wenn ein User Windows XP verwendet würde möglicherweise eine Fehlermeldung, beim Versuch den Aero Style zu laden, auftauchen oder der User sieht die Anwendung mit einem Schwarzen Hintergrund.

      Ich selbst empfehle hier den Try Befehl. Mit dieser Funktion kann man der Applikation sagen, dass der Aero Style geladen werden soll. Wenn das nicht funktioniert gäbe es die Abhilfe Catch. Mit Catch kann man eine Ausnahme bzw. einen Ausweg bieten. Darin könnte man Beispielsweise der Applikation sagen das die Hintergrundfarbe auf "Silver" gesetzt werden soll und die Sichtbarkeit auf ca. 60%.

      Das wäre meiner Meinung nach die bequemste und einfachste Lösung.

      So könnte danach die Bar1_Load aussehen:

      VB.NET-Quellcode

      1. ...
      2. Private Sub Bar1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      3. Try
      4. Dim dbb As DWM_BLURBEHIND
      5. dbb.fEnable = True
      6. dbb.dwFlags = 1 Or 2
      7. dbb.hRgnBlur = CreateRectRgn(0, 0, Me.Width, Me.Height)
      8. dbb.fTransitionOnMaximized = True
      9. DwmEnableBlurBehindWindow(Me.Handle, dbb)
      10. dbb.hRgnBlur = CreateRectRgn(0, 0, Me.Width, Me.Height)
      11. Catch ex As Exception
      12. Me.BackColor = Color.Silver
      13. Me.Opacity = 60%
      14. End Try
      15. PictureBox9.Hide()
      16. End Sub
      17. ...



      Warnung:

      Beachtet das die Try-Variante bei mir Ungetestet ist.
      Benutzung auf eigener Gefahr, testet diese Funktion, bevor ihr sie in das Docklet implementiert.

      Obwohl ich selbst die Try-Variante auch in dieser Anwendung benutze, muss ich euch auf die oben genannte Warnung aufmerksam machen.
      Auch wenn es kein Fehler anzeigt kann es sein das es unter Windows XP oder früher nicht funktioniert.


      Ich fasse mal kurz zusammen:

      Bis Jetzt haben wir bereits das Aero Style aufgerufen, alle PictureBoxen vorbereitet, die Ein- und Aufklapp Funktion definiert und sie auch in den MouseClick Events eingebunden.



      Im Test funktioniert die Anwendung gut, aber es sieht zunächst ziemlich langweilig aus. Was fehlt sind Tranparens-Effekte.
      Darunter verstehe ich, wenn ich mit dem Cursor, während die Form eingeklappt ist, auf das Ausklapp Button zeige, soll die Sichtbarkeit von 40% auf 100%
      steigen. Wenn ich den Cursor, während die Form eingeklappt ist, von dem Ausklapp button weg bewege,soll die Sichtbarkeit von 100% wieder auf 40% gesenkt werden. Während die Form ausgeklappt ist und eingeklappt wird soll die Sichtbarkeit ebenfalls von 100% auf 40% gesenkt werden und falls der Cursor noch auf das Ausklapp Button zeigt und die Form gerade eingeklappt worden ist, soll die Sichtbarkeit wieder, von der gerade abgesenkten Sichtbarkeit, auf 100% steigen.


      Falls es etwas zu ungenau oder kompliziert erklärt worden ist, zeige ich euch was ich meine, indem ihr einfach mit dem Tutorial fortfarht.


      Da wir noch keine Aktionen für die Clickevents der 7 Apps in unserem Docklet festgelegt haben, werde ich das hier kurz nachholen.


      Ihr wisst bereits wie man ein MouseClick-Event erstellt. Als nächstes tippt ihr einfach folgendes ab:


      VB.NET-Quellcode

      1. ...
      2. Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
      3. Dim procifo As New ProcessStartInfo("explorer.exe", _
      4. "::{645FF040-5081-101B-9F08-00AA002F954E}")
      5. Process.Start(procifo)
      6. End Sub
      7. Private Sub PictureBox2_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox2.MouseClick
      8. MessageBox.Show("Momentan nicht Verfügbar")
      9. End Sub
      10. Private Sub PictureBox3_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox3.MouseClick
      11. Shell("rundll32.exe user32.dll,LockWorkStation")
      12. End Sub
      13. Private Sub PictureBox4_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox4.MouseClick
      14. Shell("rundll32.exe shell32.dll,Control_RunDLL", 1)
      15. End Sub
      16. Private Sub PictureBox5_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox5.MouseClick
      17. MessageBox.Show("Momentan nicht Verfügbar")
      18. End Sub
      19. Private Sub PictureBox6_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox6.MouseClick
      20. MessageBox.Show("Momentan nicht Verfügbar")
      21. End Sub
      22. Private Sub PictureBox7_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox7.MouseClick
      23. Shell("explorer.exe /select", vbNormalFocus)
      24. MessageBox.Show("Noch in der Testphase")
      25. End Sub
      26. ...



      Da ich selbst beim Aufruf einiger Funktionen Probleme hatte habe ich sie einfach mit einer MessageBox.Show() versehen.
      Falls ihr nützliche Verbesserungsvorschläge dazu hättet, könnt ihr sie gerne Posten.


      Da wir jetzt die Aktionen bei einem MouseClick einer der Apps bestimmt haben, widmen wir uns wieder zu den Transparenz-Effekten.


      Zunächst um die Sichtbarkeit beim ein- und ausklappen zu ändern benötigen wir eine weitere Variable.
      Danach definieren wir 2 Funktionen und binden sie anschliessend ein.

      Code:

      VB.NET-Quellcode

      1. ...
      2. Dim count As Integer
      3. ...
      4. Private Sub OpacityMinus()
      5. For Me.count = 100 To 40 Step -7
      6. Me.Opacity = count / 100
      7. Me.Refresh()
      8. Threading.Thread.Sleep(50)
      9. Next
      10. End Sub
      11. Private Sub OpacityPlus()
      12. For Me.count = 40 To 100 Step +7
      13. Me.Opacity = count / 100
      14. Me.Refresh()
      15. Threading.Thread.Sleep(50)
      16. Next
      17. End Sub
      18. ...



      Ich habe die Funktionen so benannt, dass sie später leichter unterscheidbar sind.

      Die Variable count sollte die letzte Variable sein, das heisst sie sollte unterhalb der Ein- und Aufklapp Variablen sein.
      Die zwei Opacity-Funktionen sollten unterhalb der Ein- und Ausklapp Funktion sein.

      Falls ihr das Docklet stets im Vordergrund haben wollt, tippt ihr folgendes in das Bar1_Load Ereigniss ein:

      VB.NET-Quellcode

      1. ...
      2. Me.TopMost = True
      3. ...


      Diese Anweisung solltet ihr an der ersten Zeile in das Bar1_Load Ereigniss abtippen.
      Und damit ihr die Startkoordinaten löschen könnt und die Startposition der Anwendung stets in der Mitte ganz Oben habt, tippt ihr auch folgendes, gleich nach "Me.TopMost" ein:

      VB.NET-Quellcode

      1. ...
      2. Me.Top = True
      3. ...


      Nun könnt ihr die Eigenschaft von "StartPosition" auf "CenterScreen" setzen und abspeichern.


      *Fortsetzung folgt*

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Infil“ ()

      Einfaches Docklet mit Übergangseffekte - Part 4

      Wenn ihr alles richtig abgetippt habt und es keine Fehler gab, sollte nun der Code folgendermassen aussehen:


      VB.NET-Quellcode

      1. Imports System.Runtime.InteropServices
      2. Public Class Bar1
      3. Public Structure DWM_BLURBEHIND
      4. Public dwFlags As Integer
      5. Public fEnable As Boolean
      6. Public hRgnBlur As IntPtr
      7. Public fTransitionOnMaximized As Boolean
      8. End Structure
      9. Private AusgeklapptBeiStart As Boolean = True
      10. Private HoeheAusgeklappt As Integer = 80
      11. Private HoeheEingeklappt As Integer = 20
      12. Private k As Integer = 1
      13. Dim count As Integer
      14. <System.Runtime.InteropServices.DllImport("dwmapi")> _
      15. Private Shared Function DwmEnableBlurBehindWindow(ByVal hWnd As System.IntPtr, ByRef pBlurBehind As DWM_BLURBEHIND) As Integer
      16. End Function
      17. <System.Runtime.InteropServices.DllImport("gdi32.dll")> _
      18. Private Shared Function CreateRectRgn(ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer) As IntPtr
      19. End Function
      20. Private Sub AusEinKlappen()
      21. Select Case AusgeklapptBeiStart
      22. Case False
      23. Do Until Me.Height >= HoeheAusgeklappt
      24. Me.Height = Me.Height + ((k + 9) / 10000) * Me.Height * ((HoeheAusgeklappt + 10) - Me.Height)
      25. System.Threading.Thread.Sleep(5)
      26. Loop
      27. AusgeklapptBeiStart = True
      28. Case True
      29. Do Until Me.Height <= HoeheEingeklappt
      30. Me.Height = Me.Height - ((k + 9) / 10000) * Me.Height * ((HoeheAusgeklappt + 10) - Me.Height)
      31. System.Threading.Thread.Sleep(5)
      32. Loop
      33. AusgeklapptBeiStart = False
      34. End Select
      35. End Sub
      36. Private Sub OpacityMinus()
      37. For Me.count = 100 To 40 Step -7
      38. Me.Opacity = count / 100
      39. Me.Refresh()
      40. Threading.Thread.Sleep(50)
      41. Next
      42. End Sub
      43. Private Sub OpacityPlus()
      44. For Me.count = 40 To 100 Step +7
      45. Me.Opacity = count / 100
      46. Me.Refresh()
      47. Threading.Thread.Sleep(50)
      48. Next
      49. End Sub
      50. Private Sub Bar1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      51. Me.TopMost = True
      52. Me.Top = True
      53. Try
      54. Dim dbb As DWM_BLURBEHIND
      55. dbb.fEnable = True
      56. dbb.dwFlags = 1 Or 2
      57. dbb.hRgnBlur = CreateRectRgn(0, 0, Me.Width, Me.Height)
      58. dbb.fTransitionOnMaximized = True
      59. DwmEnableBlurBehindWindow(Me.Handle, dbb)
      60. dbb.hRgnBlur = CreateRectRgn(0, 0, Me.Width, Me.Height)
      61. Catch ex As Exception
      62. Me.BackColor = Color.Silver
      63. Me.Opacity = 60%
      64. End Try
      65. PictureBox9.Hide()
      66. End Sub
      67. Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
      68. Dim procifo As New ProcessStartInfo("explorer.exe", _
      69. "::{645FF040-5081-101B-9F08-00AA002F954E}")
      70. Process.Start(procifo)
      71. End Sub
      72. Private Sub PictureBox2_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox2.MouseClick
      73. MessageBox.Show("Momentan nicht Verfügbar")
      74. End Sub
      75. Private Sub PictureBox3_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox3.MouseClick
      76. Shell("rundll32.exe user32.dll,LockWorkStation")
      77. End Sub
      78. Private Sub PictureBox4_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox4.MouseClick
      79. Shell("rundll32.exe shell32.dll,Control_RunDLL", 1)
      80. End Sub
      81. Private Sub PictureBox5_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox5.MouseClick
      82. MessageBox.Show("Momentan nicht Verfügbar")
      83. End Sub
      84. Private Sub PictureBox6_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox6.MouseClick
      85. MessageBox.Show("Momentan nicht Verfügbar")
      86. End Sub
      87. Private Sub PictureBox7_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox7.MouseClick
      88. Shell("explorer.exe /select", vbNormalFocus)
      89. MessageBox.Show("Noch in der Testphase")
      90. End Sub
      91. Private Sub PictureBox8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox8.Click
      92. AusEinKlappen()
      93. PictureBox8.Hide()
      94. PictureBox9.Show()
      95. OpacityMinus()
      96. End Sub
      97. Private Sub PictureBox9_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox9.MouseEnter
      98. OpacityPlus()
      99. End Sub
      100. Private Sub PictureBox9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox9.Click
      101. AusEinKlappen()
      102. PictureBox9.Hide()
      103. PictureBox8.Show()
      104. End Sub
      105. Private Sub PictureBox9_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox9.MouseLeave
      106. If Me.Height = 20 Then
      107. OpacityMinus()
      108. End If
      109. End Sub
      110. End Class


      Hier noch ein paar Screenshots zum Vergleich:


      Ausführung Normal:


      Ausführung Eingeklappt kein Cursor:


      Ausführung Eingeklappt Cursor auf Icon:



      So das wars mit dem Tutorial. Es gäbe viel mehr zu zeigen, aber das sollte mal reichen.
      Bei Fragen einfach bei mir melden. Bevor ich es vergesse, ich wollte euch noch mein Docklet als Download zur verfügung stellen:

      Infil Docklet.exe

      Haut auf die Tasten Leute und viel Spass.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Infil“ ()

      Shell? MsgBox? Das ist VB6. Verwende Process.Start() und MessageBox.Show().

      Außerdem: Eigene Elemente kann man nicht bestimmten?
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
      danke für den vorschlag Lukas werde es gleich ändern.
      Zu deiner zweiten Frage: Eigene Elemente sind auch umsetzbar, aber das sollte einfach ein kleines beispiel sein. Man könnte einfach die Symbole ändern und bei den MouseClick Events den Pfad der Datei ändern.

      EDIT: Leider gibt es einige Probleme, man kann den benutzer nicht (soweit meine erfrahrungen reichen) mit Process.Start sperren, oder gibt es eine ähnliche möglichkeit. denn mit process.start, wie der name schon sagt, kann man nur prozesse starten aber keine CMD Aktionen unternehmen.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Infil“ ()

      Hier im Forum gibts ne super Einrichtung, die nennt sich Such-Funktion :D

      Hier z.B. ist ein Quellcode-Ausschnitt, der dir helfen sollte:

      Klick

      Sogar mit umlenken der Ausgabe in einen String. Wenn du nur das Programm starten willst, lass das hier

      VB.NET-Quellcode

      1. P.StartInfo.RedirectStandardOutput = True
      2. P.StartInfo.UseShellExecute = False


      und das hier

      VB.NET-Quellcode

      1. Using
      2. SR = P.StandardOutput
      3. T = SR.ReadToEnd()
      4. End Using


      und die Messagebox weg. Fertig.