Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также любые проблемы программирования на различных макроязыках и в скриптовых средах)

Скриптовый язык LangMF

LangMF - бесплатный скриптовый язык программирования, основанный на ядре языка VBScript, но с большими усовершенствованиями и расширением возможностей последнего. LangMF объединяет простоту и лёгкость использования VBScript с мощью и универсальностью "настоящего" Visual Basic, а также имеет большой ряд специфических "вкусностей", разработанных специально и не присутствующих ни в Visual Basic, ни в VBScript.


Официальный сайт проекта - http://www.atombyte.com/.

Официальный форум проекта - http://forum.atombyte.com/.

Последняя версия LangMF всегда находится, как правило, здесь: http://www.atombyte.com/prog.htm?oper=katalog&id=3&vi=1.

Различные файлы для скачивания, связанные с LangMF, и не только: http://www.atombyte.com/ftp/.


Помимо возможностей VBScript, LangMF обладает следующими основными преимуществами:

Установка

Для полной интерактивной установки запустите инсталлятор LangMF_setup.exe. После установки вы получите:

Для полностью "тихой" установки настройте запуск инсталлятора LMF.exe (установка без файла справки и примеров). Предварительно определить путь для такой "тихой" установки можно следующим способом (reg-файл):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\LangMF]
"InstPath"="C:\\Program Files\\LangMF"

Примечание: инсталлятор LMF.exe потребует прав на запись каталог %SystemRoot%\system32\, т.к. он устанавливает туда целый ряд COM-библиотек. Если путь для установки в реестре не определён, установка будет произведена в каталог по умолчанию - C:\Program Files\LangMF.

Hello, World!

Создайте текстовый файл с расширением mf и поместите в него следующий код:

' Скрипт всегда запускается с процедуры Load
' cmdLine - параметр, в который передаются аргументы командной строки
<#Module=mod>
Sub Load(cmdLine)
    MsgBox "Привет, LangMF!" & vbCrLf & "Версия " & lmf_Version
    endmf ' завершает выполнение скрипт-движком всех процессов и очищает все ресурсы
End Sub
<#Module>

Запустите скрипт двойным щелчком.

Как видно, по синтаксису - это обычный Visual Basic. Если вы уже знакомы с VBScript, Visual Basic, VBA, VB.NET или любыми другими диалектами Basic - вы и не заметите, что пишете на другом языке.

Компиляция скриптов

Для компиляции вам понадобится скачать файл LangMF_Real.exe (см. ссылки в начале статьи).

Сделайте резервную копию вышеприведённого скрипта, а затем выполните команду "Компилировать" контекстного меню файла скрипта. После этого откройте файл скрипта текстовым редактором, и вы увидите, что исходный код скрипта прочитать уже невозможно. Запустите откомпилированный mf-скрипт двойным щелчком, чтобы убедиться в его работоспособности. На одной из дополнительных вкладок свойств в Проводнике будет отображаться информация о скомпилированном mf-файле.

Создайте рядом со скриптом текстовый файл make.ini следующего содержания:

[options]
type=full
module=C:\Program Files\LangMF\LangMF_Real.exe
compile=exe
file=mf.exe

Выполните команду "Компилировать" контекстного меню файла скрипта. На этот раз вы получите исполняемый файл mf.exe, который будет работать и на машинах, где не установлен LangMF. Запустите mf.exe двойным щелчком, чтобы убедиться в его работоспособности. Примечание: первый запуск mf.exe на машине, где не установлен LangMF, перед непосредственным исполнением кода скрипта автоматически произведёт действия, равносильные запуску "тихого" инсталлятора LMF.exe.

Можно компилировать mf-файлы и с помощью удобного редактора-компилятора, расположенного в Проводнике на одной из дополнительных вкладок свойств mf-файла.

Win32 API и графический интерфейс

Создайте текстовый файл с расширением mf и поместите в него следующий код:

Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
<#Module=mod>
Function Cllbck(hwnd, lParam)
    tLen = GetWindowTextLength(hwnd)
    sSave = Space(tLen)
    GetWindowText hwnd, sSave, tLen + 1
    If Len(Trim(sSave)) Then form.List(1).AddItem Sys.cStrConv(sSave, vbUnicode)
    Cllbck = True
