Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBS/WSH/JS - Обращение к i-му чекбоксу на форме HTA в VBScript

Ответить
Настройки темы
VBS/WSH/JS - Обращение к i-му чекбоксу на форме HTA в VBScript

Аватара для vxor

Старожил


Сообщения: 206
Благодарности: 3


Конфигурация

Профиль | Отправить PM | Цитировать


Есть HTA - приложение с VBS-скриптом.

Код: Выделить весь код
<html>
    <head>
        <title>app</title>
        <hta:application
            id="889988" 
            ApplicationName = "GO!" 
            Border = "Thick"
            Caption = "yes"
            Scroll = "no"
            SingleInstance = "yes"
            WindowState = "normal"
            Version = "1.1"
            ShowInTaskBar = "Yes"
            MaximizeButton = "No"
            MinimizeButton = "No"
        />
    </head>	
	<script language="VBScript">
      Option Explicit
'======= глобальные переменные ====================================================================================
      Dim chisloStrok 'тест: число строк в профиле
      dim sheduleArray() ' Массив-Задание - глобальный массив, сформированный на основании анализа чекбоксов массив из строк профиля - который записывается в файл c:\currenttask
      dim currenProfileFile ' выбранный файл профиля (строка)
'==================================================================================================================

      sub main 'главный код программы 	начало работы программы
        filligProfileList ' заполняем лист профилей
      end Sub

      sub filligProfileList 'Заполняет листбокс списком файлов-профилей в папке profiles
        Dim fso, f, f1, fc, prFolder, objOption
          prFolder = "profiles"
          For Each objOption in listboxProfile.Options   'очистка листбокса
            objOption.RemoveNode
          Next
          Set fso = CreateObject("Scripting.FileSystemObject")
          Set f = fso.GetFolder(prFolder)
          Set fc = f.Files
          For Each f1 in fc
              Set objOption = Document.createElement("OPTION")
              objOption.Text = f1.name
              objOption.Value = f1.name
              listboxProfile.Add(objOption)
          Next
      end Sub

      sub ActivateProfile 'добавляет чекбоксы на форму, строит скрипт-процедуру их инициации (ActSomeCB) и скрипт-процедуру редактирования Массива-Задания в соответсвтии с чекбоксами
        dim ForReading, ProfileFile, objFSO, objFile, stroka, objOption, htmlstr, cnt, strSub, strSubEditSheduleArray, checkFlag
          ForReading = 1
          ProfileFile = "profiles\" & listboxProfile.value
          strSub = strSub & "Sub ActSomeCB" & vbcrlf 'заголовок процедуры Инициализации Чекбоксов
          strSubEditSheduleArray = strSubEditSheduleArray & "Sub EditSheduleArray" & vbcrlf 'заголовок процедуры Редактирования Массива-Задания
          'Msgbox ProfileFile
          Set objFSO = CreateObject("Scripting.FileSystemObject")
          Set objFile = objFSO.OpenTextFile(ProfileFile, ForReading)
            checkFlag=0                                                   'флаг выбора чекбокса
            cnt=0                                                         'счетчик чекбоксов
            CheckBoxArea.InnerHTML = ""                                   'поле для чекбоксов - пока не заполнено
            Do Until objFile.AtEndOfStream                                'для каждой строки файла профиля
                stroka = objFile.ReadLine
                'getTaskInf(stroka)                               'получаем путь, имя и флаг задания и заряжаем чекбокс
                                                                           'и делаем новый код чекбокса
                htmlstr = "<input type=" & chr(34) & "checkbox" & chr(34) & "name=" & chr(34) & "CBox" & cnt & chr(34) & "value=" & chr(34) & "1" & chr(34) & ">" & getTaskName(stroka) 'зарядили именем
                                                                           'и добавляем его на поле
                CheckBoxArea.InnerHTML = CheckBoxArea.InnerHTML & vbcrlf & vbcrlf  + htmlstr
                                                                           'и если флаг равен 1, то в процедурку инициации добавляем еще одну строку
                if getTaskFlag(stroka) = 1 then strSub = strSub & "    CBox"&cnt&".Checked = true" & vbcrlf 'тело процедуры инициализации чекбоксов
                ' создаем массив равный файлу профиля, чтобы потом его изменить и создать из него файл-задания
                redim preserve sheduleArray(cnt)     'увеличиваем массив в соответствии с новым числом строк
                sheduleArray(cnt) = stroka            'и добавляем в него новую строку из профиля
                strSubEditSheduleArray = strSubEditSheduleArray & "    If CBox"&cnt&".Checked Then sheduleArray("&cnt&")=EditCurrentFlagTo1(sheduleArray("&cnt&"))" & VbCrLf
                strSubEditSheduleArray = strSubEditSheduleArray & "    If not CBox"&cnt&".Checked Then sheduleArray("&cnt&")=EditCurrentFlagTo0(sheduleArray("&cnt&"))" & VbCrLf
                cnt = cnt + 1
            Loop
          objFile.Close
          strSub = strSub & "End Sub" 'окончание процедуры инициализации чекбоксов
          strSubEditSheduleArray = strSubEditSheduleArray & "End Sub" 'окончание процедуры Старта инсталляций
          SelSomeCBScript.text = strSub 'строим процедуру инициализации чекбоксов
          scrEditSheduleArray.text = strSubEditSheduleArray 'строим процедуру редактирования Массива-Задания
          ActSomeCB  'вызываем построенную процедуру ActSomeCB в п построенном скрипе SelSomeCBScript
          currenProfileFile = listboxProfile.value ' глобаная переменная currenProfileFile заполнятеся выбранным из списка профилем
          ChisloStrok = cnt 'тест
          ' у CreateWorkFiles
      End Sub

      function EditCurrentFlagTo1(str)'ставит в строчке Массива-Задания флаг = 1
        dim currentstring
        currentstring = getTaskPath(str)&"="&getTaskName(str)&"="&"1"
        EditCurrentFlagTo1 = currentstring
      end Function

      function EditCurrentFlagTo0(str)'ставит в строчке Массива-Задания флаг = 0
        dim currentstring
        currentstring = getTaskPath(str)&"="&getTaskName(str)&"="&"0"
        EditCurrentFlagTo0 = currentstring
      end Function
	</script>
	
    <SCRIPT Language="VBScript" id="SelSomeCBScript"> ' делает чекбокс выбранным если это указано в файле-профиля
    </SCRIPT>
    
    <SCRIPT Language="VBScript" id="scrEditSheduleArray"> 'Редактирует Массив-Задание в соответсвтии с текущими показателями чекбоксов
    </SCRIPT>
    
