Fenster einmal als Child, einmal als PopUp-Window

  • Hallo zusammen,

    ich versuche dieses kleine Skript im OnEvent-Modus (Original von @progandy im MsgLoop-Modus)

    Spoiler anzeigen
    [autoit]

    Opt('GUIOnEventMode', 1)

    [/autoit] [autoit][/autoit] [autoit]

    #include<GUIConstantsEx.au3>
    #include<WinAPI.au3>
    #include<WindowsConstants.au3>
    #include<Constants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Toolbar_hoehe = 130, $Toolbar_breite = 350
    Global $hfrmMain, $hfrmDropTarget, $aPosDropTarget
    _Main()
    ;_CreateDropTarget()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Main()
    $hfrmMain = GUICreate("Parent")
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
    ; GUISetOnEvent($GUI_EVENT_MINIMIZE, '_Minimize')
    ; TraySetOnEvent($TRAY_EVENT_MOUSEOVER, '_Restore')
    _CreateDropTarget(True)
    GUISetState()
    GUISetState(@SW_SHOW, $hfrmMain)
    GUISetState(@SW_SHOW, $hfrmDropTarget)
    While 1
    Sleep(125)
    WEnd
    EndFunc ;==>_Main

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _CreateDropTarget($bFirst = True)
    $hfrmDropTarget = GUICreate("Toolbar", 165, 165, -1, -1, $WS_SYSMENU + $WS_CAPTION, $WS_EX_TOOLWINDOW,$hfrmMain)
    GUISetOnEvent($GUI_EVENT_CLOSE,'_ToggleButton')
    $aPosDropTarget = WinGetPos($hfrmDropTarget)
    GUISetBkColor(0xaabbcc)
    $btnToggle = GUICtrlCreateButton("TG", 1, 1, 28, 28)
    GUICtrlSetOnEvent(-1,'_ToggleButton')
    GUISetState()
    if $bFirst then _ToggleButton()
    While 1
    Sleep(125)
    WEnd
    EndFunc ;==>_Main

    [/autoit] [autoit][/autoit] [autoit]

    Func _ToggleButton()
    If _WinAPI_GetParent($hfrmDropTarget) <> $hfrmMain Then ; wenn es kein Child-Fenster ist, dann zu einem machen
    ConsoleWrite("bin wieder Kind" & @CRLF)
    GUISetStyle(BitOR($WS_CHILD,$WS_BORDER),0,$hfrmDropTarget) ; den Style ändern
    _WinAPI_SetParent($hfrmDropTarget, $hfrmMain) ; einbetten
    WinMove($hfrmDropTarget,"",0,0,$Toolbar_breite,$Toolbar_hoehe) ; an 0,0 des Hauptfensters schieben
    _WinAPI_RedrawWindow($hfrmDropTarget) ; neu zeichenen
    _WinAPI_RedrawWindow($hfrmMain) ; neu zeichenen
    GUISetState(@SW_SHOW,$hfrmMain)
    WinSetOnTop($hfrmDropTarget, "", 0)
    Else
    ConsoleWrite("bin wieder selbständig" & @CRLF)
    $Pos = WinGetPos("[CLASS:Shell_TrayWnd]") ; positionieren an rechter unterer Ecke der Taskbar
    $aPosDropTarget = WinGetPos($hfrmDropTarget) ; alte Position speichern
    _WinAPI_SetParent($hfrmDropTarget,0) ; Parent entfernen
    ;WinMove($hfrmDropTarget,"",$aPosDropTarget[0],$aPosDropTarget[1],$aPosDropTarget[2],$aPosDropTarget[3]) ; an alte Position schieben
    WinMove($hfrmDropTarget,"", $Pos[0]+$Pos[2]-36, $Pos[1]-36, 36, 36) ; im Traybereich anzeigen
    GUISetStyle($WS_SYSMENU+$WS_CAPTION,$WS_EX_TOOLWINDOW,$hfrmDropTarget) ; neuer Style
    WinSetOnTop($hfrmDropTarget, "", 1)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit]


    wenn ich die Zeile 60 so umschreibe klappt gar nichts mehr:

    [autoit]

    GUISetStyle(BitOR($WS_POPUP, $WS_BORDER), BitOR($WS_EX_ACCEPTFILES,$WS_EX_TOPMOST),$hfrmDropTarget) ; neuer Style

    [/autoit]

    komme auf keine Lösung: Ich setze den für mich wichtigen Stil jetzt einfach bereits bei der Erstellung und habe die Zeile gelöscht,

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (25. Juni 2009 um 10:27)