GUI wird in Größe verändert, Werte gespeichert -> Neustart ohne Tab/Listview-Änderung

  • Hallo,

    nochmal ein Problem mit der in der Größe veränderten GUI. Wenn man im folgenden Beispiel die GUI in der Höhe vergrößert ändert sich zunächst auch die Höhe des Tab/Listview-Bereiches. Wenn man dananch neu startet, ändert sich die Größe der GUI zwar, der Tab/Listview-Bereich geht aber nicht mit...

    Wo ist der Fehler?

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ListviewConstants.au3>

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

    Global $idir = @ScriptDir & '\test.ini'
    $b_pos = IniRead($idir, "Position", 'B-Pos', "420")
    $h_pos = IniRead($idir, "Position", 'H-Pos', "400")
    $x_pos = IniRead($idir, "Position", 'X-Pos', "-1")
    $y_pos = IniRead($idir, "Position", 'Y-Pos', "-1")

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

    Example()

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

    Func Example()
    Local $radio_1, $radio_2, $msg

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

    GUICreate("GUI",$b_pos, $h_pos, $x_pos,$y_pos, $WS_SIZEBOX)

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

    $group = GUICtrlCreateGroup("Group", 15, 20, 390, 70) ; Höhe 70 soll nicht veränderbar sein
    GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group
    GUICtrlSetResizing($group, $GUI_DOCKHEIGHT + $GUI_DOCKTOP)

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

    $tab = GUICtrlCreateTab(15, 120, 390, 240)
    GUICtrlSetResizing($tab, $GUI_DOCKTOP + $GUI_DOCKBOTTOM)

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

    $tab0 = GUICtrlCreateTabItem("tab0")
    $list1 = GUICtrlCreateListView("blabla1|blabla2|blabla3|blabla4", 20, 150, 380, 200, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))
    ;GUICtrlSetResizing($list1,$GUI_DOCKTOP)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKBOTTOM)

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

    $tab1 = GUICtrlCreateTabItem("tab1")
    $list2 = GUICtrlCreateListView("blabla1|blabla2|blabla3|blabla4", 20, 150, 380, 200, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))
    ;GUICtrlSetResizing($list2, $GUI_DOCKTOP)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKBOTTOM)

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

    GUISetState()
    EndFunc

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _position()
    Exit
    EndSwitch
    WEnd

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

    Func _position()
    $size = WinGetPos("[ACTIVE]")
    IniWrite($idir, "Position", 'X-Pos', $size[0])
    IniWrite($idir, "Position", 'Y-Pos', $size[1])
    IniWrite($idir, "Position", 'B-Pos', $size[2])
    IniWrite($idir, "Position", 'H-Pos', $size[3])
    EndFunc ;==>_position

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

    Dank und Gruß
    Thomas

    Einmal editiert, zuletzt von TJF (7. August 2011 um 17:41)

  • Eigentlich ist's sehr offensichtlich:

    [autoit]

    $tab = GUICtrlCreateTab(15, 120, 390, 240)
    $list2 = GUICtrlCreateListView("blabla1|blabla2|blabla3|blabla4", 20, 150, 380, 200, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))

    [/autoit]


    Du vergibst für die Controls bei jedem Start feste Positionen und Grössen. ;)

  • Ja, ist mir schon klar. Ich mache den Neustart mit einer geänderten GUI-Größe aber nicht mit anderen Werten für die Tab/Listview. Die Frage ist nur, wie ich diese geänderten Werte für die anderen Controls abfragen und speichern kann...

    By the way: Starke Facebook und Google - Videos :)

    Einmal editiert, zuletzt von TJF (7. August 2011 um 15:01)

  • Du brauchst die geänderten Werte der Controls garnicht abfragen und speichern, stattdessen benutzt du einfach die Resize Funktion, welche du ja bereits verwendest. Damit diese angewendet wird darfst du die GUI nicht durch die ini Werte erstellen, sondern du änderst die Standard Größe und Position der GUI erst nachdem sie erstellt wurde, so als ob du das Fenster von Hand verändern würdest.

    Hier mal ein angepasstes Script:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ListviewConstants.au3>

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

    Global $idir = @ScriptDir & '\test.ini'
    Global $myGUI

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

    Example()

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

    Func Example()
    Local $radio_1, $radio_2, $msg

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

    $myGUI = GUICreate("GUI",420,400,-1,-1, $WS_SIZEBOX)

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

    $group = GUICtrlCreateGroup("Group", 15, 20, 390, 70) ; Höhe 70 soll nicht veränderbar sein
    GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group
    GUICtrlSetResizing($group, $GUI_DOCKHEIGHT + $GUI_DOCKTOP)

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

    $tab = GUICtrlCreateTab(15, 120, 390, 240)
    GUICtrlSetResizing($tab, $GUI_DOCKTOP + $GUI_DOCKBOTTOM)

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

    $tab0 = GUICtrlCreateTabItem("tab0")
    $list1 = GUICtrlCreateListView("blabla1|blabla2|blabla3|blabla4", 20, 150, 380, 200, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))
    ;GUICtrlSetResizing($list1,$GUI_DOCKTOP)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKBOTTOM)

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

    $tab1 = GUICtrlCreateTabItem("tab1")
    $list2 = GUICtrlCreateListView("blabla1|blabla2|blabla3|blabla4", 20, 150, 380, 200, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))
    ;GUICtrlSetResizing($list2, $GUI_DOCKTOP)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKBOTTOM)

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

    loadPos() ; lädt letzte Fenstergröße / Position
    GUISetState()
    EndFunc

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    savePos()
    Exit
    EndSwitch
    WEnd

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

    Func savePos()
    $c_pos = WinGetPos($myGUI)
    IniWrite($idir, "Position", 'X-Pos', $c_pos[0])
    IniWrite($idir, "Position", 'Y-Pos', $c_pos[1])
    IniWrite($idir, "Position", 'B-Pos', $c_pos[2])
    IniWrite($idir, "Position", 'H-Pos', $c_pos[3])
    EndFunc ;==>_position

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

    Func loadPos()
    $c_pos = WinGetPos($myGUI)
    $x_pos = IniRead($idir, "Position", 'X-Pos', $c_pos[0])
    $y_pos = IniRead($idir, "Position", 'Y-Pos', $c_pos[1])
    $b_pos = IniRead($idir, "Position", 'B-Pos', $c_pos[2])
    $h_pos = IniRead($idir, "Position", 'H-Pos', $c_pos[3])
    WinMove($myGUI,"",$x_pos,$y_pos,$b_pos,$h_pos)
    EndFunc

    [/autoit]