Скачайте из каталога https://github.com/ahyahy/OneScriptForms/tree/main/docs архив с именем формата OneScriptFormsх_х_х_х.zip. Скачайте последнюю версию. Поместите находящуюся в архиве библиотеку, в какой либо каталог на диске. Подключить библиотеку и создать объект OneScriptForms для работы с формами можно так:
ПодключитьВнешнююКомпоненту("ВашКаталогНаДиске\OneScriptForms.dll");
Ф = Новый ФормыДляОдноСкрипта();
В разделе Документация
сайта библиотеки https://ahyahy.github.io/OneScriptForms/doc.html
можно найти примеры использования на каждый метод/свойство экземпляров
классов. Достаточно скопировать пример, вставить в файл и сохранить с
расширением .os
. Обратите внимание на кодировку сохраняемого файла, она должна быть UTF-8.
Тесты проведены в операционных системах Windows 7 и Windows 10, на OneScript версий 1.3.0.1 и 1.6.0.213 и 1.7.0.214.
.wav
файлов.Свернуть все окна
.Несколько слов о том, как библиотека устроена. Она написана на C#
.
Можно выделить три уровня классов.
Первый уровень – классы, наследуемые от исходных классов. Исходные
классы и рисуют нам на экране формы или представляют невидимые объекты,
такие как Таймер.
Первый уровень есть не у всех объектов, потому что, среди исходных
классов встречаются запечатанные классы, или не наследуемые по другим
причинам. В имени классов первого уровня присутствует постфикс Ex
.
public class ButtonEx : System.Windows.Forms.Button
{
public osf.Button M_Object;
}
Второй уровень образуют классы, копирующие структуру наследования исходных классов.
public class Button : ButtonBase
{
public ClButton dll_obj;
public ButtonEx M_Button;
public Button()
{
M_Button = new ButtonEx();
M_Button.M_Object = this;
base.M_ButtonBase = M_Button;
}
//...
}
Третий уровень дает нам объект для использования в скрипте
OneScript. В нём мы можем задать русские и английские имена
свойствам/методам. В имени классов третьего уровня присутствует префикс Cl
.
[ContextClass ("КлКнопка", "ClButton")]
public class ClButton : AutoContext<ClButton>
{
private ClColor backColor;
private ClRectangle bounds;
private ClRectangle clientRectangle;
private ClControlCollection controls;
private ClColor foreColor;
private ClCollection tag = new ClCollection();
public ClButton()
{
Button Button1 = new Button();
Button1.dll_obj = this;
Base_obj = Button1;
bounds = new ClRectangle(Base_obj.Bounds);
clientRectangle = new ClRectangle(Base_obj.ClientRectangle);
foreColor = new ClColor(Base_obj.ForeColor);
backColor = new ClColor(Base_obj.BackColor);
controls = new ClControlCollection(Base_obj.Controls);
}
//...
}
Как Вы поняли, эти три уровня связаны переменными, скажем так, вертикально и находятся в одном .cs
файле. Второй уровень связан наследованием, скажем так, горизонтально.
Мы используем из скрипта доступный нам класс третьего уровня, он
воздействует на класс второго уровня, который уже изменяет поведение
класса первого уровня. Эта схема верна не для всех элементов управления,
но она основная.
В иерархии пространства имен библиотеки Вы можете увидеть перечисления.
Они на самом деле относятся к перечислениям как исходные объекты,
объекты из библиотек MSDN и других. Здесь же это классы со свойствами.
На уровне пользователя это не важно. Кстати, структуры тоже у меня
превратились в классы.
Обработка событий обеспечивается с помощью очереди событий. Для исходных классов задается обработчик события.
m_Control.KeyUp += m_Control_KeyUp;
При наступлении события в очередь событий помещается новый экземпляр класса, соответствующему событию. У этого экземпляра есть свойства, которые можно использовать.
private void m_Control_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (KeyUp.Length > 0)
{
KeyEventArgs KeyEventArgs1 = new KeyEventArgs();
KeyEventArgs1.EventString = KeyUp;
KeyEventArgs1.Sender = this;
OneScriptForms.EventQueue.Add(KeyEventArgs1);
ClKeyEventArgs ClKeyEventArgs1 = new ClKeyEventArgs(KeyEventArgs1);
}
}
Недостаток такого подхода проявляется в невозможности моментального исполнения события сразу после наступление. Например, при перемещении ползунка на полосе прокрутки мышью, событие ПриПрокручивании() будет обработано только после отпускания ползунка. Зато в скрипт мы получаем имя процедуры для выполнения таким образом:
Пока Ф.Продолжать Цикл
Выполнить(Ф.ПолучитьСобытие());
КонецЦикла;
Для наглядности приведу простой пример создания кнопки.
ПодключитьВнешнююКомпоненту("ВашКаталогНаДиске\OneScriptForms.dll");
Ф = Новый ФормыДляОдноСкрипта();
Форма1 = Ф.Форма();
Форма1.Текст = "Форма1";
Форма1.Отображать = Истина;
Форма1.Показать();
Форма1.Активизировать();
Кнопка1 = Форма1.ЭлементыУправления.Добавить(Ф.Кнопка());
Кнопка1.Границы = Ф.Прямоугольник(10, 10, 75, 25);
Кнопка1.Текст = "Кнопка1";
Пока Ф.Продолжать Цикл
Выполнить(Ф.ПолучитьСобытие());
КонецЦикла;
Получаем форму с кнопкой.