Войти

Показать полную графическую версию : [решено] progressbar (прогресс-бар) до появления конкретного окна


saavaage
28-09-2010, 18:25
Есть скрипт прогресс-бара:
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <SendMessage.au3> ;Needed for _SendMessage function.
#include <ProgressConstants.au3>
#include <GUIConstantsEx.au3>

$hProgressSplash = _SplashTextProgress("Внимание! Идет сбор системной информации. Ждите...")

; скрипт с гуи + задержка на появление 10 сек

Opt("GUIOnEventMode", 1)
sleep(10000)
$hMain_GUI = GUICreate("OPPPPP", 619, 442, 189, 122)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

$Tab1 = GUICtrlCreateTab(8, 16, 601, 377)
$DriverErrors = GUICtrlCreateTabItem("XXXXXXXXXX")


GUICtrlCreateTabItem("")
GUISetState()

While 1
Sleep(100)
WEnd

Func CLOSEClicked()
Exit
EndFunc

Func _SplashTextProgress($sText)
SplashOff() ;Turn previous splash text screens off.
$hSplash = GUICreate("", 500, 150, -1, -1, BitOR($WS_POPUP, $WS_BORDER), BitOR($WS_EX_TOPMOST, $WS_EX_WINDOWEDGE, $WS_EX_TOOLWINDOW))
;~ $iProgressBar = GUICtrlCreateProgress(100, 325, 305, 25, $PBS_SMOOTH)
$iProgressBar = GUICtrlCreateProgress(30, 100, 440, 35, $PBS_MARQUEE) ;A Marquee progress bar.
_SendMessage(GUICtrlGetHandle(-1), $PBM_SETMARQUEE, True, 80) ;last parameter is update time in ms. Sends message to run the Marquee progress bar.
$iMessage = GUICtrlCreateLabel($sText, 0, 20, 500, 50, $SS_CENTER)
GUICtrlSetFont(-1, 16, 500, 0, "Courier New")
GUISetState(@SW_SHOW)
Return SetExtended($iProgressBar, $hSplash)

EndFunc

Проблема:
как сделать так, чтобы прогресс-бар исчезал при появлении гуи-окна скрипта?
Дело в том, что у меня утилита довольно долго грузится, собирая всю необходимую инфо и необходимо привязать прогресс-бар к появлению ее окна на дисплее.

PS Autoit 3.3.6.1

FlatX007
28-09-2010, 19:52
Опять OnEvent! да чтож вы его как любите то, а он точно тут нужен ?

#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <SendMessage.au3> ;Needed for _SendMessage function.
#include <ProgressConstants.au3>
#include <GUIConstantsEx.au3>

Global $hSplash

$hProgressSplash = _SplashTextProgress("Внимание! Идет сбор системной информации. Ждите...")
Sleep(5000) ; Имитация сбора информации
GUIDelete($hSplash)

$hMain_GUI = GUICreate("OPPPPP", 619, 442, 189, 122)
$Tab1 = GUICtrlCreateTab(8, 16, 601, 377)
$DriverErrors = GUICtrlCreateTabItem("XXXXXXXXXX")
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
WEnd

Func _SplashTextProgress($sText)
SplashOff() ;Turn previous splash text screens off.
$hSplash = GUICreate("", 500, 150, -1, -1, BitOR($WS_POPUP, $WS_BORDER), BitOR($WS_EX_TOPMOST, $WS_EX_WINDOWEDGE, $WS_EX_TOOLWINDOW))
;~ $iProgressBar = GUICtrlCreateProgress(100, 325, 305, 25, $PBS_SMOOTH)
$iProgressBar = GUICtrlCreateProgress(30, 100, 440, 35, $PBS_MARQUEE) ;A Marquee progress bar.
_SendMessage(GUICtrlGetHandle(-1), $PBM_SETMARQUEE, True, 80) ;last parameter is update time in ms. Sends message to run the Marquee progress bar.
$iMessage = GUICtrlCreateLabel($sText, 0, 20, 500, 50, $SS_CENTER)
GUICtrlSetFont(-1, 16, 500, 0, "Courier New")
GUISetState(@SW_SHOW)
Return SetExtended($iProgressBar, $hSplash)

EndFunc

saavaage
28-09-2010, 19:54
FlatX007, долго объяснять, просто изначально в проге выбрал его и теперь переписывать очень много. Сам уже 10 раз пожалел.

FlatX007
28-09-2010, 19:59
Не уверен в правильности действий ...

OnEvent

Local $hSplash

$hProgressSplash = _SplashTextProgress("Внимание! Идет сбор системной информации. Ждите...")
Sleep(1000) ; Имитация сбора информации
If IsDeclared("hSplash") Then GUIDelete($hSplash)

saavaage
28-09-2010, 20:02
FlatX007, спасибо, только, наверно правильнее ставить GUIDelete($hSplash) после GUISetState(@SW_SHOW)?

FlatX007
28-09-2010, 20:05
Переменная $hSplash деклариуется после вызова функции _SplashTextProgress()

Извращаюсь просто.

saavaage
28-09-2010, 20:08
FlatX007, старый вариант удачно работает, только как я и думал надо GUIDelete($hSplash) ставить после GUISetState(@SW_SHOW), иначе сплэш даже не успевает подгрузиться (у меня в проге слипа вначале скрипта нет, он сам долго грузиться).

Итого решение (благодаря FlatX007):

#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <SendMessage.au3> ;Needed for _SendMessage function.
#include <ProgressConstants.au3>
#include <GUIConstantsEx.au3>
Global $hSplash

$hProgressSplash = _SplashTextProgress("Внимание! Идет сбор системной информации. Ждите...")

Opt("GUIOnEventMode", 1)

$hMain_GUI = GUICreate("OPPPPP", 619, 442, 189, 122)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

$Tab1 = GUICtrlCreateTab(8, 16, 601, 377)
$DriverErrors = GUICtrlCreateTabItem("XXXXXXXXXX")

Sleep(5000) ; Имитация сбора информации

GUICtrlCreateTabItem("")

GUISetState()
GUIDelete($hSplash)

While 1
Sleep(100)
WEnd

Func CLOSEClicked()
Exit
EndFunc

Func _SplashTextProgress($sText)
SplashOff() ;Turn previous splash text screens off.
$hSplash = GUICreate("", 500, 150, -1, -1, BitOR($WS_POPUP, $WS_BORDER), BitOR($WS_EX_TOPMOST, $WS_EX_WINDOWEDGE, $WS_EX_TOOLWINDOW))
$iProgressBar = GUICtrlCreateProgress(30, 100, 440, 35, $PBS_MARQUEE) ;A Marquee progress bar.
_SendMessage(GUICtrlGetHandle(-1), $PBM_SETMARQUEE, True, 80) ;last parameter is update time in ms. Sends message to run the Marquee progress bar.
$iMessage = GUICtrlCreateLabel($sText, 0, 20, 500, 50, $SS_CENTER)
GUICtrlSetFont(-1, 16, 500, 0, "Courier New")
GUISetState(@SW_SHOW)
Return SetExtended($iProgressBar, $hSplash)

EndFunc

FlatX007, оффтопик, но все же - как Вы такой код вставляете? Имею в виду разноцветный...

madmasles
28-09-2010, 20:24
saavaage,
Au3ToPost - Инструмент для расскраски AutoIt-кода (http://autoit-script.ru/index.php/topic,117.0.html).




© OSzone.net 2001-2012