End Function
Sub Load(cmdLine)
    form.width = 500 * vbPX
    form.height = 245 * vbPY
    form.Add "List", 1
    form.List(1).move 5, 5, 484, 200
    form.NoMoveMouse = true
    form.caption = "Заголовки окон верхнего уровня"
    form.Show
    EnumWindows sys.callback("Cllbck"), 0
End Sub
<#Module>
<#Form=form>
Sub Form_Unload()
    endmf
End Sub
<#Form>

Запустите скрипт и вы увидите форму со списком заголовков окон верхнего уровня, открытых в вашей системе в настоящий момент. Скрипт демонстрирует возможность вызова функций Win32 API с организацией обратного вызова (callback), а также лёгкость создания графического интерфейса.

Динамическое выполнение кода

Создайте текстовый файл с расширением vbs и поместите в него следующий код:

code = ""
code = code & "<#Module=mod>" & vbCrLf
code = code & "Sub Load(cmdLine)" & vbCrLf
code = code & "MsgBox ""Привет, LangMF!"" & vbCrLf & ""Версия "" & lmf_Version" & vbCrLf
code = code & "endmf" & vbCrLf
code = code & "End Sub" & vbCrLf
code = code & "<#Module>" & vbCrLf
Set LMF = CreateObject("Atomix.LangMF")
LMF.Command code

Запустите скрипт двойным щелчком. Вы написали программу на VBScript, которая динамически исполняет код LangMF с помощью COM-сервера "Atomix.LangMF".

Запустите командный интерпретатор cmd.exe и выполните следующую команду:

"C:\Program Files\LangMF\LangMF.exe" for a=1 to 5 ~ msgbox a ~ next ~ sys.endmf /run

Вы динамически исполнили код LangMF из командной строки. Примечание: как видно, разделителем строк в коде является символ тильды (~). Подобный приём может пригодиться в CMD/BAT файлах.

Кириллический синтаксис

Директива <#--AddRus> позволяет добавить поддержку написания имен переменных, классов, типов, функций и процедур на русском языке. Создайте текстовый файл с расширением mf и поместите в него следующий код:

<#--AddRus>
<#Module=mod>
Тип МойТип
    Масс(100) as long
    Числ as long
Конец Тип
'---------------------------------------
Процедура Load(cmdLine)
    Dim Объект as МойТип
    randomize timer
    Для Счётчик = 0 По 100
       Объект.Масс(Счётчик) = int(rnd*100)
    Дальше
    Сообщение Объект.Масс(50)
    Сообщение Объект.Числ
    EndMF
Конец Процедура
<#Module>

Запустите скрипт двойным щелчком, чтобы убедиться в его работоспособности. Примечание: возможно, такой кириллический синтаксис кому-то может показаться коверканьем языка (хотя, к примеру, в среде 1С:Предприятия это уже давно норма, и таким способом написаны сотни тысяч строк кода типовых и нетиповых конфигураций, поставляемых фирмой 1С и используемых повсеместно). Однако, директиву <#--AddRus> вполне можно использовать только ради объявления кириллических идентификаторов в коде, что действительно может быть весьма и весьма удобно, т.к. такие идентификаторы "документируют" сами себя своими именами. Например:

<#--AddRus>
<#Module=mod>
Sub Load(cmdLine)
    ТекстДляВывода = "значение"
    MsgBox ТекстДляВывода
    EndMF
End Sub
<#Module>

Примеры организации графических интерфейсов

После полной установки LangMF в каталоге C:\Program Files\LangMF\Examples вы найдёте свыше 70 примеров скриптов, которые демонстрируют различные возможности языка. А здесь далее - несколько скриншотов, которые позволят вам немного представить себе возможности LangMF по организации графических интерфейсов (имейте в виду, что LangMF - это "всего лишь" скриптовый язык).

Организация меню окна:




Использование OpenGL:


Отслеживание положения курсора мыши:


Прогресс-бар:


Градиентная заливка:


Использование скинов:


Кнопки в стиле Windows XP:


Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.info При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.