# Разрабатываем программы на GPScript'е

> Введение

Canonical HTML: <https://www.dotfix.net/doc/gpscript.htm>

**Автор:** **Сергей Чубченко**. **Дата публикации:** 31.07.2005

## Разрабатываем программы на GPScript'е

**Введение**

Не знаю, в курсе Вы или нет, но пару лет назад мной был разработан довольно интересный скриптовый язык программирования, умеющий создавать нормальные Win32 приложения. О степени поддержки возможностей современных языков и оптимизированности спорить конечно бессмысленно, но когда нужно на скорую руку написать Autorun менюшку на диск или любую другую несложную программу, то данный язык может сильно пригодиться. Я не буду описывать все возможности языка - на то есть хелп. Моя цель - научить Вас на нем писать разного рода продукты. Поэтому учиться начнем на конкретных примерах. Приступим.

**Autorun меню за считанные минуты**

Для начала откройте GPScript и в меню "Формы" выберите пункт меню "Редактор Форм". В появившемся окне мы будем создавать интерфейс для нашего Autorun’а. В левом верхнем углу формы, прямо под меню расположена панель компонентов, которые можно разместить на форме. Их выбор не велик, но этого вполне хватит для реализации несложных задач.

Первый компонент - "Кнопка" представляет собой графическую кнопку, а также может использоваться как обычный PictureBox. Щелкните по нему. В появившемся окне выберите графический объект. Для примера возьмем файл Exit1.jpg из папки Buttons (эта папка находится в папке с GPScript’ом). Чуть ниже списка компонентов есть список свойств. У кнопки всего одно важное свойство "Стиль". Оно определяет, будет ли картинка статичной, или выполняет роль кнопки.

Второй компонент - "WinКнопка" представляет собой обычную виндовую кнопку, стандартную для всех приложений. Добавим ка на форму пару таких кнопок и разместим объекты где необходимо! Забыл сказать, если потребуется изменять размеры контролов - нуджно всего лишь подвести курсор к правому нижнему краю контрола или формы, зажать Alt на клавиатуре и ресайзить выделенный контрол.

Третий компонент - "Текст" может использоваться как поле для ввода текста или как лейбл. Все зависит от свойства "Стиль". Этот контрол мы используем в качестве лейбла вверху нашего Autorun меню.

Вот что у меня получилось:

