<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: индикатор прогресса с помощью IE]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=720</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=720&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: индикатор прогресса с помощью IE».]]></description>
		<lastBuildDate>Tue, 25 Sep 2007 08:13:31 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[VBScript: индикатор прогресса с помощью IE]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=5080#p5080</link>
			<description><![CDATA[<p>Класс индикатора прогресса для VBScript, который может быть использован в любом скрипте.<br />Позволяет задать текст надписи и заголовка окна, а также цвета фона, текста надписи и самого индикатора прогресса.<br />См. комментарии в коде.<br />Источник - <a href="http://www.jsware.net/jsware/scrdex.php3">http://www.jsware.net/jsware/scrdex.php3</a>.<br /></p><div class="codebox"><pre><code>Dim bar, i
Set bar = new IEProgBar
With bar
    .Move -1, -1, 500, -1
    .Units = 30
    .Show
    WScript.Sleep 500
    .Caption = &quot;Выполнение: 0%...&quot;
    WScript.Sleep 500
    For i = 0 to 29
        WScript.Sleep 500 &#039; вместо этого здесь может быть ваш код, выполняющий нужную вам работу
        .Caption = &quot;Выполнение: &quot; &amp; Round((i+1)*100/30, 0) &amp; &quot;%...&quot;
        .Advance
    Next
End With
WScript.Sleep 1000
Set bar = Nothing

&#039;--- //////////////////////////////////////////////////////////////////////////////////////////////
&#039;
&#039;Класс IEProgBar, который может быть вставлен в любой скрипт.
&#039;Чтобы создать индикатор прогресса, напишите:
&#039;
&#039;Dim ob
&#039;Set ob = New IEProgBar
&#039;
&#039;Индикатор прогресса создается в виде HTML файла,
&#039;который записывается в директорию временных файлов и открывается оттуда.
&#039;
&#039;Свойства и методы:
&#039;
&#039;Методы -
&#039;
&#039;    Show - показывает индикатор прогресса, записывая HTML файл, открывая его в IE и делая IE видимым.
&#039;    Advance - заполняет индикатор прогресса на одну ячейку.
&#039;    Move(Left, Top, Width, Height) - Изменение размеров и/или позиции окна.
&#039;        Используйте -1 для любого параметра, который вы не хотите менять.
&#039;        Размер по умолчанию - 400x120, положение окна определяет Windows.
&#039;    CleanIETitle - удаляет параметры настройки реестра, отвечающие за заголовок IE, делая заголовок IE более компактным.
&#039;        Это - глобальное изменение для IE, которое необратимо этим сценарием (тем не менее, это достаточно безопасное изменение).
&#039;
&#039;Свойства -
&#039;
&#039;    BackColor - 6-символьный шестнадцатеричный код цвета фона. По умолчанию - &quot;E0E0E4&quot;.
&#039;    TextColor - 6-символьный шестнадцатеричный код цвета текста. По умолчанию - &quot;000000&quot;.
&#039;    ProgressColor - 6-символьный шестнадцатеричный код цвета индикатора прогресса. По умолчанию - &quot;0000A0&quot;.
&#039;    Title - текст заголовка окна. По умолчанию - &quot;Ожидание&quot;.
&#039;    Caption - текст надписи в окне. По умолчанию - &quot;Подождите...&quot;
&#039;    Units - количество единиц индикатора прогресса. По умолчанию - 20.
&#039;
&#039;--- ///////////////////////////////////////////////////////////////////////////////////////////////

&#039;--------  КЛАСС IEProgBar ----------------------------------
Class IEProgBar
    Private FSO, IE, BCol, TCol, ProgCol, ProgNum, ProgCaption, Q2, sTemp, iProg, ProgTitle

    Private Sub Class_Initialize()
        On Error Resume Next
        Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
        sTemp = FSO.GetSpecialFolder(2)
        Set IE = CreateObject(&quot;InternetExplorer.Application&quot;) 
        With IE
            .AddressBar = False
            .menubar = False
            .ToolBar = False
            .StatusBar = False
            .width = 400
            .height = 120
            .resizable = True
        End With    
        BCol = &quot;E0E0E4&quot;              &#039;цвет фона по умолчанию
        TCol = &quot;000000&quot;              &#039;цвет текста надписи по умолчанию
        ProgCol = &quot;0000A0&quot;           &#039;цвет индикатора прогресса по умолчанию
        ProgNum = 20                 &#039;количество единиц индикатора прогресса по умолчанию
        ProgCaption = &quot;Подождите...&quot; &#039;надпись по умолчанию
        ProgTitle = &quot;Ожидание&quot;       &#039;заголовок окна по умолчанию
        Q2 = chr(34) &#039;двойная кавычка (для HTML-вёрстки)
        iProg = 0                    &#039;заполнение индикатора прогресса
    End Sub

    Private Sub Class_Terminate()
        On Error Resume Next
        IE.Quit
        Set IE = Nothing
        Set FSO = Nothing
    End Sub

    Public Sub Show()
        Dim s, i, TS
        On Error Resume Next
        s = &quot;&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;&quot; &amp; ProgTitle &amp; &quot;&lt;/TITLE&gt;&lt;/HEAD&gt;&quot;
        s = s &amp; &quot;&lt;BODY SCROLL=&quot; &amp; Q2 &amp; &quot;NO&quot; &amp; Q2 &amp; &quot; BGCOLOR=&quot; &amp; Q2 &amp; &quot;#&quot; &amp; BCol &amp; Q2 &amp; &quot; TEXT=&quot; &amp; Q2 &amp; &quot;#&quot; &amp; TCol &amp; Q2 &amp; &quot;&gt;&quot;
        If (ProgCaption &lt;&gt; &quot;&quot;) Then
            s = s &amp; &quot;&lt;FONT FACE=&quot; &amp; Q2 &amp; &quot;arial&quot; &amp; Q2 &amp; &quot; SIZE=2&gt;&lt;LABEL ID=&quot; &amp; Q2 &amp; &quot;Cap1&quot; &amp; Q2 &amp; &quot;&gt;&quot; &amp; ProgCaption &amp; &quot;&lt;/LABEL&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;&quot;
        Else
            s = s &amp; &quot;&lt;BR&gt;&quot;
        End If
        s = s &amp; &quot;&lt;TABLE BORDER=1&gt;&lt;TR&gt;&lt;TD&gt;&lt;TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0&gt;&lt;TR&gt;&quot;
        For i = 1 to ProgNum
            s = s &amp; &quot;&lt;TD WIDTH=16 HEIGHT=16 ID=&quot; &amp; Q2 &amp; &quot;P&quot; &amp; Q2 &amp; &quot;&gt;&quot;
        Next
        s = s &amp; &quot;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;BR&gt;&lt;BR&gt;&lt;/BODY&gt;&lt;/HTML&gt;&quot;         
        Set TS = FSO.CreateTextFile(sTemp &amp; &quot;\iebar1.html&quot;, True)
        TS.Write s
        TS.Close
        Set TS = Nothing
        IE.Navigate &quot;file:///&quot; &amp; sTemp &amp; &quot;\iebar1.html&quot;
        IE.visible = True
    End Sub
   
    &#039;Метод Advance раскрашивает одну ячейку индикатора прогресса.
    &#039;Переменная iProg отслеживает, сколько ячеек было раскрашено.
    &#039;Каждая ячейка индикатора прогресса является тегом &lt;TD&gt; с идентификатором ID=&quot;P&quot;.
    &#039;К этим тегам можно обратиться через Document.All.Item.
    Public Sub Advance()
        On Error Resume Next
        If (iProg &lt; ProgNum) and (IE.Visible = True) Then
            IE.Document.All.Item(&quot;P&quot;, (iProg)).bgcolor = Q2 &amp; &quot;#&quot; &amp; ProgCol &amp; Q2
            iProg = iProg + 1
        End If   
    End Sub

    &#039;Изменение размеров и/или позиции окна. Используйте -1 для любого параметра, который вы не хотите менять.
    Public Sub Move(PixLeft, PixTop, PixWidth, PixHeight)
        On Error Resume Next
        If (PixLeft &gt; -1) Then IE.Left = PixLeft
        If (PixTop &gt; -1) Then IE.Top = PixTop
        If (PixWidth &gt; 0) Then IE.Width = PixWidth
        If (PixHeight &gt; 0) Then IE.Height = PixHeight
    End Sub

    &#039;Удаление параметров настройки реестра, отвечающих за заголовок IE.
    &#039;Это изменение не будет иметь эффекта при первом использовании, поскольку экземпляр IE уже был создан перед вызовом метода.
    Public Sub CleanIETitle()
        Dim sR1, sR2, SH
        On Error Resume Next
        sR1 = &quot;HKLM\Software\Microsoft\Internet Explorer\Main\Window Title&quot;
        sR2 = &quot;HKCU\Software\Microsoft\Internet Explorer\Main\Window Title&quot;
        Set SH = CreateObject(&quot;WScript.Shell&quot;)
        SH.RegWrite sR1, &quot;&quot;, &quot;REG_SZ&quot;
        SH.RegWrite sR2, &quot;&quot;, &quot;REG_SZ&quot;
        Set SH = Nothing
    End Sub

    &#039;------------- Установка цвета фона: ---------------------

    Public Property Let BackColor(sCol)
        If (TestColor(sCol) = True) Then BCol = sCol
    End Property
 
    &#039;------------- Установка цвета текста: --------------------

    Public Property Let TextColor(sCol)
        If (TestColor(sCol) = True) Then TCol = sCol
    End Property
 
    &#039;------------- Установка цвета индикатора прогресса: ------

    Public Property Let ProgressColor(sCol)
        If (TestColor(sCol) = True) Then ProgCol = sCol
    End Property

    &#039;------------- Установка заголовкеа окна: ------------------

    Public Property Let Title(sCap)
        ProgTitle = sCap
    End Property
 
    &#039;------------- Установка текста: ----------------------------

    Public Property Let Caption(sCap)
        On Error Resume Next
        ProgCaption = sCap
        IE.Document.parentWindow.Cap1.innerText = sCap
    End Property

    &#039;----- Установка количества единиц индикатора прогресса: -----

    Public Property Let Units(iNum)
        ProgNum = iNum
    End Property
 
    &#039;Проверка корректности заданного цвета: цвет должен содержать 6 символов 0-9 или A-F.
    &#039;Возвращается True (цвет корректен) или False.
    Private Function TestColor(Col6)
        Dim iB, sB, iB2, Boo1
        On Error Resume Next
        TestColor = False
        If (Len(Col6) &lt;&gt; 6) Then Exit Function
        For iB = 1 to 6
            sB = Mid(Col6, iB, 1)
            iB2 = Asc(UCase(sB))
            If ((iB2 &gt; 47) and (iB2 &lt; 58)) or ((iB2 &gt; 64) and (iB2 &lt; 71)) Then
                Boo1 = True
            Else
                Boo1 = False
                Exit For
            End If
        Next
        If (Boo1 = True) Then TestColor = True
    End Function
End Class</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Tue, 25 Sep 2007 08:13:31 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=5080#p5080</guid>
		</item>
	</channel>
</rss>
