Gui??

  • Hi erstmal :D

    ich wüsste gerne wie ich es in volgendem script hinbekomme, dass die neu erstellten editboxen auch nach dem schließen und dem erneuten asführen der gui wieder da sind. Ich meine dass alle neu erstellten "gespeichert" werden.

    Ich hoffe mir kann jemand helfen und bedanke mich schonmal im vorraus :D !!

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    #Include <GuiScrollBars.au3>
    #include <ScrollBarConstants.au3>
    #Include <GUIScroll.au3>

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

    Global $hEdit[1]
    $hGui = GUICreate("Gui", 300, 500)
    $hAdd = GUICtrlCreateButton("Hinzufügen", 30, 20, 100, 25)
    $hEdit[0] = GUICtrlCreateEdit("", 20, 60, 260, 100, BitOR($WS_VSCROLL, $ES_WANTRETURN))
    GUISetState()
    Scrollbar_Create($hGui, $SB_VERT, 10000)
    Scrollbar_Step(20, $hGui, $SB_VERT)

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hAdd
    ReDim $hEdit[UBound($hEdit) + 1]
    $aPos = ControlGetPos($hGui, "", $hEdit[UBound($hEdit) - 2])
    $hEdit[UBound($hEdit) - 1] = GUICtrlCreateEdit("", 20, $aPos[1] + $aPos[3], 260, 100, BitOR($WS_VSCROLL, $ES_WANTRETURN))
    EndSwitch
    WEnd

    [/autoit]
  • Hallo StormRider,

    die Anzahl der Edit beim Verlassen mit IniWrite in einer INI speichern und beim nächsten Start mit IniRead die Anzahl auslesen und in einer Schleife wieder erzeugen. Falls du die Texte auch speichern willst schau dir FileRead und FileWrite an,

    mfg (Auto)Bert

  • thx Autobert du hilfst mir immer wieder!!

    insofern mir noch zu helfen ist :rofl:

  • Was ist das für ein Include? Kannst du es mal uppen? Sonst IniWrite benutzen, vorher die EditBox auslesen (GUICtrlRead()) und mit einer Variablen deklarieren (Ich glaube es gibt auch eine andere Weise:

    [autoit]


    $writeedit1 = GUICtrlRead($Edit1)
    IniWrite(@ScriptDir & "\settings.ini", "Programm", "Edit1", $saveedit1)

    [/autoit]

    Und dann beim nächsten Start, bevor der Schleife (Beim GUI) folgendes einfügen:

    [autoit]


    $readedit1 = IniRead(@ScriptDir & "\settings.ini", "Programm", "Edit1", "")
    GuiCtrlSetData($Edit1, $readedit1)

    [/autoit]

    So kenne ich es, es gibt wahrscheinlich noch praktischere Methoden, hoffe das sie jemand hier reinschreibt, damit ich auch was davon lerne...

    MfG,
    BurakSZ

  • thx

    und hier das include:

    Spoiler anzeigen
    [autoit]

    #cs
    Functions:
    Scrollbar_Create($hWnd, $iBar, $iMax)
    Scrollbar_Scroll($hWnd, $iBar, $iPos)
    Scrollbar_GetPos($hWnd, $iBar)
    Scrollbar_Step($iStep, $hWnd=0, $iBar=0)
    #CE

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

    #Include <GuiScrollBars.au3>
    #include<GuiconstantsEx.au3>
    #include<WindowsConstants.au3>
    #include <ScrollBarConstants.au3>
    Global $SCROLL_AMOUNTS[1][3]
    $SCROLL_AMOUNTS[0][0] = 1
    func Scrollbar_Create($hWnd, $iBar, $iMax)

    Local $Size = WinGetClientSize($hWnd)

    If $iBar = $SB_HORZ Then
    $Size = $Size[0]
    ElseIf $iBar = $SB_VERT Then
    $Size = $Size[1]
    Else
    Return 0
    EndIf

    ReDim $SCROLL_AMOUNTS[UBound($SCROLL_AMOUNTS)+1][3]
    $SCROLL_AMOUNTS[UBound($SCROLL_AMOUNTS)-1][0] = $hWnd
    $SCROLL_AMOUNTS[UBound($SCROLL_AMOUNTS)-1][1] = $iBar
    $SCROLL_AMOUNTS[UBound($SCROLL_AMOUNTS)-1][2] = $SCROLL_AMOUNTS[0][0]

    _GUIScrollBars_EnableScrollBar($hWnd, $iBar)
    _GUIScrollBars_SetScrollRange($hWnd, $iBar, 0,$iMax-1)
    _GUIScrollBars_SetScrollInfoPage($hWnd, $iBar, $Size)

    GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL")
    GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL")

    Return $iMax

    EndFunc
    Func Scrollbar_GetPos($hWnd, $iBar)

    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)

    Return DllStructGetData($tSCROLLINFO, "nPos")

    EndFunc
    Func Scrollbar_Scroll($hWnd, $iBar, $iPos)

    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)

    $iCurrentPos = DllStructGetData($tSCROLLINFO, "nPos")

    DllStructSetData($tSCROLLINFO, "nPos", $iPos)
    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $iBar, $tSCROLLINFO)

    If $iBar = $SB_VERT Then

    $iRound = 0

    for $i = 1 to UBound($SCROLL_AMOUNTS)-1
    If $SCROLL_AMOUNTS[$i][0] = $hWnd And $SCROLL_AMOUNTS[$i][1] = $SB_VERT Then
    $iRound = $SCROLL_AMOUNTS[$i][2]
    EndIf
    Next

    If Not $iRound Then Return 0

    _GUIScrollBars_ScrollWindow($hWnd, 0, Round(($iCurrentPos-$iPos)/$iRound)*$iRound)
    ElseIf $iBar = $SB_HORZ Then

    $iRound = 0

    for $i = 1 to UBound($SCROLL_AMOUNTS)-1
    If $SCROLL_AMOUNTS[$i][0] = $hWnd And $SCROLL_AMOUNTS[$i][1] = $SB_HORZ Then
    $iRound = $SCROLL_AMOUNTS[$i][2]
    EndIf
    Next

    If Not $iRound Then Return 0

    _GUIScrollBars_ScrollWindow($hWnd, Round(($iCurrentPos-$iPos)/$iRound)*$iRound, 0)
    Else
    Return 0
    EndIf

    Return 1

    EndFunc
    Func Scrollbar_Step($iStep, $hWnd=0, $iBar=0)

    If not $hWnd or Not $iBar Then

    $SCROLL_AMOUNTS[0][0] = $iStep
    Return 1

    EndIf

    $iID = 0

    for $i = 1 to UBound($SCROLL_AMOUNTS)-1
    If $SCROLL_AMOUNTS[$i][0] = $hWnd And $SCROLL_AMOUNTS[$i][1] = $iBar Then
    $iID = $i
    ExitLoop
    EndIf
    Next

    If Not $iID Then Return 0

    $SCROLL_AMOUNTS[$iID][2] = $iStep

    Return 1

    EndFunc
    Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)

    #forceref $Msg, $wParam, $lParam
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Local $index = -1, $yChar, $yPos
    Local $Min, $Max, $Page, $Pos, $TrackPos
    ; Get all the vertial scroll bar information
    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
    $Min = DllStructGetData($tSCROLLINFO, "nMin")
    $Max = DllStructGetData($tSCROLLINFO, "nMax")
    $Page = DllStructGetData($tSCROLLINFO, "nPage")
    ; Save the position for comparison later on
    $yPos = DllStructGetData($tSCROLLINFO, "nPos")
    $Pos = $yPos
    $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")

    $iRound = 0

    for $i = 1 to UBound($SCROLL_AMOUNTS)-1
    If $SCROLL_AMOUNTS[$i][0] = $hWnd And $SCROLL_AMOUNTS[$i][1] = $SB_VERT Then
    $iRound = $SCROLL_AMOUNTS[$i][2]
    EndIf
    Next

    if Not $iRound Then Return $GUI_RUNDEFMSG

    Switch $nScrollCode
    Case $SB_TOP ; user clicked the HOME keyboard key
    DllStructSetData($tSCROLLINFO, "nPos", $Min)
    Case $SB_BOTTOM ; user clicked the END keyboard key
    DllStructSetData($tSCROLLINFO, "nPos", $Max)
    Case $SB_LINEUP ; user clicked the top arrow
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - $iRound)
    Case $SB_LINEDOWN ; user clicked the bottom arrow
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + $iRound)
    Case $SB_PAGEUP ; user clicked the scroll bar shaft above the scroll box
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)
    Case $SB_PAGEDOWN ; user clicked the scroll bar shaft below the scroll box
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)
    Case $SB_THUMBTRACK ; user dragged the scroll box
    DllStructSetData($tSCROLLINFO, "nPos", Round($TrackPos/$iRound)*$iRound)
    EndSwitch

    ;~ // Set the position and then retrieve it. Due to adjustments
    ;~ // by Windows it may not be the same as the value set.
    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    ;// If the position has changed, scroll the window and update it
    $Pos = DllStructGetData($tSCROLLINFO, "nPos")


    If ($Pos <> $yPos) Then
    _GUIScrollBars_ScrollWindow($hWnd, 0, $yPos - $Pos)
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_VSCROLL
    Func WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)

    #forceref $Msg, $wParam, $lParam
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Local $index = -1, $yChar, $yPos
    Local $Min, $Max, $Page, $Pos, $TrackPos
    ; Get all the vertial scroll bar information
    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ)
    $Min = DllStructGetData($tSCROLLINFO, "nMin")
    $Max = DllStructGetData($tSCROLLINFO, "nMax")
    $Page = DllStructGetData($tSCROLLINFO, "nPage")
    ; Save the position for comparison later on
    $yPos = DllStructGetData($tSCROLLINFO, "nPos")
    $Pos = $yPos
    $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")

    $iRound = 0

    for $i = 1 to UBound($SCROLL_AMOUNTS)-1
    If $SCROLL_AMOUNTS[$i][0] = $hWnd And $SCROLL_AMOUNTS[$i][1] = $SB_HORZ Then
    $iRound = $SCROLL_AMOUNTS[$i][2]
    EndIf
    Next

    if Not $iRound Then Return $GUI_RUNDEFMSG

    Switch $nScrollCode
    Case $SB_TOP ; user clicked the HOME keyboard key
    DllStructSetData($tSCROLLINFO, "nPos", $Min)
    Case $SB_BOTTOM ; user clicked the END keyboard key
    DllStructSetData($tSCROLLINFO, "nPos", $Max)
    Case $SB_LINEUP ; user clicked the top arrow
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - $iRound)
    Case $SB_LINEDOWN ; user clicked the bottom arrow
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + $iRound)
    Case $SB_PAGEUP ; user clicked the scroll bar shaft above the scroll box
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)
    Case $SB_PAGEDOWN ; user clicked the scroll bar shaft below the scroll box
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)
    Case $SB_THUMBTRACK ; user dragged the scroll box
    DllStructSetData($tSCROLLINFO, "nPos", Round($TrackPos/$iRound)*$iRound)
    EndSwitch

    ;~ // Set the position and then retrieve it. Due to adjustments
    ;~ // by Windows it may not be the same as the value set.
    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
    ;// If the position has changed, scroll the window and update it
    $Pos = DllStructGetData($tSCROLLINFO, "nPos")


    If ($Pos <> $yPos) Then
    _GUIScrollBars_ScrollWindow($hWnd, $yPos - $Pos, 0)
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_HSCROLL

    [/autoit]
  • Muss das Script hier nicht anders lauten?:

    [autoit]


    $writeedit1 = GUICtrlRead($Edit1)
    IniWrite(@ScriptDir & "\settings.ini", "Programm", "Edit1", $saveedit1)

    [/autoit]

    DIe Variable "$writeedit1" muss dann doch auch in die Inigeschrieben werden und nicht eine "$saveedit1" oder?
    Oder steh ich völlig auf dem Schlauch? ?(

  • Du kannst es aber auch so schreiben, dann ist es völlig egal.

    [autoit]

    IniWrite(@ScriptDir & "\settings.ini", "Programm", "Edit1", GUICtrlRead($Edit1))

    [/autoit]
  • und wie macht man das mit den edit hinzufügen nun?? also in der anzahl in der ini??

  • Du holst dir mit UBound die Anzahl der Einträge vom Array und schreibst sie dir in die Ini.