Системные команды

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



SysCommand("Команда","Параметры")
Пояснение
Немного нетрадиционная команда, имеющая несколько внутренних функций, управляющих окнами и копированием файлов.

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

Функции не чувствительны к регистру.


ResizeWindow
Пояснение

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


Сначала указывают ширину окна:

640

...и после запятой указывают высоту:

480

В полном виде команда выглядит так:

SysCommand("ResizeWindow","640,480")
Пример

** Изменяет размер окна приложения до 320 х 240
SysCommand("ResizeWindow","320,240")


MoveWindow
Пояснение

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



Сначала указывают координату X (горизонтальную):

200

...и после запятой указывают координату Y (вертикальную):

150

В полном виде команда выглядит так:

SysCommand("MoveWindow","200,150")
Пример

** Перемещает окно приложения в точку с координатами 300, 420
SysCommand("MoveWindow","300,420")


CenterWindow
Пояснение

Перемещает окно приложения в центр экрана. Не требует параметров.



Пример

** Выравнивает окно приложения по центру экрана
SysCommand("CenterWindow","")


AlwaysOnTop
Пояснение

Помещает окно приложения поверх всех открытых окон. Приложение остается поверх всех окон до тех пор, пока какое-либо другое окно не будет открыто поверх всех окон. Не требует параметров.



Пример

** Помещает окно приложения поверх всех окон
SysCommand("AlwaysOnTop","")


NotAlwaysOnTop
Пояснение

В противоположность предыдущей функции, эта функция возвращает окно приложения в обычное состояние.



Пример

** Восстанавливает обычное состояние окна
SysCommand("NotAlwaysOnTop","")


CopyFile
Пояснение

Копирует исходный файл в конечный. Оба файла указываются во втором параметре команды.

Файлы указываются либо как:

а) путь к файлу + имя файла, либо
б) макропуть + имя файла

Сначала указывают исходный файл:

<SrcDir>\My Program.ini

... и после запятой указывают конечный файл:

<Windows>\My Program.ini

В полном виде команда выглядит так:

SysCommand("CopyFile","<SrcDir>\My Program.ini,<Windows>\My Program.ini")

Если заданная структура каталогов не существует, то она будет создана.

Имена конечного и исходного файлов могут различаться.
Пример

** Копирует файл C:\ReadMe.txt в файл D:\ReadMeCopy.txt
SysCommand("CopyFile","C:\ReadMe.txt,D:\ReadMeCopy.txt")



Return()
Пояснение
Прерывает выполнение текущего скрипта.


Не влияет на другие скрипты, запущенные через таймер.
Пример
** Завершение выполнения скрипта
Return()
Дополнительная информация
Эта команда часто используется в циклах for..next и условном операторе для прерывания выполнения кода при достижении некоторых условий.



Break()
Пояснение
Прерывает выполнение цикла for..next. В то время как команда Return прерывает весь скрипт, Break прерывает только выполнение цикла, и выполнение скрипта продолжается со строки, находящейся непосредственно после цикла.

Не влияет на другие скрипты, запущенные через таймер.
Пример
Этот код бесполезен, но он покажет вам, как именно работает команда Break(). Во время его выполнения вы получите 5 сообщений из цикла i, но только 2 сообщения из цикла n...

maxloop=5
For i=1 To maxloop
Message("Цикл 1","i")
For n=1 To 10
If (n=3) Then
Break()
End
Message("Цикл 2","n")
Next n
Next i


...в то время как тот же самый код с командой Return() отобразит только одно сообщение из цикла i и два сообщения из цикла n. Это потому что команда Return() завершает выполнение всего скрипта.

maxloop=5
For i=1 To maxloop
Message("Цикл 1","i")
For n=1 To 10
If (n=3) Then
Return()
End
Message("Цикл 2","n")
Next n
Next i
Дополнительная информация
Эта команда часто используется в циклах for..next и условном операторе для прерывания выполнения кода при достижении некоторых условий. Смотрите файл break example.mbd



FileExist("Путь","Переменная")
Пояснение
Проверяет существование указанного файла и возвращает результат в числовую переменную.

В первом параметре указывается либо:

а) путь к файлу + имя файла, либо
б) макропуть + имя файла

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

Проверка существования файла <SrcDir>\text.txt с использованием числовой переменной FileCheck в качестве второго параметра команды:

FileExist("<SrcDir>\text.txt","FileCheck")

