如何在GUI中显示更改后的文件中的文本?

时间:2019-01-23 16:06:10

标签: autoit

第一行的文件1.txt中有一个题词,它随时间变化。在GUI中,也应该更改它。如何使其不闪烁?

Local $Form1 = GUICreate('Form1', 261, 200, 192, 124)
$10 = FileReadLine ( "1.txt",  1);
GUISetState()
Local $spic = $10, $Pic1
While 1
    $Pic1 = GUICtrlCreateLabel($10, 10, 70, 235, 50)
    Switch FileExists($spic)
        Case 0
            If $Pic1 Then
                GUICtrlDelete($Pic1)
                $Pic1 = 0
            EndIf
        Case 1
            If Not $Pic1 Then $Pic1 = GUICtrlCreatePic($spic, 16, 24, 212, 124)
    EndSwitch
    Sleep(1)
WEnd

1 个答案:

答案 0 :(得分:1)

#include <GUIConstantsEx.au3>

; Create the Gui.
$Form1 = GUICreate('Form1', 261, 200, 192, 124)
$iLabel = GUICtrlCreateLabel('', 10, 10, 235, 50)
$iPic = GUICtrlCreatePic('', 16, 34, 212, 124)
GUISetState()

; Hide picture control if no file [True|False].
$bHideImage = FileExists('default.jpg') ? False : True

; Updates in the loop to recognize change.
$sSavedFilename = ''

; Set time to reset image etc.
$iTimeReset = 1000
$hTimeStamp = TimerInit()

While 1
    ; Get Gui messages.
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            GUIDelete()
            Exit
    EndSwitch

    ; Check if time needs reset.
    If TimerDiff($hTimeStamp) > $iTimeReset Then
        $hTimeStamp = TimerInit()
    Else
        ContinueLoop
    EndIf

    ; Read 1st line of a file.
    $sReadFilename = FileReadLine ('1.txt', 1)

    ; If the saved line is different to read line.
    If $sSavedFilename <> $sReadFilename Then
        GUICtrlSetData($iLabel, $sReadFilename)

        Switch FileExists($sReadFilename)
            Case 0
                If $bHideImage Then
                    GUICtrlSetState($iPic, $GUI_HIDE)
                Else
                    ; Display a default (blank?) image.
                    GUICtrlSetImage($iPic, 'default.jpg')
                EndIf

            Case 1
                If $bHideImage Then
                    GUICtrlSetState($iPic, $GUI_SHOW)
                EndIf

                ; Display the new image.
                GUICtrlSetImage($iPic, $sReadFilename)
        EndSwitch

        ; Save the current filename.
        $sSavedFilename = $sReadFilename
    EndIf
WEnd

Sleep准确到大约 10毫秒,这几乎没有时间更新控件,因此 你会忽悠。

更新按钮事件,例如单击按钮时不会发生的标签, 可以使用计时器来处理。

如果使用消息循环Gui,则可以通过使用获得Gui消息 GuiGetMsg。收到消息后,您可以检查时间戳以了解是否 时间差大于当前的时间重置值 设置为1000毫秒。如果较大,将重置计时器,并显示以下代码 被执行,否则将从顶部继续循环。

从文本文件读取的文件名被保存到$sSavedFilename。 仅当读取的文件名不同时才进行控件的更新。如果 读取的文件名不存在,然后显示默认(空白?)图像。 我有时会选择默认图像,否则可以使用空文件名 在下一次图像更改时导致控件大小调整问题。控制可以 如果没有图像显示,则将其隐藏。 $bHideImage当前决定 使用文件default.jpg(如果存在),否则隐藏控件。

此代码将更新创建的控件,而不是删除并重新创建它们。