Form an Desktop andocken (wie z.B. eine Sidebar)

  • VB.NET

Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von Pry.

    von Cronoxyd:
    Und den einzigen Sourcecode, den ich verwendet habe ist der am Threadanfang.
    von Cronoxyd
    Ich habe mir jetzt alle eure Beispiele (Thx dafür schon mal) angesehen und Code-Snippes ausprobiert, habe aber nichts brauchbares rausbekommen.

    Hat noch irendjemand eine andere Idee?
    ....siehe post von Dodo....stichwort SystemParametersInfo
    ...in netz findest jede menge vb6 code....umschreiben, anpassen......by ! ;)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „SystemUnknow“ ()

    Hey Cronoxyd,

    schreib mir doch bitte eine PM, wenn du den Code noch brauchst. Der ist zwar nicht das Nonplusultra, aber er funktioniert - ggf. kann noch jemand anderes den Code verbessern. Bin dabei damals auch an meine Grenzen gestoßen :)
    Würde dir dann entsprechend eine Antwort hier im Thread geben. Wird dann aber erst wieder morgen was, da ich die Code nur auf Arbeit habe :)

    Grüße,
    Pry
    Dateien umbenennen und nummerieren - nichts leichter als das!

    Basic File Renamer: 100%

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

    Pry´s Appbar Example

    Wie funktioniert denn das Beispiel vom Pry in groben Zügen?

    Ich hab es mal eben ausprobiert und danach andere Anwendungen gestartet und maximiert...

    Das macht genau das, was ich beabsichtige. Pry? Verrätst Du mir das Geheimnis?
    Klar, mache ich.

    Hier der Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. Public AppDeskData As New AppDeskBar
    4. Public fBarRegistered As Boolean = False
    5. Public ret, i, uCallBack As Integer
    6. Structure RECT
    7. Public left As Integer
    8. Public top As Integer
    9. Public right As Integer
    10. Public bottom As Integer
    11. End Structure
    12. Structure AppDeskBar
    13. Public cbSize As Integer
    14. Public hWnd As IntPtr
    15. Public uCallbackMessage As Integer
    16. Public uEdge As Integer
    17. Public rc As RECT
    18. Public lParam As IntPtr
    19. End Structure
    20. Enum ABMsg
    21. ABM_NEW = 0
    22. ABM_REMOVE = 1
    23. ABM_QUERYPOS = 2
    24. ABM_SETPOS = 3
    25. ABM_GETSTATE = 4
    26. ABM_GETTASKBARPOS = 5
    27. ABM_ACTIVATE = 6
    28. ABM_GETAUTOHIDEBAR = 7
    29. ABM_SETAUTOHIDEBAR = 8
    30. ABM_WINDOWPOSCHANGED = 9
    31. ABM_SETSTATE = 10
    32. End Enum
    33. Enum ABEdge
    34. ABE_LEFT = 0
    35. ABE_TOP = 1
    36. ABE_RIGHT = 2
    37. ABE_BOTTOM = 3
    38. End Enum
    39. <DllImport("SHELL32", CallingConvention:=CallingConvention.StdCall)> _
    40. Public Shared Function SHAppBarMessage(ByVal dwMessage As Integer, ByRef BarrData As AppDeskBar) As Integer
    41. End Function
    42. <DllImport("User32.dll", CharSet:=CharSet.Auto)> _
    43. Public Shared Function RegisterWindowMessage(ByVal msg As String) As Integer
    44. End Function
    45. Public Sub RegisterBar(ByVal frm As Form, Optional ByVal dockEdge As ABEdge = ABEdge.ABE_TOP)
    46. AppDeskData.cbSize = Marshal.SizeOf(AppDeskData)
    47. AppDeskData.hWnd = Me.Handle
    48. If Not fBarRegistered Then
    49. uCallBack = RegisterWindowMessage("AppBarMessage")
    50. AppDeskData.uCallbackMessage = uCallBack
    51. ret = SHAppBarMessage(ABMsg.ABM_NEW, AppDeskData)
    52. fBarRegistered = True
    53. ABSetPos()
    54. End If
    55. End Sub
    56. Private Sub ABSetPos()
    57. Dim abd As New AppDeskBar
    58. abd.cbSize = Marshal.SizeOf(abd)
    59. abd.hWnd = Me.Handle
    60. abd.uEdge = ABEdge.ABE_TOP
    61. abd.rc.top = 0
    62. abd.rc.bottom = Size.Height
    63. SHAppBarMessage(ABMsg.ABM_QUERYPOS, abd)
    64. SHAppBarMessage(ABMsg.ABM_SETPOS, abd)
    65. End Sub
    66. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    67. If fBarRegistered Then
    68. fBarRegistered = False
    69. Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Sizable
    70. Me.Width = 305
    71. Me.Height = 85
    72. Me.ShowInTaskbar = True
    73. ret = SHAppBarMessage(ABMsg.ABM_REMOVE, AppDeskData)
    74. End If
    75. End Sub
    76. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    77. Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    78. RegisterBar(Me, ABEdge.ABE_TOP)
    79. Threading.Thread.Sleep(500)
    80. Timer1.Enabled = True
    81. End Sub
    82. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    83. Me.Location = New Point(0, 0)
    84. Me.Width = Windows.Forms.SystemInformation.WorkingArea.Width
    85. Timer1.Enabled = False
    86. End Sub
    87. End Class

    Bitte beachte aber, dass der Code wahrscheinlich nicht das Nonplusultra ist :) Er ist schon etwas älter.
    Außerdem solltest du 2 Buttons und einen Timer auf deiner Form platzieren.

    Viele Grüße,
    Pry
    Dateien umbenennen und nummerieren - nichts leichter als das!

    Basic File Renamer: 100%

    Cronoxyd schrieb:

    Danke Pry, dein Code funktioniert toll, aber ich habe noch eine Frage: Wie bewirkt man, dass die Form rechts wie die Windows-Sidebar angedockt wird?

    VB.NET-Quellcode

    1. RegisterBar(Me, ABEdge.ABE_RIGHT)
    Es sollte aber klar sein, dass du deine Form dann entsprechend anpassen musst.

    Viele Grüße,
    Pry
    Dateien umbenennen und nummerieren - nichts leichter als das!

    Basic File Renamer: 100%

    Cronoxyd schrieb:

    Habe ich auch schon...

    Mal im Ernst: Kannst du nicht allein gucken? Ein bisschen Eigeninitiative wäre echt angebracht. Wenn du das alles hier nicht wenigstens annähernd verstehst, dann solltest du dir echt ein anderes Projekt suchen...

    VB.NET-Quellcode

    1. Public Sub RegisterBar(ByVal frm As Form, Optional ByVal dockEdge As ABEdge = ABEdge.ABE_TOP)
    Dateien umbenennen und nummerieren - nichts leichter als das!

    Basic File Renamer: 100%
    So, füge noch folgendes in deinen Code ein:

    VB.NET-Quellcode

    1. abd.rc.left = Windows.Forms.SystemInformation.WorkingArea.Width - 100

    Damit hast du auf der rechten Seite einen reservierten Bereich von 100px. Dann sollte aber endlich alles funktionieren :)

    Grüße,
    Pry
    Dateien umbenennen und nummerieren - nichts leichter als das!

    Basic File Renamer: 100%