1

Тема: VBS: Разновидности графических окон

Можно ли создать через VBS окно с графическим вариантом выбора для input box, popup, Echo, msgbox? Я имею ввиду, не обычный вид окна, а, например, окно с какой-нибудь картинкой или?...

Главное - желание

2

Re: VBS: Разновидности графических окон

А зачем? В принципе — можно даже целый диалог нарисовать. Делается сие обычно в HTA, как правило, только от большой нужды.

3

Re: VBS: Разновидности графических окон

Ещё можно воспользоваться KiXforms, примеры интерфейсов со скриншотами есть в конце этой статьи, правда, не на языке VBScript (однако, "перевести" будет очень легко).

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

4

Re: VBS: Разновидности графических окон

Примерчик можно? Например, есть маленькая программа. И там я хочу сделать окно с вариантом выбора: Запуск Regedit, Запуск TaskMgr, Запуск CMD. Возможен ли такой вариант выбора?

Главное - желание

5

Re: VBS: Разновидности графических окон

<HTML>
    <HEAD>
        <TITLE>Sample Application</TITLE>
        <META charset="windows-1251">
        <META http-equiv="Content-Type" content="text/html; charset=windows-1251">
        <META http-equiv="Content-Language" content="ru">
        <HTA:APPLICATION
            ID="myApp"
            APPLICATIONNAME="myApp"
            BORDER="thick"
            BORDERSTYLE="normal"
            CAPTION="yes"
            ICON=""
            MAXIMIZEBUTTON="no"
            MINIMIZEBUTTON="yes"
            SHOWINTASKBAR="yes"
            SINGLEINSTANCE="yes"
            SYSMENU="yes"
            VERSION="1.0"
            WINDOWSTATE="normal"
        >
        </HTA:APPLICATION>
        <STYLE type="text/css">
            BODY {
                font: x-small Verdana, Arial, sans-serif;
                color: WindowText;
                background-color: ButtonFace;
                padding: 0.5em;
                margin: 0em;
            }
            .NoMarginsNoPads {
                padding: 0em;
                margin: 0em;
            }
        </STYLE>
        <SCRIPT language="VBScript">
            Option Explicit
            
            Sub RunSelectedApplication()
                
                Dim objWshShell
                
                Set objWshShell = CreateObject("WScript.Shell")
                
                objWshShell.Run """" & tagSelectApplication.value & """"
                
                Set objWshShell = Nothing
            End Sub
        </SCRIPT>
    </HEAD>
    <BODY id="tagBody" scroll="auto">
        <SELECT class="NoMarginsNoPads" size="1" id="tagSelectApplication">
            <OPTION VALUE="regedit.exe">Редактор реестра
            <OPTION VALUE="taskmgr.exe">Диспетчер задач
            <OPTION VALUE="cmd.exe" SELECTED>Командный процессор
        </SELECT>
        <INPUT type="button"  class="NoMarginsNoPads" value="Запустить" id="tagRunSelectedApplication" onclick="RunSelectedApplication()">
    </BODY>
    <SCRIPT language="VBScript">
        'Позиционирование и изменение размера окна
        With window
            .resizeTo _
                tagSelectApplication.scrollWidth + tagRunSelectedApplication.scrollWidth + 78, _
                tagBody.scrollHeight + 32
            .moveTo _
                (.screen.availWidth - tagBody.offsetWidth) \ 2, _
                (.screen.availHeight - tagBody.offsetHeight) \ 2
        End With
    </SCRIPT>
</HTML>

6

Re: VBS: Разновидности графических окон

