Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] progressbar (прогресс-бар) до появления конкретного окна (http://forum.oszone.net/showthread.php?t=186764)

saavaage 28-09-2010 18:25 1506667

progressbar (прогресс-бар) до появления конкретного окна
 
Есть скрипт прогресс-бара:
Код:

#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 1506725

Опять 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 1506726

FlatX007, долго объяснять, просто изначально в проге выбрал его и теперь переписывать очень много. Сам уже 10 раз пожалел.

FlatX007 28-09-2010 19:59 1506727

Не уверен в правильности действий ...

OnEvent

Код:

Local $hSplash

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


saavaage 28-09-2010 20:02 1506728

FlatX007, спасибо, только, наверно правильнее ставить GUIDelete($hSplash) после GUISetState(@SW_SHOW)?

FlatX007 28-09-2010 20:05 1506734

Переменная $hSplash деклариуется после вызова функции _SplashTextProgress()

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

saavaage 28-09-2010 20:08 1506736

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 1506753

saavaage,
Au3ToPost - Инструмент для расскраски AutoIt-кода.


Время: 03:11.

Время: 03:11.
© OSzone.net 2001-