GUI position user abhängig speichern

  • Hi AutoIT Community,

    gibt es eine Möglichkeit die Positionsdaten der GUI in einer .ini oder .txt beim schliessen zu speichern?
    Ziel ist es das jeder der das Programm nutzt, beim zweiten start, das Programm an der von Ihm gewählten stelle wiederfindet!

    hier ein Auszug aus meinem script:

    [autoit]


    Global Const $hGUI = GUICreate("CASE LOGGER 1.1.03.04", 527, 460, 259, 211) ;Start GUI
    GUISetFont(13, 400, 0, "Calibri")
    GUISetBkColor(0xFFFFFF)
    $MenuItem1 = GUICtrlCreateMenu("&Menü") ;Menü
    $MenuItem10 = GUICtrlCreateMenuItem("Save Notes", $MenuItem1)
    $

    [/autoit]


    Vielen Dank schon jetzt.

    Gruß
    dabronko1

    Einmal editiert, zuletzt von dabronko1 (21. März 2012 um 01:23)

  • Hallo dabronko1,

    ja mit WinGetPos kannst du die derzeitigen Werte des Fensters abfragen. Wenn du dir das ganze in einem Skript anschauen willst solltest du in meinen MP3-Player (Link siehe Signatur) schauen,

    mfg autoBert

  • Allerdings wirst Du mit WinGetPos Dein blaues Wunder erleben, wenn der Benutzer das Fenster im minimierten Status schliesst.

    Besser ist es, wenn Du/Ihr es so implementier(s)t:

    Spoiler anzeigen
    [autoit]


    ; --- RECT
    Global Const $_RECT = _
    "LONG left;" & _
    "LONG top;" & _
    "LONG right;" & _
    "LONG bottom;"

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

    ; --- $WINDOWPLACEMENT
    Global Const $WINDOWPLACEMENT = _
    "UINT length;"& _
    "UINT flags;"& _
    "UINT showCmd;"& _
    "LONG ptMinPosition[2];"& _
    "LONG ptMaxPosition[2];"& _
    "LONG rcNormalPosition[4];"

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

    ; ...

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

    ; Beim Schliessen des Fensters aufgerufen
    Func SaveSettings ($hwnd)

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

    Local $rcWnd
    Local $wp = DllStructCreate ($WINDOWPLACEMENT)

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

    ; Fensterposition speichern

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

    GetWindowPlacement ($hwnd, DllStructGetPtr ($wp))

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

    $rcWnd = DllStructCreate ($_RECT, DllStructGetPtr ($wp, "rcNormalPosition"))

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

    $nLeft = DllStructGetData ($rcWnd, "left")
    $nTop = DllStructGetData ($rcWnd, "top")
    $nRight = DllStructGetData ($rcWnd, "right")
    $nBottom = DllStructGetData ($rcWnd, "bottom")

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

    IniWrite ($g_sAppCfg, "Settings", "WinPos", _
    StringFormat ("%d,%d,%d,%d", _
    $nLeft, _
    $nTop, _
    $nRight - $nLeft, _
    $nBottom - $nTop _
    ) _
    )

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

    EndFunc

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

    Func GetWindowPlacement ($hWnd, $lpwndpl)

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

    Local $aRes = DllCall ("user32.dll", "BOOL", "GetWindowPlacement", _
    "HWND", $hWnd, _
    "PTR", $lpwndpl)
    Return $aRes[0]

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

    EndFunc

    [/autoit]

    Gruß
    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (20. März 2012 um 23:27)

  • das sieht schonmal sehr gut aus,

    werde ich heut nacht mal testen, ich weiss nur nocht nicht genau an welche stelle ich was setzten muss aber das wird schon.
    Habe ich richtig gesehen, das $hWnd ersetzten muss mit der Bezeichnung meiner GUI? ($hGUI)?

    Vielen Dank

  • In dem Funktionsaufruf von GetWindowPlacement ?
    Jein.

    Mal wieder ein Flüchtigkeitsfehler von mir ...

    Habe den Code in vorigem Post ergänzt.
    Also rufst Du die Funktion SaveSettings mit dem entsprechenden Fensterhandle auf. ;)


    Gruß


  • Hallo,

    habe es mal so geschrieben, wie ich es gemacht hätte mit dem Abspeichern, etc.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Opt("TrayMenuMode", 1)
    $Open = FileOpen(@ScriptDir & "\Save.txt")
    $x = FileReadLine ($Open,1)
    $y = FileReadLine ($Open,2)
    FileClose($Open)
    $GUI = GUICreate("GUI", 615, 438,$x,$y)
    $Exit = TrayCreateItem("Beenden")
    GUISetState(@SW_SHOW)

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

    While 1
    If TrayGetMsg() = $Exit Then
    If Not WinActive ($GUI) Then WinActivate($GUI)
    $Pos = WinGetPos($GUI)
    $Open = FileOpen(@ScriptDir & "\Save.txt",2)
    FileWrite($Open,$Pos[0] & @CRLF & $Pos[1])
    FileClose($Open)
    Exit
    EndIf
    If GUIGetMsg() = $GUI_EVENT_CLOSE Then
    $Pos = WinGetPos($GUI)
    $Open = FileOpen(@ScriptDir & "\Save.txt",2)
    FileWrite($Open,$Pos[0] & @CRLF & $Pos[1])
    FileClose($Open)
    Exit
    EndIf
    WEnd

    [/autoit]