Controlsend ^end an eigenes Edit funktioniert nicht

  • Hallo Com,

    dieses Beispiel:

    [autoit]

    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ScrollBarConstants.au3>
    #include <WinAPI.au3>
    #include <EditConstants.au3>
    #include <GuiScrollBars.au3>

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

    _CreateGui()

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

    Func _CreateGui()
    Local $l_InternetSession = -99, $l_FTPSession
    Local $errOpen, $errFTP
    Local $nMsg
    Local $iMaxDepth = 3;max 3 vereichnisebenen <1=unendliche Rekrusionstiefe
    Local $mainGui = GUICreate("Test Controlsend to Edit", 623, 450, 271, 235)
    Local $idLblLog = GUICtrlCreateEdit("", 8, 5, 467, 315, BitOR($WS_HSCROLL, $WS_VSCROLL, $ES_READONLY, $ES_WANTRETURN))
    Local $idPrgFile = GUICtrlCreateProgress(8, 344, 598, 25)
    Local $hGuiChild1 = GUICreate("Child1", 594, 21, 10, 346, $WS_POPUP, $WS_EX_MDICHILD, $mainGui)
    Local $idLblFilePer = GUICtrlCreateLabel("", 2, 2, 590, 17, $SS_CENTER)
    GUICtrlSetFont(-1, 11, 2800)
    WinSetTrans($hGuiChild1, "", 180)
    GUISwitch($mainGui)
    Local $idLblFile = GUICtrlCreateLabel("", 8, 322, 594, 17)
    Local $idPrgKB = GUICtrlCreateProgress(8, 392, 598, 25)
    Local $hGuiChild2 = GUICreate("Child2", 595, 23, 10, 394, $WS_POPUP, $WS_EX_MDICHILD, $mainGui)
    Local $idLblKBPer = GUICtrlCreateLabel("", 2, 1, 590, 19, $SS_CENTER)
    GUICtrlSetFont(-1, 11, 2800)
    WinSetTrans($hGuiChild2, "", 180)
    GUISwitch($mainGui)
    Local $idLblKB = GUICtrlCreateLabel("", 8, 372, 594, 17)
    GUICtrlCreateLabel('Rekursionstiefe"', 530, 5)
    Local $idInpMaxDepth = GUICtrlCreateInput("3", 483, 5, 35, 22);, $ES_NUMBER)
    GUICtrlSetTip(-1, 'Maxinale Rekursionstiefe,<1=unendlich')
    ; Local $idBtnConnect = GUICtrlCreateButton("&Verbinden", 483, 40) ;verbinden mit FTP-Server
    ; Local $idBtnDisconnect = GUICtrlCreateButton("&Trennen", 483, 80) ;vom Server trennen
    Local $idBtnDL = GUICtrlCreateButton("&Download", 483, 120) ;Download starten
    Local $idBtnExit = GUICtrlCreateButton("Be&enden", 483, 160) ;Exit

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

    Local $idLblColapsedTime = GUICtrlCreateLabel("", 8, 420, 400, 17)

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

    Local $idLblKBperSec = GUICtrlCreateLabel("", 450, 420, 500, 17)
    GUISetState(@SW_SHOW, $hGuiChild1)
    GUISetState(@SW_SHOW, $hGuiChild2)
    _GUIScrollBars_Init(GUICtrlGetHandle($idLblLog))
    GUISetState(@SW_SHOW, $mainGui)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Gui_EVENT_CLOSE, $idBtnExit
    Exit
    Case $idBtnDL
    GUICtrlSetState($idBtnDL, $Gui_DISABLE)
    GUICtrlSetState($idBtnExit, $Gui_DISABLE)
    _simulateDL($idPrgFile, $idLblFilePer, $idLblLog, $mainGui)
    GUICtrlSetState($idBtnDL, $Gui_ENABLE)
    GUICtrlSetState($idBtnExit, $Gui_ENABLE)
    EndSwitch
    WEnd
    EndFunc ;==>_CreateGui

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

    Func _simulateDL($idPrgFile, $idLblFilePer, $idLblLog, $mainGui)
    Local $text = "Hello! "
    For $i = 0 To 100
    If $idPrgFile <> 0 Then GUICtrlSetData($idPrgFile, $i)
    If $idLblFilePer <> 0 Then GUICtrlSetData($idLblFilePer, $i & " %")
    _report($text&$i, $idLblLog, $mainGui, 0)
    Sleep(100)
    Next
    EndFunc ;==>_simulateDL

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

    Func _report($sMsg, $idLblLog = 0, $mainGui = 0, $iDebug = 0)
    GUICtrlSetData($idLblLog, GUICtrlRead($idLblLog) & $sMsg & @CRLF)
    If $mainGui <> 0 And $idLblLog <> 0 Then
    ; Local $scrollbarVertPos = _GUIScrollBars_GetScrollPos(GUICtrlGetHandle($idLblLog), $SB_VERT)
    ; ControlSend($mainGui, "", GUICtrlGetHandle($idLblLog), "^{END}")
    ControlSend($mainGui, "", $idLblLog, "^{END}")
    ; _GUIScrollBars_SetScrollInfoPos(GUICtrlGetHandle($idLblLog), $SB_VERT, $scrollbarVertPos)
    EndIf
    If $iDebug Then ConsoleWrite($sMsg & @CRLF)
    EndFunc ;==>_report

    [/autoit]


    zeigt das Problem welches ich in einem Projekt habe. Das Edit wird nur richtig (also die letzten Einträge) angezeigt wenn meine GUI nicht den Focus hat. Gibt es eine andere Möglichkeit immer zu der letzten Zeile zu springen, oder muss ich evtl. andere Styles bei der Main- und den Child-GUI's angeben,

    danke autobert

    Einmal editiert, zuletzt von autobert2 (9. Juli 2015 um 18:05)

  • Du kannst natürlich zur letzten Zeile springen...

    ...oder du hängst einfach mit _GUICtrlEdit_AppendText() deinen Text an.
    ...oder fügst mit _GUICtrlEdit_InsertText() deinen Text an gewünschter Position ein

    Das dafür benötigte Handle kriegst du mit GUICtrlGetHandle().
    Und auf das "#include <GUIEdit.au3>" nicht vergessen :D

  • Danke hat geklappt:

    [autoit]

    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ScrollBarConstants.au3>
    #include <WinAPI.au3>
    #include <EditConstants.au3>
    #include <GuiScrollBars.au3>
    #include <GUIEdit.au3>

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

    _CreateGui()

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

    Func _CreateGui()
    Local $l_InternetSession = -99, $l_FTPSession
    Local $errOpen, $errFTP
    Local $nMsg
    Local $iMaxDepth = 3;max 3 vereichnisebenen <1=unendliche Rekrusionstiefe
    Local $mainGui = GUICreate("Test Controlsend to Edit", 623, 450, 271, 235)
    Local $idLblLog = GUICtrlCreateEdit("", 8, 5, 467, 315, BitOR($WS_HSCROLL, $WS_VSCROLL, $ES_READONLY, $ES_WANTRETURN))
    Local $hLog = GUICtrlGetHandle($idLblLog)
    Local $idPrgFile = GUICtrlCreateProgress(8, 344, 598, 25)
    Local $hGuiChild1 = GUICreate("Child1", 594, 21, 10, 346, $WS_POPUP, $WS_EX_MDICHILD, $mainGui)
    Local $idLblFilePer = GUICtrlCreateLabel("", 2, 2, 590, 17, $SS_CENTER)
    GUICtrlSetFont(-1, 11, 2800)
    WinSetTrans($hGuiChild1, "", 180)
    GUISwitch($mainGui)
    Local $idLblFile = GUICtrlCreateLabel("", 8, 322, 594, 17)
    Local $idPrgKB = GUICtrlCreateProgress(8, 392, 598, 25)
    Local $hGuiChild2 = GUICreate("Child2", 595, 23, 10, 394, $WS_POPUP, $WS_EX_MDICHILD, $mainGui)
    Local $idLblKBPer = GUICtrlCreateLabel("", 2, 1, 590, 19, $SS_CENTER)
    GUICtrlSetFont(-1, 11, 2800)
    WinSetTrans($hGuiChild2, "", 180)
    GUISwitch($mainGui)
    Local $idLblKB = GUICtrlCreateLabel("", 8, 372, 594, 17)
    GUICtrlCreateLabel('Rekursionstiefe"', 530, 5)
    Local $idInpMaxDepth = GUICtrlCreateInput("3", 483, 5, 35, 22);, $ES_NUMBER)
    GUICtrlSetTip(-1, 'Maxinale Rekursionstiefe,<1=unendlich')
    ; Local $idBtnConnect = GUICtrlCreateButton("&Verbinden", 483, 40) ;verbinden mit FTP-Server
    ; Local $idBtnDisconnect = GUICtrlCreateButton("&Trennen", 483, 80) ;vom Server trennen
    Local $idBtnDL = GUICtrlCreateButton("&Download", 483, 120) ;Download starten
    Local $idBtnExit = GUICtrlCreateButton("Be&enden", 483, 160) ;Exit

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

    Local $idLblColapsedTime = GUICtrlCreateLabel("", 8, 420, 400, 17)

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

    Local $idLblKBperSec = GUICtrlCreateLabel("", 450, 420, 500, 17)
    GUISetState(@SW_SHOW, $hGuiChild1)
    GUISetState(@SW_SHOW, $hGuiChild2)
    _GUIScrollBars_Init(GUICtrlGetHandle($idLblLog))
    GUISetState(@SW_SHOW, $mainGui)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Gui_EVENT_CLOSE, $idBtnExit
    Exit
    Case $idBtnDL
    GUICtrlSetState($idBtnDL, $Gui_DISABLE)
    GUICtrlSetState($idBtnExit, $Gui_DISABLE)
    _simulateDL($idPrgFile, $idLblFilePer, $hLog, $mainGui)
    GUICtrlSetState($idBtnDL, $Gui_ENABLE)
    GUICtrlSetState($idBtnExit, $Gui_ENABLE)
    EndSwitch
    WEnd
    EndFunc ;==>_CreateGui

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

    Func _simulateDL($idPrgFile, $idLblFilePer, $hLog, $mainGui)
    Local $text = "Hello! "
    For $i = 0 To 1000
    If $idPrgFile <> 0 Then GUICtrlSetData($idPrgFile, $i/10)
    If $idLblFilePer <> 0 Then GUICtrlSetData($idLblFilePer, $i/10 & " %")
    _report($text&$i& @CRLF, $hLog, $mainGui, 0)
    Sleep(100)
    Next
    EndFunc ;==>_simulateDL

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

    Func _report($sMsg, $hLog = 0, $mainGui = 0, $iDebug = 0)
    if $hLog <> 0 Then _GUICtrlEdit_AppendText($hLog,$sMsg)
    ; If $mainGui <> 0 And $idLblLog <> 0 Then
    ; Local $scrollbarVertPos = _GUIScrollBars_GetScrollPos(GUICtrlGetHandle($idLblLog), $SB_VERT)
    ; ControlSend($mainGui, "", GUICtrlGetHandle($idLblLog), "^{END}")
    ; ControlSend($mainGui, "", $idLblLog, "^{END}")
    ; _GUIScrollBars_SetScrollInfoPos(GUICtrlGetHandle($idLblLog), $SB_VERT, $scrollbarVertPos)
    ; EndIf
    If $iDebug Then ConsoleWrite($sMsg & @CRLF)
    EndFunc ;==>_report

    [/autoit]