...сохранит результат проверки в переменную FileCheck, причем переменная может иметь только два значения:
  • 1 - файл существует
  • 0 - файл не существует
Использование полученного результата в условном операторе является наиболее очевидным выбором:

If (FileCheck=1) Then
Message("Файл существует!","")
Else
Message("Файл отсутствует.","")
End
Пример
/* Проверка наличия файла win.ini в каталоге <Windows>
и отображение сообщения, если файл найден, и завершение
работы - если файл отсутствует */
FileExist("<Windows>\win.ini","check")
If (check=1) Then
Message("Файл win.ini найден.","")
Else
Exit()
End



FileString("Подстрока","Переменная")
Пояснение
Проверяет, существует ли указанная подстрока в константе <File>, и возвращает результат в числовую переменную. Используйте эту команду после команды OpenFile() - обычно это бывает нужно для проверки расширения файла.

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

.avi

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

Проверка типа файла с использованием числовой переменной Type выглядит так:

FileString(".avi","Type")

Результат проверки будет помещен в переменную Type, причем переменная может иметь только два значения:
  • 1 - подстрока найдена
  • 0 - подстрока не найдена
Конечно же, совсем не обязательно использовать команду для проверки расширения файла. Мы можем проверить существование подстроки "Мои документы" в константе <File> и поместить результат в переменную FolderCheck:

FileString("Мои документы","FolderCheck")

Использование полученного результата в условном операторе сделает создание скриптов более легким:

If (FolderCheck=1) Then
Message("Спасибо за выбор каталога Мои документы!","")
Else
Message("Пожалуйста, выберите каталог Мои документы.","")
End
Пример
** Проверка, является ли выбранный файл MP3-файлом
FileString(".mp3","check")
If (check=1) Then
PlaySound("<File>")
Else
Message("Выбранный файл не является MP3-файлом.","")
End



SaveVariable("Имя","Переменная")
Пояснение
Сохраняет содержимое указанной переменной в реестр Windows.

Реестр Windows представляет собой контейнер для хранения данных о конфигурации компьютера. Реестр содержит информацию, на которую ссылается Windows во время операций - профили пользователей, программы, установленные на компьютере, типы документов, с которыми может оперировать каждая из программ, настройки папок, настройки аппаратного обеспечения и т.д.

Вы можете использовать команды SaveVariable и LoadVariable для управления параметрами в разделе реестра, выделенном для вашего приложения:

HKEY_CURRENT_USER\Software\Mediachance\Multimedia Player\RegName

Давайте разделим этот путь на секции:

HKEY_CURRENT_USER\Software\Mediachance\Multimedia Player\
Определяет общий путь для всех MMB-приложений


RegName
Представляет собой имя подраздела в реестре, которое вы можете задать в свойствах проекта:


Даже если опция "Сохранять координаты в реестре" ("Save Last Position in Registry") отключена, указанное имя подраздела будет использоваться для команд SaveVariable и LoadVariable. Таким образом, вы можете задать имя подраздела и отключить эту опцию - имя будет сохранено, и этот путь будет использоваться для хранения и загрузки параметров из реестра.

Итак, что нам известно о расположении данных в реестре:

Скомпилированное приложение с именем подраздела Viewer, заданным в свойствах проекта, будет хранить данные в разделе:

HKEY_CURRENT_USER\Software\Mediachance\Multimedia Player\Viewer

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

Хорошо, теперь вы знаете, ГДЕ хранятся значения. Более важно знать, КАК сохранять значения в реестр.

Команда SaveVariable сохраняет значения в реестр, используя путь, который мы обсудили выше. Используйте первый параметр команды, чтобы задать имя значения в реестре, например:

User Settings

Второй параметр задает имя переменной, значение которой будет сохранено в реестр. Вы можете использовать как строковые, так и числовые переменные. MMB распознает тип переменной и сохранит значение либо в строковый параметр, либо в параметр типа DWORD (для числовых переменных).

Вы не должны беспокоиться об этом. Вот пример записи значения строковой переменной pass$ в параметр реестра с именем "Password":

pass$='МойСекретныйПароль'
SaveVariable("Password","pass$")


И пример записи значения числовой переменной HiScore в параметр реестра "UserPoints":

HiScore=4910
SaveVariable("UserPoints","HiScore")


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

При запуске программы используйте команду LoadVariable, чтобы загрузить сохраненные значения - точно так же, как это делают "взрослые" приложения!
Примеры
** Сохранение значения строковой переменной EditBox$ в параметр реестра с именем "EditBoxInput"
SaveVariable("EditBoxInput","EditBox$")