<body onload="main">
<input id=runbutton  class="button" type="button" value="Заполнить лист профилей" name="fill_profile_button"  onClick="filligProfileList" Disabled=True>
<br>
<br>
<select size="6" name="listboxProfile" onChange="ActivateProfile">
</select>
<br>
<br>
<span id="CheckBoxArea"></span>
<br>
<br>
<input id="GoButton" type="button" value="Start" onclick="StartSub1" />
<br>
<br>
<input type="checkbox"name="BasicCheckbox"value="1" onclick = "onCBChange"> Option 1
<br>
<br>
</body>
</html>

В цикле строится процедура, которая на форму добавляет чекбоксы.
Все отлично. Чекбоксы строятся.

Вопрос: Как после обратиться к i-му чекбоксу на форме??
Иначе: Как обежать в цикле все чекбоксы и проверить выбрат i-й чекбокс или нет?

Конечно, можно написать
If Checkbox1.Checked Then ***
If Checkbox2.Checked Then ***
If Checkbox3.Checked Then ***

Как обратиться в цикле к I-му чекбоксу? Заранее всем благодарен!

Отправлено: 23:42, 09-02-2011

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Попробовать получить список объектов формы и работать с ним?
Это так, мысль вслух. Как это сделать я пока не знаю.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:50, 09-02-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для vxor

Старожил


Сообщения: 206
Благодарности: 3

Профиль | Отправить PM | Цитировать


Есть еще варианты, неужели нет возможностьи написать как-то If Checkbox[i].Checked Then ***??
Если есть возможность поподробнее про обращение ко всем объектам формы?

Отправлено: 10:11, 10-02-2011 | #3


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


xor++, понимаешь, CheckBox1 - это имя, оно может быть любым. CheckBox[i] - обращение к элементу множества (массива). Т.е. нужна некоторая структура, объединяющая CheckBox'ы . Либо это будет CheckBoxGroup, либо некий собственный список.
Исходя из того, что форма уже является контейнером объектов, то я предложил попробовать работать с ней.

Для наглядности можно привести пример с учениками в классе. Необходим механизм переводящий Ученик[i] в Петю например. Обращение к форме, в данном случае, приравнивается к обращению к классному журналу.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 10:41, 10-02-2011 | #4


Аватара для vxor

Старожил


Сообщения: 206
Благодарности: 3

Профиль | Отправить PM | Цитировать


Понял. Попробую реализовать доступ к форме.

Отправлено: 13:01, 10-02-2011 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBS/WSH/JS - Обращение к i-му чекбоксу на форме HTA в VBScript

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - VBscript Klinifin Программирование и базы данных 3 16-10-2013 13:26
VBS/WSH/JS - HTA приложение в терминале (RemoteApp) salikoff Скриптовые языки администрирования Windows 0 18-10-2010 09:24
VBS/WSH/JS - Удаленный запуск HTA-приложения от имени текущего пользователя x wanderer Скриптовые языки администрирования Windows 1 15-04-2010 10:39
VBS/WSH/JS - виснет hta в назначенных заданиях pva Программирование и базы данных 4 07-04-2009 12:15
Установка Линукс (Red Hta 7.3) Cobalt Общий по Linux 6 13-09-2002 20:54




 
Переход