#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
Сон с точностью примерно до 10 миллисекунд, что очень мало времени для обновления элемента управления, поэтому вы получаете мерцание.
Обновление меток, которые не происходятна событие, такое как нажатие кнопки, может быть обработано с помощью таймера.
Если вы используете цикл сообщений Gui, то вы получаете сообщения Gui с помощью GuiGetMsg .После сообщений вы можете проверить отметку времени, чтобы узнать, больше ли разница во времени, чем значение сброса времени, которое в настоящее время установлено как 1000
миллисекунд.Если оно больше, таймер сбрасывается и выполняется приведенный ниже код, иначе цикл будет продолжен сверху.
Имя файла, прочитанное из текстового файла, сохраняется в $sSavedFilename
.Обновление элементов управления выполняется только в том случае, если имя файла для чтения отличается.Если имя файла для чтения не существует, отобразите изображение по умолчанию (пустое?).Иногда я выбираю изображение по умолчанию, в противном случае пустое имя файла может вызвать проблемы с размером элемента управления при следующем изменении изображения.Элемент управления может быть скрыт, если нет изображения для показа.$bHideImage
current решает использовать файл default.jpg
, если существует, иначе скрывает элемент управления.
Этот код обновляет созданные элементы управления вместо их удаления и повторного создания.