** Сохранение значения числовой переменной Width в параметр реестра с именем "CurrentWidth"
Width=ScreenWidth()
SaveVariable("CurrentWidth","Width")


** Сохраняет значение числовой переменной InstFlag, которая служит в качестве флага, сигнализирующего о первом запуске приложения
InstFlag=1
SaveVariable("Installed","InstFlag")
Дополнительная информация
При работе в режиме разработки команды SaveVariable и LoadVariable используют следующий путь:

HKEY_CURRENT_USER\Software\Mediachance\Multimedia Builder\RegName

Команды управления параметрами реестра работают только с фиксированными путями. Для того чтобы иметь полный доступ ко всем параметрам реестра, используйте соответствующие подключаемые модули.



LoadVariable("Имя","Переменная")
Пояснение
Загружает из реестра Windows параметр, который был предварительно сохранен с помощью команды SaveVariable и помещает его значение либо в строковую, либо в числовую переменную.

Подробнее о реестре Windows и его параметрах читайте в описании команды SaveVariable.

Чтобы загрузить значение из реестра, укажите его имя в первом параметре команды, например:

UserSettings

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

Вот пример загрузки значения параметра с именем "Password" в строковую переменную pass$:

LoadVariable("Password","pass$")

И пример загрузки значения параметра с именем "UserPoints" в числовую переменную HiScore:

LoadVariable("UserPoints","HiScore")

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

Разумеется, вы можете загрузить данные, когда захотите :)
Примеры
** Загрузка значения параметра "EditBoxInput" в строковую переменную EditBox$ и отображение значения в объекте EditBox
LoadVariable("EditBoxInput","EditBox$")
LoadText("EditBox","EditBox$")


** Загрузка значения параметра "CurrentWidth" в числовую переменную Width и отображение значения в окне сообщения
LoadVariable("CurrentWidth","Width")
Message("Сохраненная длина экрана:","Width")

** Загружает значение параметра "Installed", который служит в качестве флага, сигнализирующего о первом запуске приложения
LoadVariable("Installed","InstFlag")
If (InstFlag=1) Then
NextPage()
Else
Message("Приложение запущено в первый раз.","")
End
Дополнительная информация
При работе в режиме разработки команды SaveVariable и LoadVariable используют следующий путь:

HKEY_CURRENT_USER\Software\Mediachance\Multimedia Builder\RegName

Команды управления параметрами реестра работают только с фиксированными путями. Для того чтобы иметь полный доступ ко всем параметрам реестра, используйте соответствующие подключаемые модули.



InstallFont("Путь")
Пояснение
Пользователи MMB уделяют большое внимание визуальной части своих проектов. Во многих случаях использование стандартных шрифтов (предустановленных с Windows) не является удовлетворительным решением.

MMB помогает и в этом случае - вы всего лишь должны поместить шрифт в дистрибутив проекта. Используя команду InstallFont, MMB проверит, установлен ли шрифт на компьютере пользователя, и, если это необходимо, автоматически установит его.

При выходе из программы шрифт будет удален.

В качестве параметра команды может быть использован либо:

а) путь к файлу + имя файла, либо
б) макропуть + имя файла
Пример
** Установка шрифта LarryLovage.ttf из каталога <SrcDir>
InstallFont("<SrcDir>\LarryLovage.ttf")



Clipboard("Send/Get","Переменная")
Пояснение
Осуществляет взаимодействие с буфером обмена Windows (контейнером, который хранит все, что вы копируете или вставляете).

Используйте первый параметр, чтобы задать функцию буфера обмена, которую вы хотите использовать:
  • SEND : помещает значение переменной в буфер обмена
  • GET : помещает содержимое буфера обмена в переменную


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

Для получения содержимого буфера обмена рекомендуется использовать строковые переменные.
Примеры
** Помещает содержимое строковой переменной put$ в буфер обмена
Clipboard("SEND","put$")

** Помещает содержимое числовой переменной ClickCount в буфер обмена
Clipboard("SEND","ClickCount")

** Помещает содержимое буфера обмена в строковую переменную content$
Clipboard("GET","content$")
Дополнительная информация
Вы можете работать только с обычным текстом и числами. Обмен более сложными данными (изображениями, объектами) не предусмотрен.

MMB Программирование без границ :: dgilmour, перевод на русский язык, 2006 :: Все права защищены :: www.mmbscript.ru