Warum verschiebt sich das ListView?

  • Hi,
    bei meinem Skript will ich die linke Seite der GUI aus- und einblenden.
    Jedoch verschiebt sich beim drücken des Buttons die links Seite des ListViews leicht (nur beim 1x ein- und ausblenden)
    Warum ?(

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>

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

    AutoItSetOption("GUIResizeMode", 4 + 32 + 256 + 512) ; bei Größenänderung der GUI, bleiben die Elemente unverändert

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

    $gui_hoehe = 200
    $gui_breite_ausgeklappt = 500
    $gui_breite_eingeklappt = 180
    $i = 0

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

    $gui = GUICreate("Listview Einträge", $gui_breite_ausgeklappt, $gui_hoehe, 100, 200, -1)

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

    $listview = GUICtrlCreateListView("Spalte1 |Spalte2|Spalte3", 10, 10, 300, 150);,$LVS_SORTDESCENDING)
    $item1 = GUICtrlCreateListViewItem("Eintrag2|Spalte22|Spalte23", $listview)
    $item2 = GUICtrlCreateListViewItem("Eintrag1|Spalte12|Spalte13", $listview)
    $item3 = GUICtrlCreateListViewItem("Eintrag3|Spalte32|Spalte33", $listview)
    $button = GUICtrlCreateButton("einblenden / ausblenden", 350, 10)

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

    GUISetState()
    $liste_status = 0

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

    Do
    $msg = GUIGetMsg()
    Select
    Case $msg = $button
    $pos_fenster = WinGetPos($gui)
    If $liste_status = 0 Then
    WinMove($gui, "", $pos_fenster[0] + $pos_fenster[2] - $gui_breite_eingeklappt, Default, $gui_breite_eingeklappt)
    $liste_status = 1
    Else
    WinMove($gui, "", $pos_fenster[0] + $pos_fenster[2] - $gui_breite_ausgeklappt, Default, $gui_breite_ausgeklappt)
    $liste_status = 0
    EndIf
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]
    • Offizieller Beitrag

    Das hat was mit den Resizing zu tun, probier mal das:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>

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

    AutoItSetOption("GUIResizeMode", 2 + 4 + 32 + 256 + 512) ; bei Größenänderung der GUI, bleiben die Elemente unverändert

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

    $gui_hoehe = 200
    $gui_breite_ausgeklappt = 500
    $gui_breite_eingeklappt = 180
    $i = 0

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

    $gui = GUICreate("Listview Einträge", $gui_breite_ausgeklappt, $gui_hoehe, 100, 200, -1)

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

    $listview = GUICtrlCreateListView("Spalte1 |Spalte2|Spalte3", 10, 10, 300, 150);,$LVS_SORTDESCENDING)
    $item1 = GUICtrlCreateListViewItem("Eintrag2|Spalte22|Spalte23", $listview)
    $item2 = GUICtrlCreateListViewItem("Eintrag1|Spalte12|Spalte13", $listview)
    $item3 = GUICtrlCreateListViewItem("Eintrag3|Spalte32|Spalte33", $listview)
    $button = GUICtrlCreateButton("einblenden / ausblenden", 350, 10)
    GUICtrlSetResizing(-1, 4 + 32 + 256 + 512)
    GUISetState()
    $liste_status = 0

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

    Do
    $msg = GUIGetMsg()
    Select
    Case $msg = $button
    $pos_fenster = WinGetPos($gui)
    If $liste_status = 0 Then
    WinMove($gui, "", $pos_fenster[0] + $pos_fenster[2] - $gui_breite_eingeklappt, Default, $gui_breite_eingeklappt)
    $liste_status = 1
    Else
    WinMove($gui, "", $pos_fenster[0] + $pos_fenster[2] - $gui_breite_ausgeklappt, Default, $gui_breite_ausgeklappt)
    $liste_status = 0
    EndIf
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    Edit: Beim Winmove solltest du auch die Rahmenbreite berücksichtigen. GuiGröße ist nicht gleich WinMove Größe!
    Edit 2: Der Fehler beim verschieben des Listviews lag daran, das du nicht $GUI_DOCKLEFT benutzt und deshalb beim Reisizen nicht richtig berechnet wird. Die Rahmenbreite der Gui kannst du errechnen indem du die GUI Größe mit der WinGetPos Größe vergleichst.Breitenunterschied /2 gleich Rahmenbreite.

    Edit3; Hier mit korrekter WinMove Größe:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>

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

    AutoItSetOption("GUIResizeMode", 2 + 4 + 32 + 256 + 512) ; bei Größenänderung der GUI, bleiben die Elemente unverändert

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

    $gui_hoehe = 200
    $gui_breite_ausgeklappt = 500
    $gui_breite_eingeklappt = 180
    $i = 0

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

    $gui = GUICreate("Listview Einträge", $gui_breite_ausgeklappt, $gui_hoehe, 100, 200, -1)

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

    $listview = GUICtrlCreateListView("Spalte1 |Spalte2|Spalte3", 10, 10, 300, 150);,$LVS_SORTDESCENDING)
    $item1 = GUICtrlCreateListViewItem("Eintrag2|Spalte22|Spalte23", $listview)
    $item2 = GUICtrlCreateListViewItem("Eintrag1|Spalte12|Spalte13", $listview)
    $item3 = GUICtrlCreateListViewItem("Eintrag3|Spalte32|Spalte33", $listview)
    $button = GUICtrlCreateButton("einblenden / ausblenden", 350, 10)
    GUICtrlSetResizing(-1, 4 + 32 + 256 + 512)
    GUISetState()
    $liste_status = 0
    $pos_fenster = WinGetPos($gui)
    $Rahmenbreite = ($pos_fenster[2] - $gui_breite_ausgeklappt) / 2;Einfache Rahmenbreite
    Do
    $msg = GUIGetMsg()
    Select
    Case $msg = $button
    $pos_fenster = WinGetPos($gui)
    If $liste_status = 0 Then
    WinMove($gui, "", $pos_fenster[0] + $pos_fenster[2] - $gui_breite_eingeklappt, Default, $gui_breite_eingeklappt)
    $liste_status = 1
    Else
    WinMove($gui, "", $pos_fenster[0] + $pos_fenster[2] - $gui_breite_ausgeklappt - $Rahmenbreite * 2, Default, $gui_breite_ausgeklappt + $Rahmenbreite * 2)
    $liste_status = 0
    EndIf
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]