![Редактор Форм в GPScript](https://www.dotfix.net/images/doc/gpscript/picture1.jpg)

Теперь можно сохранить шаблон формы через меню "Файл" -> "Сохранить". Это потребуется, если Вы впоследствии решите что нибудь изменить в форме используя визуальных редактор, а не копаясь в малопонятном коде. Кстати, чтобы форму добавить в свой код ее нужно перевести на язык GPScript, для этого служит меню "Компиляция". В нем два пункта. "With attach" означает что картинки из кнопок будут храниться внутри EXE файла, а не подгружаться из выбранной папки. Теперь когда мы разобрались с принципом создания формы скомпилим нашу форму With attach и скопируем скомпиленный скрипт из окна в правом нижнем углу редактора форм в самое начало нашего кода в главном окне GPScript. Как видите, там уже есть заготовки для обработчиков кнопок - они должны быть в конце скрипта, после скрипта загрузки формы. Вот код, который получился у меня:

;Загрузка формы
Объект.загрузить Форма
Объект.размер Форма, 3000, 480, 2300, 3405
Объект.цвет Форма, -2147483630, -2147483633
Объект.стиль Форма, 1
Объект.текст Форма, Autorun Menu
;Загрузка Кнопки 1
Объект.загрузить Кнопка1
Объект.размер Кнопка1, 690, 1215, 465, 1980
Объект.стиль Кнопка1, 0
#C:\gpch\GPScript\Buttons\Exit1.jpg
аттач C:\gpch\GPScript\Buttons\Exit1.jpg, Tmp_Button1_jpg
удалить @Temp@Кнопка1.jpg
записать @Tmp_Button1_jpg@, @Temp@Кнопка1.jpg
Объект.рисунок Кнопка1, @Temp@Кнопка1.jpg
удалить @Temp@Кнопка1.jpg
;Загрузка Текстового поля 1
Объект.загрузить Текст1
Объект.размер Текст1, 390, 180, 345, 2385
Объект.цвет Текст1, -2147483640, -2147483633
Объект.текст Текст1, Крутой Autorun
Объект.стиль Текст1, 0
Объект.шрифт Текст1, MS Sans Serif, 8,25
;Загрузка Win Кнопки 1
Объект.загрузить WinКнопка1
Объект.размер WinКнопка1, 225, 660, 375, 1050
Объект.цвет WinКнопка1, , -2147483633
Объект.текст WinКнопка1, Product
Объект.шрифт WinКнопка1, MS Sans Serif, 8,25
;Загрузка Win Кнопки 2
Объект.загрузить WinКнопка2
Объект.размер WinКнопка2, 1995, 645, 375, 1050
Объект.цвет WinКнопка2, , -2147483633
Объект.текст WinКнопка2, Web Site
Объект.шрифт WinКнопка2, MS Sans Serif, 8,25
;Сделать все объекты видимыми
Объект.показать Форма
Объект.показать Кнопка1
Объект.показать Текст1
Объект.показать WinКнопка1
Объект.показать WinКнопка2

Процедура_WinКнопка_1
;Начало вашего кода WinКнопка1

;Конец вашего кода WinКнопка1
Конец_Процедура_WinКнопка_1
Процедура_Кнопка_1
;Начало вашего кода

;Конец вашего кода
Конец_Процедура_Кнопка_1
Процедура_WinКнопка_2
;Начало вашего кода WinКнопка2

;Конец вашего кода WinКнопка2
Конец_Процедура_WinКнопка_2

Генератор тут немного накосячил. Перепутал параметры в функции "записать"... таких глюков в автогенераторах полно и я их не в силах исправитить, так как уже нет у меня исходников GPScript’а, Потому если возникает глюк - нужно лезть в хелп и смотреть как правильно. Хелп всегда прав :) Короче меняем:

записать @Tmp_Button1_jpg@, @Temp@Кнопка1.jpg

на

записать @Temp@Кнопка1.jpg, @Tmp_Button1_jpg@

Этот косяк не единственный. Генератор еще для красоты перед строчкой:

#C:\gpch\GPScript\Buttons\Exit1.jpg

поставил два пробела, что недопустимо для директив компилятора, поэтому эти два пробела нужно убрать. Также, так как это директива компилятора, то если программу не откомпилировать - она работать как надо не будет, потому не торопитесь жать F5 (Запуск программы), а нажмите Shift+F5, введите имя создаваемой программы и после успешного создания EXE файла можете попробовать его запустить - все должно работать как надо. Теперь напишем обработчики для кнопок:

Процедура_WinКнопка_1
;Начало вашего кода WinКнопка1
запустить @Current@Product\Setup.exe
;Конец вашего кода WinКнопка1
Конец_Процедура_WinКнопка_1
Процедура_Кнопка_1
;Начало вашего кода
завершить
;Конец вашего кода
Конец_Процедура_Кнопка_1
Процедура_WinКнопка_2
;Начало вашего кода WinКнопка2
запустить explorer http://www.dotfix.net
;Конец вашего кода WinКнопка2
Конец_Процедура_WinКнопка_2

Вот и все. Быстро, правда?

**Тест защиты на GPScript’е**

Чтобы усвоить материал предлагаю познакомиться с моим шестым сэмплом защиты. Он написан именно на GPScript’е:

;Загрузка Формы
Объект.загрузить Форма
Объект.размер Форма, 3000, 480, 3035, 4425
Объект.цвет Форма, -2147483630, -2147483633
Объект.стиль Форма, 1
Объект.текст Форма, Test Protection 6 by DotFix Software
;Загрузка Текстового поля 1
Объект.загрузить Текст1
Объект.размер Текст1, 465, 210, 705, 3405
Объект.цвет Текст1, -2147483640, -2147483633
Объект.текст Текст1, To register please pay $9 for the license. Protected by DotFix Software. Protectors is not used!
Объект.стиль Текст1, 0
Объект.шрифт Текст1, MS Sans Serif, 8,25
;Загрузка Текстового поля 2
Объект.загрузить Текст2
Объект.размер Текст2, 225, 1185, 285, 1650
Объект.цвет Текст2, -2147483640, -2147483633
Объект.текст Текст2, User name:
Объект.стиль Текст2, 0
Объект.шрифт Текст2, MS Sans Serif, 8,25
;Загрузка Текстового поля 3
Объект.загрузить Текст3
Объект.размер Текст3, 240, 1635, 285, 1650
Объект.цвет Текст3, -2147483640, -2147483633
Объект.текст Текст3, Password:
Объект.стиль Текст3, 0
Объект.шрифт Текст3, MS Sans Serif, 8,25
;Загрузка Текстового поля 4
Объект.загрузить Текст4
Объект.размер Текст4, 1950, 1110, 285, 1650
Объект.цвет Текст4, -2147483640, -2147483643
Объект.текст Текст4,
Объект.стиль Текст4, 1
Объект.шрифт Текст4, MS Sans Serif, 8,25
;Загрузка Текстового поля 5
Объект.загрузить Текст5
Объект.размер Текст5, 1950, 1545, 285, 1650
Объект.цвет Текст5, -2147483640, -2147483643
Объект.текст Текст5,
Объект.стиль Текст5, 1
Объект.шрифт Текст5, MS Sans Serif, 8,25
;Загрузка Win Кнопки 1
Объект.загрузить WinКнопка1
Объект.размер WinКнопка1, 360, 2010, 330, 1455
Объект.цвет WinКнопка1, , -2147483633
Объект.текст WinКнопка1, Register
Объект.шрифт WinКнопка1, MS Sans Serif, 8,25
;Загрузка Win Кнопки 2
Объект.загрузить WinКнопка2
Объект.размер WinКнопка2, 2505, 2010, 330, 1455
Объект.цвет WinКнопка2, , -2147483633
Объект.текст WinКнопка2, Exit
Объект.шрифт WinКнопка2, MS Sans Serif, 8,25
;Сделать все объекты видимыми
Объект.показать Форма
Объект.показать Текст1
Объект.показать Текст2
Объект.показать Текст3
Объект.показать Текст4
Объект.показать Текст5
Объект.показать WinКнопка1
Объект.показать WinКнопка2

Процедура_WinКнопка_1
;Начало вашего кода WinКнопка1
переменная 10,ецеикс
переменная @Форма.Текст4.Caption@,имя
объединить @имя@@имя@,@имя@@имя@,имя
длина @имя@,длина
перейти ошибка, если длина < 1
Метка ключ_a
выдернуть @имя@,@ецеикс@,1,байт
код @байт@,число
сложить @число@,@ецеикс@,число
символ @число@,байт
объединить @пасс@,@байт@,пасс
вычесть @ецеикс@,1,ецеикс
перейти ключ_a, если ецеикс > 0
перейти всеок, если Форма.Текст5.Caption = @пасс@
;обнуляем переменные
переменная ,пасс
переменная ,байт
переменная ,число
переменная ,ецеикс
перейти парольневерный
перейти выход
Метка ошибка
мессага Слишком маленькое имя пользователя@CrLf@Введите имя пользователя еще раз,64,Регистрация
перейти выход
Метка всеок
мессага Регистрация пройдена!,64,Регистрация
перейти выход
Метка парольневерный
мессага Вы ввели неверный пароль!,16,Регистрация
перейти выход
Метка выход
;Конец вашего кода WinКнопка1
Конец_Процедура_WinКнопка_1
Процедура_WinКнопка_2
;Начало вашего кода WinКнопка2
завершить
;Конец вашего кода WinКнопка2
Конец_Процедура_WinКнопка_2

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

