Form Schatten funktioniert nich.. :(

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Betzi.

    Form Schatten funktioniert nich.. :(

    Hallihallo!
    Ich hab ein Problem...
    Ich hab hier folgendes:


    nun, und ich möchte bei meinem programm jetzt einen schatten hinzufügen, dieser sollte unten weggelassen werden, wenns geht.
    ich hab mal gegoogeld, da finde ich allerdings nur dashier:
    vbarchiv.net/tipps/tipp_1479-f…en-hinzufuegen-winxp.html


    das hat auch schonmal bei mir funktioniert, aber irgentwie wir mit das hwnd im load event unterstrichen, ich weiß mir auch nicht u helfen, da ich nichtmal weiß, was das bedeuten soll :(
    hmm, könntest du oder jmd anders das vielleicht machen? ich hab nochnie mit vb6 was gemacht...
    oder.. theorethisch könnte ich es auch mit aero und dann formborderstyle = none machen.. aber, geht dann nicht alles schwarze auf aero?
    ...weil Vb6 Code wird in NET nicht funz, Deklarationen müssen umgeschrieben, siehe letzten post.

    VB.NET-Quellcode

    1. ' Benötigte API-Deklarationen
    2. Private Declare Function GetClassLong Lib "user32" _
    3. Alias "GetClassLongA" ( _
    4. ByVal hwnd As Long, _
    5. ByVal nIndex As Long) As Long
    6. Private Declare Function SetClassLong Lib "user32" _
    7. Alias "SetClassLongA" ( _
    8. ByVal hwnd As Long, _
    9. ByVal nIndex As Long, _
    10. ByVal dwNewLong As Long) As Long
    11. Private Const GCL_STYLE = (-26)
    12. Private Const CS_DROPSHADOW = &H20000




    .....wir mit das hwnd im load event unterstrichen.....

    hwnd = VB6
    Handle = VB NET

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

    hmmmm...
    ich möchte jetzt den schatten gerne in die optionenform einbringen, hab auch das hwnd gegen handle ausgetauscht überall, allerdings wird mir dann
    Call SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) Or CS_DROPSHADOW) grün markiert, wenn ich die form öffnen will und es kommt folgende fehlermeldung:


    PInvokeStackImbalance wurde erkannt.
    Message: Ein Aufruf an die PInvoke-Funktion "MiniBar!MiniBar.Optionen::GetClassLong" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.
    ich hab auch mal geguckt auf pinvoke.net, wahrscheinlich muss ich die anderen deklarationen auchnoch austauschen, ne? ich find da aber irgentwie auf pinvoke nichts zum austauschen oder so...? bin ich zu blöd?
    nicht getestet:

    VB.NET-Quellcode

    1. Private Declare Function GetClassLong Lib "user32.dll" Alias "GetClassLongA" (ByVal hwnd As IntPtr, ByVal nIndex As Int32) As Int32
    2. Private Declare Function SetClassLong Lib "user32.dll" Alias "SetClassLongA" (ByVal hwnd As IntPtr, ByVal nIndex As Int32, ByVal dwNewLong As Int32) As Int32
    3. Private Const GCL_STYLE As Int32 = -26
    4. Private Const CS_DROPSHADOW As Int32 = &H20000
    5. Private Sub SetWindowShadow(ByVal hWnd As IntPtr)
    6. Call SetClassLong(hWnd, GCL_STYLE, GetClassLong(hWnd, GCL_STYLE) Or CS_DROPSHADOW)
    7. End Sub


    aufruf (z.b in Form Load Event):

    VB.NET-Quellcode

    1. SetWindowShadow Me.Handle
    okay, es funktioniert ;) ich danke dir, jedoch ist jetzt der schatten bei allen formen... außer bei der "mini" form, weil die sich vor der optionenform öffnet... gibts einen weg, dass NUR die Optionenform von dem Schatten betroffen ist? denn bei den anderen formen sieht das Schei*e aus...
    Wenn du nur in einem Form/Fenster schatten haben willst, dann muß du von diese Form Handle ermitteln und diese bei Funktion aufruf eingeben.

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