2 Fenster Verschieben

    • Offizieller Beitrag

    Hallo

    So, ich hab ma ne frage^^ Hat jemmand eine idee wie ich folgendes machen kann?: 2 Fenster.. das eine links oben vom bildschirm das andere rechts unten.. das linke is sagen wir ma 400x400 px groß das rechte 200x200.. jetzt will ich das das rechte zum linken wird und das linke zum rechten.. also das fesnter was unten rechts ist (200x200) soll nun nach oben links (400x400) und das was oben links is (400x400) soll nach unten rechts (200x200) aber nich einfach so, sondern sozusagen mit einem Übergang..

    Öhm.. also ich mein das so: Grün ist Fenster A und Rot Fenster B:
    [Blockierte Grafik: http://img-up.net/img/A-BA3V.gif]

    Ich hoffe mir kann jemmand helfen :)

    Mfg Spider

    • Offizieller Beitrag

    Hallo!

    Ja, aber das eben nicht! Weil es sich nich nur um ein Fenster handelt.. sondern um 2 Fenster, die sich gleichzeitig bewegen sollen und das möglichst schnell Eig so wie hier: http://www.autoitscript.com/forum/index.php?showtopic=31383&hl=Slide++Window

    Nur halt das es 2 fenster sein müssen die sich Unterschiedlich bewegen ;)

    Mfg Spider

    • Offizieller Beitrag

    Sollte trotzdem gehen:
    Fenster1 - 1 Schritt diagonal
    Fenster2 - 1 Schritt diagonal usw. immer abwechselnd.

    Die Geschwindigkeit sollte groß genug sein, wenn du zwischen den Schritten kein Sleep einbaust.

    Hier mal ein Beispiel für ein Fenster. Brauchst jetzt nur entgegengesetzt für das andere Fenster im Wechsel laufen lassen.
    Hab mal ein Sleep eingebaut, zum besseren Angucken. ;)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Dim $x1 = 0, $y1 = 0
    Dim $w1 = 400, $h1 = 400
    $Wnd1 = GUICreate("Top Window", $w1, $h1, $x1, $y1)
    GUISetState(@SW_SHOW, $Wnd1)

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

    $x1_way = @DesktopWidth-200
    $y1_step = (@DesktopHeight-200)/$x1_way
    $size_step = 200/$x1_way

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

    For $x1 = 0 To @DesktopWidth-200
    $y1 += $y1_step
    $w1 -= $size_step
    $h1 -= $size_step
    WinMove($Wnd1,'', $x1, Int($y1), Int($w1), Int($h1))
    Sleep(5)
    Next

    [/autoit]

    EDIT: Habs grade mit 2 Fenstern probiert, wird zu langsam. Evtl. zum schnelleren Ausführen erst alle Parameter für jeden Schritt berechnen und in einem Array ablegen.

    • Offizieller Beitrag

    Hallo

    ok.. danke ersma^^ könntest du vlt den test mit den 2 fesntert posten? dann muss ich es nich erst umschrieben?! Wäre nett :)

    War heut einfach zu stressig der tag... (zeugniss tag^^ das sagt wohl alles.. am feritag den 13. :rolleyes: (wobei mein zeungiss garnich soo schlecht war.. (Durchscnitt von 2.75 und eine Gymnasialempfehlung.. was will man mehr^^ (mit < 2.5 will ich abitur machen, hab ich mir vorgenommen^^)))) (waren das genug zu klammern?^^)

    Mfg Spider

    • Offizieller Beitrag

    Oops, schon im Papierkorb. Aber ich machs nochmal.

    Edit: So, hier die 2-Fenster-Variante.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Dim $x1 = 0, $y1 = 0, $x2 = @DesktopWidth-200, $y2 = @DesktopHeight-200
    Dim $w1 = 400, $h1 = 400, $w2 = 200, $h2 = 200
    $Wnd1 = GUICreate("Top Window", $w1, $h1, $x1, $y1)
    $Wnd2 = GUICreate("Bottom Window", $w2, $h2, $x2, $y2)
    GUISetState(@SW_SHOW, $Wnd1)
    GUISetState(@SW_SHOW, $Wnd2)

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

    $x1_way = @DesktopWidth-200
    $y1_step = (@DesktopHeight-200)/$x1_way
    $size_step = 200/$x1_way

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

    $x2_way = @DesktopWidth-200
    $x2_start = $x2_way

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

    For $x1 = 0 To @DesktopWidth-200
    $y1 += $y1_step
    $w1 -= $size_step
    $h1 -= $size_step
    WinMove($Wnd1,'', $x1, Int($y1), Int($w1), Int($h1))
    $y2 -= $y1_step
    $x2 = $x2_start-$x1
    WinMove($Wnd2,'', $x2, Int($y2), Int($w1), Int($h1))
    Next

    [/autoit]

    Edit2: Und hier eine Variante, in der ein Fenster wächst und das andere schrumpft.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Dim $x1 = 0, $y1 = 0, $x2 = @DesktopWidth-200, $y2 = @DesktopHeight-200
    Dim $w1 = 400, $h1 = 400, $w2 = 200, $h2 = 200
    $Wnd1 = GUICreate("Top Window", $w1, $h1, $x1, $y1)
    $Wnd2 = GUICreate("Bottom Window", $w2, $h2, $x2, $y2)
    GUISetState(@SW_SHOW, $Wnd1)
    GUISetState(@SW_SHOW, $Wnd2)

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

    $x1_way = @DesktopWidth-200
    $y1_step = (@DesktopHeight-200)/$x1_way
    $size_step = 200/$x1_way
    $y2_step = $y1_step

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

    For $x1 = 0 To @DesktopWidth-200
    $y1 += $y1_step
    $w1 -= $size_step
    $h1 -= $size_step
    WinMove($Wnd1,'', $x1, Int($y1), Int($w1), Int($h1))
    $pos = WinGetPos($Wnd2)
    $y2 -= $pos[1]/((@DesktopWidth-200)-$x1)
    $x2 -= $pos[0]/((@DesktopWidth-200)-$x1)
    $w2 += $size_step
    $h2 += $size_step
    WinMove($Wnd2,'', Int($x2), Int($y2), Int($w2), Int($h2))
    Next

    [/autoit]
    • Offizieller Beitrag

    Hallo,

    hier mein Lösungsvorschlag:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Const $iSteps = 1000

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

    $rStepRateWidth = (@DesktopWidth - 205) / $iSteps
    $rStepRateHeight = (@DesktopHeight - 205) / $iSteps
    $rStepRateSize = 200 / $iSteps

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

    $hGUI = GUICreate("", @DesktopWidth, @DesktopHeight, -3, -3, BitOR($WS_POPUP, $WS_SYSMENU, $WS_DLGFRAME));, BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED))
    WinSetOnTop($hGUI, "", 1)
    GUISetBkColor(0x000000,$hGUI)
    GUISetState()
    $hGUIWin1 = GUICreate("", 400, 400, 0, 0, BitOR($WS_POPUP, $WS_SYSMENU, $WS_DLGFRAME),-1,$hGUI);, BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED))
    WinSetOnTop($hGUIWin1, "", 1)
    GUISetBkColor(0xFF0000,$hGUIWin1)
    ;~ WinSetTrans($hGUIWin1, "", 70 )
    GUISetState()
    $hGUIWin2 = GUICreate("", 200,200, @DesktopWidth-205, @DesktopHeight-205, BitOR($WS_POPUP, $WS_SYSMENU, $WS_DLGFRAME),-1, $hGUI);, BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED))
    WinSetOnTop($hGUIWin2, "", 1)
    GUISetBkColor(0x00FF00,$hGUIWin2)
    ;~ WinSetTrans($hGUIWin2, "", 70 )
    GUISetState()

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

    While 1

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

    WinSetOnTop($hGUIWin1, "", 1)
    For $i = 0 To $iSteps
    WinMove($hGUIWin1,"",$i * $rStepRateWidth, $i * $rStepRateHeight, 400 - $i * $rStepRateSize, 400 - $i * $rStepRateSize)
    WinMove($hGUIWin2,"", @DesktopWidth - 205 - $i * $rStepRateWidth, @DesktopHeight - 205 - $i * $rStepRateHeight, 205 + $i * $rStepRateSize, 205 + $i * $rStepRateSize)
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop 2
    EndSwitch
    Next

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

    WinSetOnTop($hGUIWin2, "", 1)
    For $i = 0 To $iSteps
    WinMove($hGUIWin2,"",$i * $rStepRateWidth, $i * $rStepRateHeight, 400 - $i * $rStepRateSize, 400 - $i * $rStepRateSize)
    WinMove($hGUIWin1,"", @DesktopWidth - 205 - $i * $rStepRateWidth, @DesktopHeight - 205 - $i * $rStepRateHeight, 205 + $i * $rStepRateSize, 205 + $i * $rStepRateSize)
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop 2
    EndSwitch
    Next
    WEnd

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

    Mit der Konstanten $iStep kannst Du einstellen mit wievielen Schritte die Fenster von oben-links nach unten unten-rechts laufen.

    • Offizieller Beitrag

    Hallo!

    Sleep(0) gibts nicht sozusagen.. das nidrigste was bei sleep geht sind 10 ms, steht auch in der autoit hilfe.. also z.B. Sleep(5) = Sleep(10)..

    Bernd: jo so änlich hab ichs auch gestern noch umgeschrieben:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Dim $x1 = 0, $y1 = 0, $x2 = @DesktopWidth-400, $y2 = @DesktopHeight-400
    Dim $w1 = 400, $h1 = 400, $w2 = 200, $h2 = 200
    $Wnd1 = GUICreate("Top Window", $w1, $h1, $x1, $y1,$WS_POPUP)
    $Wnd2 = GUICreate("Bottom Window", $w2, $h2, $x2, $y2,$WS_POPUP)
    GUISetState(@SW_SHOW, $Wnd1)
    GUISetState(@SW_SHOW, $Wnd2)

    $x1_way = @DesktopWidth-200
    $y1_step = (@DesktopHeight-200)/$x1_way
    $size_step = 200/$x1_way
    $x2_way = @DesktopWidth-200
    $y2_step = $y1_step

    $iStep = 8

    For $x1 = 0 To @DesktopWidth-200 Step $iStep
    $y1 += $y1_step*$iStep
    $w1 -= $size_step*$iStep
    $h1 -= $size_step*$iStep
    WinMove($Wnd1,'', $x1, Int($y1), Int($w1), Int($h1))
    $pos = WinGetPos($Wnd2)
    $y2 -= $pos[1]/((@DesktopWidth-200)-$x1)*$iStep
    $x2 -= $pos[0]/((@DesktopWidth-200)-$x1)*$iStep
    $w2 += $size_step*$iStep
    $h2 += $size_step*$iStep
    WinMove($Wnd2,'', Int($x2), Int($y2), Int($w2), Int($h2))
    Sleep(10)
    Next

    [/autoit]

    Vielen dank euch allen, ich mach daraus jetzt nochma ein etwas "smoothigeres" udf und stells dann den nächsten tagen mal vor..

    Mfg Spider