**Visual Basic и ассемблерные вставки**

Да, GPScript и на такое способен. Можете смело писать в коде так:

vb
msgbox "Test"
end_vb

Только чтобы это скомпилировать псевдокомпиляция не поможет - нужно выбирать в меню "Программа" пункт "Компиляция" и заранее в опциях указать путь к Visual Basic 6.0, установленному у Вас на компьютере. Без него VB код скомпилировать не получится. Кстати вы можете юзать переменные GPScript’а в VB вставках и наоборот. Лучшим примером будет программа, написанная ShackS’ом. Эта прога рисует на форме фигуры лиссажу:

;Загрузка Формы
Объект.загрузить Форма
Объект.размер Форма, 3000, 480, 5090, 6585
Объект.цвет Форма, -2147483630, -2147483633
Объект.стиль Форма, 1
Объект.текст Форма, Лиссажу
;Загрузка Win Кнопки 1
Объект.загрузить WinКнопка1
Объект.размер WinКнопка1, 2280, 3990, 375, 2055
Объект.цвет WinКнопка1, , -2147483633
Объект.текст WinКнопка1, Начать
Объект.шрифт WinКнопка1, MS Sans Serif, 8,25
;Сделать все объекты видимыми
Объект.показать Форма
Объект.показать WinКнопка1
Процедура_WinКнопка_1
;Начало вашего кода WinКнопка1
vb
w1=2*3.1415926536*1500
w=2*3.1415926536*1000
f=0
f1=0
u=1500
u1=1500
do
’Форма.cls
for t=0 to 360 step 0.5
doevents
x=u*sin(((w*t)+f)*3.1415926536/180)
y=u1*sin(((w1*t)+f1)*3.1415926536/180)
y1=u1*sin(((w1*t)+f1-1)*3.1415926536/180)
Форма.pset(3247-x,1995+y1),-2147483633
Форма.pset(3247-x,1995+y),12345678
next
f1=f1+1
if f1>360 then f1=0
loop
end_vb
;Конец вашего кода WinКнопка1

Теперь пара слов об ассемблерных вставках. Их юзать можно например так:

<
jmp     down
ret
down:
mov     ah,9
mov     dx,offset coolest
int     21h
loop    down
jmp     down
mov	ax,4c00h
int	21h
end	start
C:\Program Files\GPScript\cool.asm >
!run Asm\Tasm.exe cool.asm cool.obj
!kill C:\Program Files\GPScript\cool.asm
!run Asm\tlink.exe /x cool.obj
!kill C:\Program Files\GPScript\cool.obj
#C:\Program Files\GPScript\cool.exe#
аттач C:\Program Files\GPScript\cool.exe,f1
удалить @[Связаться с DotFix Software](https://www.dotfix.net/contacts.htm)
записать @[Связаться с DotFix Software](https://www.dotfix.net/contacts.htm),@f1@
запустить @[Связаться с DotFix Software](https://www.dotfix.net/contacts.htm)
завершить

**Встраиваем звук в программу**

И наконец надо рассказать как встроить музыку в программу и проиграть ее при запуске. Помните директиву компилятора "#", которая в программу вставляет файл, путь к которому передается после символа "#"? Тем же методом приаттачивается музыка в формате wav (если бы сохранился исходный код GPScript’а - сделал бы поддержку и других, более современных форматов), затем при запуске программы сохраняем музыкальный файл в Temp папку и можно воспроизводить вызовом функции:

воспроизвести <полный путь к WAV файлу>

Вот мы и разобрались с некоторой частью возможностей GPScript’а. Если есть вопросы - загляните в справку, она очень подробно расписывает все возможности языка GScript.