Я не это имел ввиду. Это идет как html, а я под VBS хочу узнать.(:

Главное - желание

7

Re: VBS: Разновидности графических окон

Это и есть «под VBS». И идёт не как .html, а как .hta (есть существенная разница в исполняющем хосте и, главное, в ограничениях безопасности). Сам хост Windows Script Host не имеет средств организации графического интерфейса (ну, почти ). Так что, каким боком не крути — либо работаете под других хостом, либо берёте и прикручиваете библиотеку, которая сие будет реализовывать.

8

Re: VBS: Разновидности графических окон

Алексей(или Алексий), то есть графику на VBS не построишь?:( Я думал, там можно как-то прикрепить картинку или анимацию...

Главное - желание

9

Re: VBS: Разновидности графических окон

Chulat пишет:

Алексей(или Алексий), то есть графику на VBS не построишь?:( Я думал, там можно как-то прикрепить картинку или анимацию...

На чистом VBS не построишь, ну и что?

P.S. При обращениях лучше всегда используй оригинальные ники (в данном случае: alexii), просто копируя их, т.к. они могут читаться не так и обозначать совсем не то, что кажется на первый взгляд .

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

10

Re: VBS: Разновидности графических окон

Chulat пишет:

Алексей(или Алексий), то есть графику на VBS не построишь?

Ну, я вчера крутил предложенную Мастером библиотеку KiXForms под WSH — там вроде как можно рисовать графику прямо по форме (во всяком случае, точки-линии точно есть).

The gray Cardinal пишет:

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

Ага !

11 (изменено: Chulat, 2009-06-25 12:27:14)

Re: VBS: Разновидности графических окон

The gray Cardinal пишет:

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

ОК.

alexii пишет:

Ну, я вчера крутил предложенную Мастером библиотеку KiXForms под WSH — там вроде как можно рисовать графику прямо по форме (во всяком случае, точки-линии точно есть).

А вот код можешь выложить? Например, напиши какой-нибудь маленький скриптик и сделай для него графическое окошко.

Главное - желание

12

Re: VBS: Разновидности графических окон

Хорошо, ближе к ночи выложу.

13

Re: VBS: Разновидности графических окон

Например, так:

Option Explicit

Dim objKiXSystem
Dim objKiXForm

Dim objPictureBox
Dim objButtonDraw
Dim objButtonQuit

Dim strEvent
Dim boolDone

Set objKiXSystem = WScript.CreateObject("Kixtart.System")

boolDone = False

Set objKiXForm = objKiXSystem.Form()

With objKiXForm
    .Width           = objKiXSystem.Screen.WorkingArea.Width \ 2
    .Height          = objKiXSystem.Screen.WorkingArea.Height \ 2
    
    .Center
    
    .Text            = "Draw demo"
    .FormBorderStyle = 4
    .Icon = objKiXSystem.BuiltinIcons(53)
    
    .Menu = objKiXSystem.MainMenu()
    
    With .Menu
        .Style = 1
        .ImageList = objKiXSystem.BuiltinImageList
        
        .FileMenu = .MenuItems.Add("&File")
        
        With .FileMenu
            With .MenuItems.Add("&Draw...")
                .OnClick = "Draw()"
                .ImageIndex = 53
            End With
            
            .MenuItems.Add("-")
            
            With .MenuItems.Add("&Quit")
                .OnClick = "Quit()"
                .ImageIndex = 70
            End With
        End With
    End With
    
    
    Set objButtonDraw = .Controls.Add("Button")
    
    With objButtonDraw
        .Text   = "&Draw..."
        .Left   = objKiXForm.ClientWidth  - (.Width  + 5)
        .Top    = objKiXForm.ClientHeight - (.Height + 5) * 2
        .Anchor = 2 + 8
        
        .OnClick = "Draw()"
    End With
    
    
    Set objButtonQuit = .Controls.Add("Button")
    
    With objButtonQuit
        .Text   = "&Quit"
        .Left   = objKiXForm.ClientWidth  - (.Width  + 5)
        .Top    = objKiXForm.ClientHeight - (.Height + 5)
        .Anchor = 2 + 8
        
        .OnClick = "Quit()"
    End With
    
    
    Set objPictureBox = .Controls.Add("PictureBox")
    
    With objPictureBox
        .Left   = 5
        .Right  = objKiXForm.ClientWidth - (5 + objButtonQuit.Width + 5)
        .Top    = 5
        .Bottom = objKiXForm.ClientHeight - 5
        .SizeMode = 1
        
        .Anchor  = 1 + 2 + 4 + 8
        
        .OnClick = "DrawImage()"
    End With
    
    
    .Show()
    
    
    Do While Not boolDone And .Visible
        strEvent = .DoEvents(True)
        
        If strEvent <> "" Then
            Execute(strEvent)
        End If
        
        WScript.Sleep 100
    Loop
End With


Set objButtonQuit = Nothing
Set objButtonDraw = Nothing
Set objPictureBox = Nothing

Set objKiXForm    = Nothing
Set objKiXSystem  = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub Draw()
    Randomize Timer
    
    Dim lngColor
    Dim s, z, sngAspect, x
    
    lngColor = Rnd() * &HFFFFFF
    
    ' Можно рисовать и непосредственно на форме objKiXForm
    ' но удобнее именно на PictureBox
    With objPictureBox
        s = .ClientHeight * 60 \ .ClientWidth
        
        For z = -3 To 2 Step .05
            sngAspect = .707 * z
            
            For x = -3 To 3 Step .05
                .PSet _
                    25 + ((z^2 + x * x) * 0.5 + sngAspect) * s, _
                    .ClientHeight \ 2 + 20 + s * (x + sngAspect), lngColor
            Next
        Next
    End With
End Sub
'=============================================================================

'===========================================================================
Sub DrawImage()
    With objPictureBox
        .Image    = "C:\Documents and Settings\All Users\Документы\Мои рисунки\Образцы рисунков\Зима.jpg"
        .Refresh
    End With
End Sub
'=============================================================================

'===========================================================================
Sub Quit()
    boolDone = True
End Sub
'=============================================================================

14

Re: VBS: Разновидности графических окон

Могу также выложить просто пример по основным типам элементов управления (меню, панель инструментов [как-то криво она там реализована], обычные элементы управления [в качестве образца взяты кнопки/editbox] и вызов стандартного диалога):

Option Explicit

Dim objKiXSystem
Dim objKiXForm

Dim strEvent
Dim lngPosition
Dim boolDone

Set objKiXSystem = WScript.CreateObject("Kixtart.System")

boolDone = False

Set objKiXForm = objKiXSystem.Form() 'objKiXForm

With objKiXForm
    .Width           = 400
    .Height          = 160
    
    .DockPadding     = Array(5, 5, 5, 5)
    
    .Text            = "My Form"
    .FormBorderStyle = 4
    .Icon = objKiXSystem.BuiltinIcons(67)
    
    
    .Menu = objKiXSystem.MainMenu()
    
    With .Menu
        .Style = 1
        .ImageList = objKiXSystem.BuiltinImageList
        
        .FileMenu = .MenuItems.Add("&File")
        
        With .FileMenu
            With .MenuItems.Add("&Select file...")
                .OnClick = "SelectFile()"
                .ImageIndex = 1
            End With
            
            .MenuItems.Add("-")
            
            With .MenuItems.Add("&Quit")
                .OnClick = "Quit()"
                .ImageIndex = 70
            End With
        End With
    End With
    
    With .Controls.Add("ToolButton")
        .Width     = 90
        .FlatStyle = 1
        
        .Text    = "Select file..."
        .Icon    = objKiXSystem.BuiltinIcons(1)
        .ToolTip = "Click me to select file"
        
        .OnClick = "SelectFile()"
    End With
    
    With .Controls.Add("ToolButton")
        .Left      = objKiXForm.Controls(objKiXForm.Controls.Count - 2).Right + 1
        
        .Width     = 25
        .FlatStyle = 1
        
        .Icon    = objKiXSystem.BuiltInIcons(70)
        .ToolTip = "Quit"
        
        .OnClick = "Quit()"
    End With
    
    lngPosition = .Controls(.Controls.Count - 1).Bottom + 1
    
    .Line 0,     lngPosition,     .ClientWidth,     lngPosition,     &H444444
    .Line 0 + 1, lngPosition + 1, .ClientWidth + 1, lngPosition + 1, &HCCCCCC
    
    With .Controls.Add("TextBox")
        .Text    = ""
        .Top     = objKiXForm.Controls(objKiXForm.Controls.Count - 2).Bottom + 5
        .Width   = objKiXForm.ClientWidth
        .Anchor  = 1 + 4 + 8
        
        .OnDoubleClick = "SelectFile()"
    End With
    
    With .Controls.Add("Button")
        .Text = "&Select file..."
        .Left = objKiXForm.ClientWidth  - (.Width  + 5)
        .Top  = objKiXForm.ClientHeight - (.Height + 5) * 2
        .Anchor  = 2 + 8
        
        .OnClick = "SelectFile()"
    End With
    
    With .Controls.Add("Button")
        .Text = "&Quit"
        .Left = objKiXForm.ClientWidth  - (.Width  + 5)
        .Top  = objKiXForm.ClientHeight - (.Height + 5)
        .Anchor  = 2 + 8
        
        .OnClick = "Quit()"
    End With
    
    .Show()
    
    
    Do While Not boolDone And .Visible
        strEvent = .DoEvents(True)
        
        If strEvent <> "" Then
            WScript.Echo "Event:", strEvent
            Execute(strEvent)
        End If
        
        WScript.Sleep 100
    Loop
End With

Set objKiXForm   = Nothing
Set objKiXSystem = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub SelectFile()
    With objKiXSystem.OpenFileDialog()
        .InitialDirectory = "c:\Temp"
        .Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
        .FilterIndex = 2
        .RestoreDirectory = True
        
        If .ShowDialog() = objKiXSystem.DialogResult.OK Then
            objKiXForm.Controls.Item("TextBox1").Text = .Filename
            WScript.Echo "You have selected file [" & .Filename & "]."
        End If
    End With
End Sub
'=============================================================================

'===========================================================================
Sub Quit()
    boolDone = True
End Sub
'=============================================================================

15

Re: VBS: Разновидности графических окон

Кстати, коллега Chulat, в HTA также неплохо выводятся картинки, рисуются графики и анимация. Только не просите примеры у меня .

16

Re: VBS: Разновидности графических окон

...НЕ работают. Ошибка программируемых объектов с именем "Kixtart.System"

alexii пишет:

Кстати, коллега Chulat, в HTA также неплохо выводятся картинки, рисуются графики и анимация. Только не просите примеры у меня .

А может попробуете.

Главное - желание

17

Re: VBS: Разновидности графических окон

Chulat пишет:

...НЕ работают. Ошибка программируемых объектов с именем "Kixtart.System"

alexii пишет:

Кстати, коллега Chulat, в HTA также неплохо выводятся картинки, рисуются графики и анимация. Только не просите примеры у меня .

А может попробуете.

А зачем? HTA — это тот же HTML, только с другим расширением имени файла и одним дополнительным тегом. Вся необходимая информация есть в статье по ссылке, которую alexii уже привёл в самом начале. Чтобы писать на HTA, нужно изучать HTML, а "пример" в данном случае будет пустой тратой времени для обоих сторон.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

18

Re: VBS: Разновидности графических окон

Chulat пишет:

...НЕ работают. Ошибка программируемых объектов с именем "Kixtart.System"

Очевидно, что Вы не прочитали статью, упомянутую выше, не загрузили библиотеку KiXForms, не зарегистрировали её в системе и, соответственно, получили закономерный результат. Чему удивляться?!

The gray Cardinal пишет:

…"пример" в данном случае будет пустой тратой времени для обоих сторон.

Угу. Уж по HTML+графика информации даже в русскоязычном сегменте — море. Да что там, даже на нашем форуме немало примеров на эту тему:
HTA, VBS: Графический редактор файлов иконок
HTA: Графические фильтры DXImageTransform. Сохранение скриншота окна.
HTA: Применение интегрированного медиа-контрола в скриптах
HTA: индикатор прогресса на форме
HTA: клавиатурный тренажёр

19

Re: VBS: Разновидности графических окон

The gray Cardinal пишет:

...Чтобы писать на HTA, нужно изучать HTML, а "пример" в данном случае будет пустой тратой времени для обоих сторон.

Я бы не сказал, пустая трата времени. Все-таки, опыт приходит со временем.
Alexii, получается, что для этого надо загрузить дополнительные библиотеки?! А со стандартными никак?...

Главное - желание

20

Re: VBS: Разновидности графических окон

Со стандартными — см. пост #2.

21

Re: VBS: Разновидности графических окон

На колу мочало, начинай сначала. Прикольная тема. Все убеждают Chulat'a хоть что-нибудь сделать самостоятельно, а он всеми силами уворачивается. Совершенно правильно он написал в своей подписи:

Главное - желание

Если верблюд пить не хочет, то подводи его хоть к озеру, хоть к реке, хоть к фонтану. Бросьте вы это безнадёжное дело.

22 (изменено: Chulat, 2009-06-28 15:52:37)

Re: VBS: Разновидности графических окон

YMP пишет:

На колу мочало, начинай сначала. Прикольная тема. Все убеждают Chulat'a хоть что-нибудь сделать самостоятельно, а он всеми силами уворачивается. Совершенно правильно он написал в своей подписи:

Главное - желание

Если верблюд пить не хочет, то подводи его хоть к озеру, хоть к реке, хоть к фонтану. Бросьте вы это безнадёжное дело.

Наверное, Вы правы, YMP. Я вот хочу узнать, что скрипты могут, есть ли граница, какие возможности.

Главное - желание

23

Re: VBS: Разновидности графических окон

Честно говоря, в последнее время работы многовато, поэтому обучание оставил "на потом". А так, Ваш форум очень хороший - лучший форум, я бы сказал. И общение тоже на приличном уровне.

Главное - желание

24

Re: VBS: Разновидности графических окон

YMP пишет:

На колу мочало, начинай сначала. lol Прикольная тема. Все убеждают Chulat'a хоть что-нибудь сделать самостоятельно, а он всеми силами уворачивается.

Точно . Но тут есть тонкость: мне самому было интересно поглядеть и «пощупать» KiXForms. А про HTA The gray Cardinal выразился совершенно верно: мне сие врядли даст что-то новое, а коллеге Chulat'у — разжёванный пример — тем более.

25

Re: VBS: Разновидности графических окон

alexii пишет:

...мне сие врядли даст что-то новое, а коллеге Chulat'у — разжёванный пример — тем более.

Ваш "разжеваннный пример" пример, Alexii, мне "что-то новое" даст - я увижу интерфейс скрипта. Ведь хочется, чтоб твой скрипт был еще приятен.

Главное - желание

26

Re: VBS: Разновидности графических окон

Chulat
Библиотеку KiXforms, естественно, надо скачивать и устанавливать — это специальный отдельный (бесплатный) продукт.
Пример HTA есть в статье, ссылку на которую уже дали. Кроме того, на форуме куча примеров HTA в Коллекции. Alexii уже выложил в этой теме пример HTA. Тема HTML-программирования слишком обширна, и пока ты сам не начнёшь изучать HTML-HTA, "примеры" можно будет здесь приводить хоть до пенсии, а толку будет чуть.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

27

Re: VBS: Разновидности графических окон

Chulat: Как будто интернетом не пользовался - ходи смотри. Всё что увидишь реализованном на каком-нибудь сайте - можешь сделать в HTA. А чтобы узнать как - кнопочка "View Source" поможет.

28

Re: VBS: Разновидности графических окон

Nikr, не понял...

Главное - желание

29

Re: VBS: Разновидности графических окон

Chulat пишет:

Nikr, не понял...

Ты принципиально не хочешь читать ссылку, которую привёл alexii в самом начале? Ну прочти хотя бы первые четыре строки, или хотя бы второе предложение в первом абзаце статьи.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

30

Re: VBS: Разновидности графических окон

The gray Cardinal пишет:

Ну прочти хотя бы первые четыре строки, или хотя бы второе предложение в первом абзаце статьи.

За папу или за маму?

31

Re: VBS: Разновидности графических окон

OFF: по рассказам очевидцев, меня ни разу не удалось накормить таким способом .

32

Re: VBS: Разновидности графических окон

Хорошо, вижу у вас мозги запарились. Не буду задавать вам вопросы... Дождемся лучших времен.

Главное - желание