Entfernen / Anzeigen des Schließen-Symbols

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Entfernen / Anzeigen des Schließen-Symbols

    hey :D

    vbarchiv.net/tipps/details.php?id=807

    Wenn ich den Code in mein Programm einfüge ist erstmal alles super,
    aber wenn ich dan auf ihn zugreife per "Call ShowCloseButton(Me.Handle, False)" schmiert das prog sobald es zu der stelle kommt ab.

    Fehlermeldung:



    Hab noch net viel Ahnung, also net böse sein wenn die Lösung auf der hand liegt!
    Bitte nicht nur um Läsung sondern auch um aufklärung!
    Die fehlermeldung sagt mir gar nichts ^^ Invoke? Gleichgewicht des Stapels? wtf :D

    Problemlösungsversuche:
    @ alex2000
    hMenu = GetSystemMenu(hWnd, 0)
    statt:
    hMenu = GetSystemMenu(hWnd, 0&)

    Keine veränderung!

    jvbsl
    änder As Long in As Integer(oder in As IntPtr)
    Keine veränderung!



    mfg headnut

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

    Jaaaaaa davon kommts, Code blind runter saugen und ausführen, ohne das ihm versteht.
    Du muß zuerst der ganzen VB6 Code in NET umschreiben. Lade dir API View, damit du zumindest richtige APIs und Konstanten Deklaration hast.
    Variable "hmenu" in NET nicht mehr "As Long" sondern "As Integer" oder wie schon jbsl geschrieben hat "As Integer" oder "As IntPtr".

    VB.NET-Quellcode

    1. ' zunächst die benötigten Deklarationen
    2. Private Declare Function GetSystemMenu Lib "user32" ( _
    3. ByVal hwnd As IntPtr, _
    4. ByVal bRevert As Integer) As IntPtr
    5. Private Declare Function DeleteMenu Lib "user32" ( _
    6. ByVal hMenu As IntPtr, _
    7. ByVal nPosition As Integer, _
    8. ByVal wFlags As Integer) As Integer
    9. Private Declare Function DrawMenuBar Lib "user32" ( _
    10. ByVal hwnd As IntPtr) As Integer
    11. Private Const SC_CLOSE As Integer = &HF060
    12. Private Const MF_BYCOMMAND As Integer = &H0
    13. ' Entfernen / Anzeigen des Schließen-Symbols
    14. Public Sub ShowCloseButton(ByVal hWnd As IntPtr, _
    15. ByVal bShowButton As Boolean)
    16. Dim hMenu As IntPtr
    17. If Not bShowButton Then
    18. ' Schließen-Symbol deaktivieren
    19. hMenu = GetSystemMenu(hWnd, 0&)
    20. If hMenu Then
    21. Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
    22. End If
    23. Else
    24. ' Schließen-Symbol wieder aktivieren
    25. GetSystemMenu (hWnd, True)
    26. End If
    27. DrawMenuBar hWnd
    28. End Sub

    was hälst du von dem?
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    danke das du dir die mühe gemacht hast!

    wenn ich das richtige sehe hast du ja "nur" die syntax gändert und an entprechenden stellen "IntegerPointer" oder "Integer" eingefügt, oder nicht?

    mir ist den unterschied zwischen IntegerPointer und Integer noch nicht ganz klar, ein Pointer zeigt immer auf ein speicherpunkt? Aber warum kann man die vari nicht einfach unter einem Integer abspeichern?


    mfg headnut
    hey noch eine wahrscheinlich dumme frage^^

    wie kriege ich den Button wieder eingeblendet?

    VB.NET-Quellcode

    1. ' Schließen-Symbol wieder aktivieren
    2. GetSystemMenu (hWnd, True)


    geht nicht!
    Ich denke mal weil,

    VB.NET-Quellcode

    1. Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)

    den button gelöscht hat, drum habe ich mal nach greate menu gesucht,

    VB.NET-Quellcode

    1. Declare Function CreateMenu Lib "user32.dll" () As Long

    upps ;)

    VB.NET-Quellcode

    1. Declare Function CreateMenu Lib "user32" () As IntPtr


    doch bringt auch nichts!
    Möcht keine Lösung! erstmal nen richtungshinweis, möchts ja auch lernen!


    mfg headnut