Введение в FormsABC: различия между версиями
Нет описания правки Метка: редактор вики-текста 2017 |
м style editing |
||
Строка 1: | Строка 1: | ||
FormsABC - учебный модуль PascalABC.NET для работы простейшим оконными приложениями без дизайнера форм. Основан на устаревшей технологии Windows Forms. |
'''FormsABC''' - учебный модуль '''PascalABC.NET''' для работы простейшим оконными приложениями без дизайнера форм. Основан на устаревшей технологии '''Windows Forms'''. |
||
{{Внимание|Данный модуль является специфическим для '''PascalABC.NET''' и не поддерживается другими диалектами '''Pascal''' и остальными языками.}}{{Внимание|В настоящее время '''рекомендуется''' использовать технологию [https://www.wpf-tutorial.com/ '''WPF'''] для создания оконных приложений под '''Windows'''. Кроссплатформенным аналогом является [https://avaloniaui.net/ '''Avalonia UI''']. Однако, данные технологии '''не поддерживаются''' в полной мере (например, для '''WPF''' отсутствует дизайнер форм и возможность писать на '''XAML''' из IDE) в '''PascalABC.NET'''. Для их использования рекомендуется применять такие среды разработки, как [https://visualstudio.microsoft.com/downloads/ '''Visual Studio'''] и [https://www.jetbrains.com/rider/download/ '''Rider'''].}} |
{{Внимание|Данный модуль является специфическим для '''PascalABC.NET''' и не поддерживается другими диалектами '''Pascal''' и остальными языками.}}{{Внимание|В настоящее время '''рекомендуется''' использовать технологию [https://www.wpf-tutorial.com/ '''WPF'''] для создания оконных приложений под '''Windows'''. Кроссплатформенным аналогом является [https://avaloniaui.net/ '''Avalonia UI''']. Однако, данные технологии '''не поддерживаются''' в полной мере (например, для '''WPF''' отсутствует дизайнер форм и возможность писать на '''XAML''' из IDE) в '''PascalABC.NET'''. Для их использования рекомендуется применять такие среды разработки, как [https://visualstudio.microsoft.com/downloads/ '''Visual Studio'''] и [https://www.jetbrains.com/rider/download/ '''Rider'''].}} |
||
Строка 5: | Строка 5: | ||
=Основные классы= |
=Основные классы= |
||
FormsABC содержит следующие классы элементов управления формы: |
'''FormsABC''' содержит следующие классы элементов управления формы: |
||
# '''Button''' (кнопка) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.button?view=netcore-3.1 аналог в Windows Forms]] |
# '''Button''' (кнопка) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.button?view=netcore-3.1 аналог в '''Windows Forms''']] |
||
# '''CheckBox''' (флажок) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.checkbox?view=netcore-3.1 аналог в Windows Forms]] |
# '''CheckBox''' (флажок) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.checkbox?view=netcore-3.1 аналог в '''Windows Forms''']] |
||
# '''RadioButton''' (радио-кнопка) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.radiobutton?view=netcore-3.1 аналог в Windows Forms]] |
# '''RadioButton''' (радио-кнопка) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.radiobutton?view=netcore-3.1 аналог в '''Windows Forms''']] |
||
# '''IntegerField''' (поле ввода целых значений) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.textbox?view=netcore-3.1 аналог в Windows Forms]] |
# '''IntegerField''' (поле ввода целых значений) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.textbox?view=netcore-3.1 аналог в '''Windows Forms''']] |
||
# '''RealField''' (поле ввода вещественных значений) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.textbox?view=netcore-3.1 аналог в Windows Forms]] |
# '''RealField''' (поле ввода вещественных значений) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.textbox?view=netcore-3.1 аналог в '''Windows Forms''']] |
||
# '''Field''' (поле ввода строк) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.textbox?view=netcore-3.1 аналог в Windows Forms]] |
# '''Field''' (поле ввода строк) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.textbox?view=netcore-3.1 аналог в '''Windows Forms''']] |
||
# '''TextBox''' (многострочное текстовое поле) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.textbox?view=netcore-3.1 аналог в Windows Forms]] |
# '''TextBox''' (многострочное текстовое поле) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.textbox?view=netcore-3.1 аналог в '''Windows Forms''']] |
||
# '''TrackBar''' (ползунок) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.trackbar?view=netcore-3.1 аналог в Windows Forms]] |
# '''TrackBar''' (ползунок) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.trackbar?view=netcore-3.1 аналог в '''Windows Forms''']] |
||
# '''TextLabel''' (метка) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.label?view=netcore-3.1 аналог в Windows Forms]] |
# '''TextLabel''' (метка) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.label?view=netcore-3.1 аналог в '''Windows Forms''']] |
||
# '''ListBox''' (список) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.listbox?view=netcore-3.1 аналог в Windows Forms]] |
# '''ListBox''' (список) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.listbox?view=netcore-3.1 аналог в '''Windows Forms''']] |
||
# '''ComboBox''' (разворачивающийся список) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.combobox?view=netcore-3.1 аналог в Windows Forms]] |
# '''ComboBox''' (разворачивающийся список) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.combobox?view=netcore-3.1 аналог в '''Windows Forms''']] |
||
==Button== |
==Button== |
||
Button (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 Object]) - класс кнопки. Для ее создания пишите: |
'''Button''' (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 '''Object''']) - класс кнопки. Для ее создания пишите: |
||
<syntaxhighlight lang="pascal">new Button({text});</syntaxhighlight> |
<syntaxhighlight lang="pascal">new Button({text});</syntaxhighlight> |
||
, заменив '''{text}''' на текст на кнопке. |
, заменив '''{text}''' на текст на кнопке. |
||
Строка 29: | Строка 29: | ||
==CheckBox== |
==CheckBox== |
||
'''CheckBox''' (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 '''Object''']) - класс флажка. Для его создания пишите: |
|||
<syntaxhighlight lang="pascal">new CheckBox({text});</syntaxhighlight> |
<syntaxhighlight lang="pascal">new CheckBox({text});</syntaxhighlight> |
||
, заменив '''{text}''' на текст, относящийся к флажку. |
, заменив '''{text}''' на текст, относящийся к флажку. |
||
Строка 43: | Строка 43: | ||
==RadioButton== |
==RadioButton== |
||
RadioButton (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 Object]) - класс радио-кнопки. Для её создания пишите: |
'''RadioButton''' (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 '''Object''']) - класс радио-кнопки. Для её создания пишите: |
||
<syntaxhighlight lang="pascal">new RadioButton({text});</syntaxhighlight> |
<syntaxhighlight lang="pascal">new RadioButton({text});</syntaxhighlight> |
||
, заменив '''{text}''' на текст, относящийся к радио-кнопке. |
, заменив '''{text}''' на текст, относящийся к радио-кнопке. |
||
Строка 57: | Строка 57: | ||
==IntegerField== |
==IntegerField== |
||
IntegerField (наследуется от [[#Field|Field]]) - класс однострочного поля ввода для целых чисел. Для его создания пишите: |
'''IntegerField''' (наследуется от [[#Field|'''Field''']]) - класс однострочного поля ввода для целых чисел. Для его создания пишите: |
||
<syntaxhighlight lang="pascal">new IntegerField({text}, {width});</syntaxhighlight> |
<syntaxhighlight lang="pascal">new IntegerField({text}, {width});</syntaxhighlight> |
||
, заменив '''{text}''' на текст, относящийся к полю и '''{width}''' на его ширину. |
, заменив '''{text}''' на текст, относящийся к полю и '''{width}''' на его ширину. |
||
Строка 78: | Строка 78: | ||
==RealField== |
==RealField== |
||
RealField (наследуется от [[#Field|Field]]) - класс однострочного поля ввода для вещественных чисел. Для его создания пишите: |
'''RealField''' (наследуется от [[#Field|'''Field''']]) - класс однострочного поля ввода для вещественных чисел. Для его создания пишите: |
||
<syntaxhighlight lang="pascal">new RealField({text}, {width});</syntaxhighlight> |
<syntaxhighlight lang="pascal">new RealField({text}, {width});</syntaxhighlight> |
||
, заменив '''{text}''' на текст, относящийся к полю и '''{width}''' на его ширину. |
, заменив '''{text}''' на текст, относящийся к полю и '''{width}''' на его ширину. |
||
Строка 100: | Строка 100: | ||
==Field== |
==Field== |
||
Field (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 Object]) - класс однострочного поля ввода для строк. Для его создания пишите: |
'''Field''' (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 '''Object''']) - класс однострочного поля ввода для строк. Для его создания пишите: |
||
<syntaxhighlight lang="pascal">new Field({text}, {width});</syntaxhighlight> |
<syntaxhighlight lang="pascal">new Field({text}, {width});</syntaxhighlight> |
||
, заменив '''{text}''' на текст, относящийся к полю и '''{width}''' на его ширину. |
, заменив '''{text}''' на текст, относящийся к полю и '''{width}''' на его ширину. |
||
Строка 120: | Строка 120: | ||
==TextBox== |
==TextBox== |
||
TextBox (наследуется от BaseDockControl) - класс многострочного поля ввода для строк. Для его создания пишите: |
'''TextBox''' (наследуется от '''BaseDockControl''') - класс многострочного поля ввода для строк. Для его создания пишите: |
||
<syntaxhighlight lang="pascal">new TextBox();</syntaxhighlight> |
<syntaxhighlight lang="pascal">new TextBox();</syntaxhighlight> |
||
Строка 151: | Строка 151: | ||
==TrackBar== |
==TrackBar== |
||
TrackBar (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 Object]) - класс ползунка. Для его создания пишите: |
'''TrackBar''' (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 '''Object''']) - класс ползунка. Для его создания пишите: |
||
<syntaxhighlight lang="pascal">new TrackBar();</syntaxhighlight> |
<syntaxhighlight lang="pascal">new TrackBar();</syntaxhighlight> |
||
Строка 174: | Строка 174: | ||
==TextLabel== |
==TextLabel== |
||
TextLabel (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 Object]) - класс метки. Для её создания пишите: |
'''TextLabel''' (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 '''Object''']) - класс метки. Для её создания пишите: |
||
<syntaxhighlight lang="pascal">new TextLabel({text});</syntaxhighlight> |
<syntaxhighlight lang="pascal">new TextLabel({text});</syntaxhighlight> |
||
, заменив '''{text}''' на текст метки. |
, заменив '''{text}''' на текст метки. |
||
==ListBox== |
==ListBox== |
||
ListBox (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 Object]) - класс списка. Для его создания пишите: |
'''ListBox''' (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 '''Object''']) - класс списка. Для его создания пишите: |
||
<syntaxhighlight lang="pascal">new ListBox();</syntaxhighlight> |
<syntaxhighlight lang="pascal">new ListBox();</syntaxhighlight> |
||
Строка 212: | Строка 212: | ||
==ComboBox== |
==ComboBox== |
||
ComboBox (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 Object]) - класс списка. Для его создания пишите: |
'''ComboBox''' (наследуется от [https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1 '''Object''']) - класс списка. Для его создания пишите: |
||
<syntaxhighlight lang="pascal">new ComboBox();</syntaxhighlight> |
<syntaxhighlight lang="pascal">new ComboBox();</syntaxhighlight> |
||
Строка 261: | Строка 261: | ||
=Свойства формы= |
=Свойства формы= |
||
Настраивать главную форму можно через глобальную переменную mainForm. |
Настраивать главную форму можно через глобальную переменную '''mainForm'''. |
||
{| class="wikitable sortable" |
{| class="wikitable sortable" |
Версия от 10:32, 17 июля 2020
FormsABC - учебный модуль PascalABC.NET для работы простейшим оконными приложениями без дизайнера форм. Основан на устаревшей технологии Windows Forms.
Внимание! Данный модуль является специфическим для PascalABC.NET и не поддерживается другими диалектами Pascal и остальными языками. |
Внимание! В настоящее время рекомендуется использовать технологию WPF для создания оконных приложений под Windows. Кроссплатформенным аналогом является Avalonia UI. Однако, данные технологии не поддерживаются в полной мере (например, для WPF отсутствует дизайнер форм и возможность писать на XAML из IDE) в PascalABC.NET. Для их использования рекомендуется применять такие среды разработки, как Visual Studio и Rider. |
Основные классы
FormsABC содержит следующие классы элементов управления формы:
- Button (кнопка) [аналог в Windows Forms]
- CheckBox (флажок) [аналог в Windows Forms]
- RadioButton (радио-кнопка) [аналог в Windows Forms]
- IntegerField (поле ввода целых значений) [аналог в Windows Forms]
- RealField (поле ввода вещественных значений) [аналог в Windows Forms]
- Field (поле ввода строк) [аналог в Windows Forms]
- TextBox (многострочное текстовое поле) [аналог в Windows Forms]
- TrackBar (ползунок) [аналог в Windows Forms]
- TextLabel (метка) [аналог в Windows Forms]
- ListBox (список) [аналог в Windows Forms]
- ComboBox (разворачивающийся список) [аналог в Windows Forms]
Button
Button (наследуется от Object) - класс кнопки. Для ее создания пишите:
new Button({text});
, заменив {text} на текст на кнопке.
Событие | Значение |
---|---|
Click | Хранит ссылку на процедуру, которая выполняется при нажатии на кнопку. Для установки его значения используйте +=. |
CheckBox
CheckBox (наследуется от Object) - класс флажка. Для его создания пишите:
new CheckBox({text});
, заменив {text} на текст, относящийся к флажку.
Свойство | Значение |
---|---|
Checked | Хранит значение true или false, указывающее установлен ли флажок.
|
RadioButton
RadioButton (наследуется от Object) - класс радио-кнопки. Для её создания пишите:
new RadioButton({text});
, заменив {text} на текст, относящийся к радио-кнопке.
Свойство | Значение |
---|---|
Checked | Хранит значение true или false, указывающее выбрана ли радио-кнопка.
|
IntegerField
IntegerField (наследуется от Field) - класс однострочного поля ввода для целых чисел. Для его создания пишите:
new IntegerField({text}, {width});
, заменив {text} на текст, относящийся к полю и {width} на его ширину.
Свойство | Значение |
---|---|
FieldWidth | Ширина поля. |
Text | Текст, отображаемый над полем. |
Value | Число, находящееся в поле. |
Событие | Описание |
---|---|
TextChanged | Хранит ссылку на процедуру, которая выполняется при смене значения поля. Для установки его значения используйте вместо +=. |
RealField
RealField (наследуется от Field) - класс однострочного поля ввода для вещественных чисел. Для его создания пишите:
new RealField({text}, {width});
, заменив {text} на текст, относящийся к полю и {width} на его ширину.
Свойство | Значение |
---|---|
FieldWidth | Ширина поля. |
Text | Текст, отображаемый над полем. |
Value | Число, находящееся в поле. |
Событие | Описание |
---|---|
TextChanged | Хранит ссылку на процедуру, которая выполняется при смене значения поля. Для установки его значения используйте +=. |
Field
Field (наследуется от Object) - класс однострочного поля ввода для строк. Для его создания пишите:
new Field({text}, {width});
, заменив {text} на текст, относящийся к полю и {width} на его ширину.
Свойство | Значение |
---|---|
FieldWidth | Ширина поля. |
Text | Строка, который содержится в поле ввода. |
Событие | Описание |
---|---|
TextChanged | Хранит ссылку на процедуру, которая выполняется при смене значения поля. Для установки его значения используйте +=. |
TextBox
TextBox (наследуется от BaseDockControl) - класс многострочного поля ввода для строк. Для его создания пишите:
new TextBox();
Свойство | Значение |
---|---|
Width | Ширина поля. |
Height | Высота поля. |
Text | Строка, которая содержится в поле ввода. |
Метод | Описание |
---|---|
Undo() | Отменяет последнее изменение. |
Redo() | Отменяет отмену последнего изменения. |
Cut() | Вырезает выделенное. |
Copy() | Копирует выделенное. |
Paste() | Вставляет текст из буфера обмена в местоположение курсора. |
AddLine(t) | Добавляет текст t новой строкой. |
TrackBar
TrackBar (наследуется от Object) - класс ползунка. Для его создания пишите:
new TrackBar();
Свойство | Значение |
---|---|
Frequency | Расстояние через которое расставляются деления на ползунке (в пикселях). |
Minimum | Минимальное значение ползунка. |
Maximum | Максимальное значение ползунка. |
Value | Значение ползунка. |
Событие | Описание |
---|---|
ValueChanged | Хранит ссылку на процедуру, которая выполняется при смене значения ползунка. Для установки его значения используйте +=. |
TextLabel
TextLabel (наследуется от Object) - класс метки. Для её создания пишите:
new TextLabel({text});
, заменив {text} на текст метки.
ListBox
ListBox (наследуется от Object) - класс списка. Для его создания пишите:
new ListBox();
Свойство | Значение |
---|---|
Count | Количество элементов в списке. |
SelectedIndex | Индекс выбранного элемента списка. |
SelectedItem | Выбранный элемент списка. |
Items.Item[k] | K-ый элемент списка. |
Событие | Описание |
---|---|
Click | Хранит ссылку на процедуру, которая выполнится при щелчке по списку. |
SelectedIndexChanged | Хранит ссылку на процедуру, которая выполнится при смене выбранного элемента списка. |
Метод | Описание |
---|---|
Items.Add(t) | Добавляет в список элемент с текстом t на нем. |
Items.Clear() | Удаляет все элементы списка. |
ComboBox
ComboBox (наследуется от Object) - класс списка. Для его создания пишите:
new ComboBox();
Свойство | Значение |
---|---|
Width | Ширина списка. |
Count | Количество элементов в списке. |
SelectedIndex | Индекс выбранного элемента списка. |
SelectedItem | Выбранный элемент списка. |
Items.Item[k] | K-ый элемент списка. |
Событие | Описание |
---|---|
Click | Хранит ссылку на процедуру, которая выполнится при щелчке по списку. |
SelectedIndexChanged | Хранит ссылку на процедуру, которая выполнится при смене выбранного элемента списка. |
Функция | Описание |
---|---|
Items.Add(t) | Добавляет в список элемент с текстом t на нем. |
Items.Clear() | Удаляет все элементы списка. |
Размещение элементов управления формы
Изначально элементы управления формы размещаются по порядку - каждый следующий позиционируется справа от предыдущего.
Функция | Значение |
---|---|
LineBreak | Переходит на новую строку. |
EmptyLine | Пропускает n пикселей по вертикали. Следующий элемент управления будет располагаться через n пикселей по вертикали от предыдущего. |
EmptySpace | Пропускает n пикселей по горизонтали. Следующий элемент управления будет располагаться через n пикселей по горизонтали от предыдущего. |
Свойства формы
Настраивать главную форму можно через глобальную переменную mainForm.
Свойство | Значение |
---|---|
Title | Заголовок окна. |
Метод | Описание |
---|---|
mainForm.SetSize(x, y) | Устанавливает размер формы, равный xxy пикселей. |
mainForm.CenterOnScreen() | Центрирует окно относительно центра экрана. |
Примеры
Простой калькулятор
uses FormsABC;
const
Sum = '+';
Difference = '-';
Multiplication = '*';
Division = '/';
begin
mainForm.Width := 350;
mainForm.Height := 120;
mainForm.Title := 'Calculator';
mainForm.IsFixedSize := true;
var first := new IntegerField('First:', 100);
var second := new IntegerField('Second:', 100);
var result := new IntegerField('Result:', 100);
LineBreak();
var actions := new ComboBox();
actions.Items.Add(Sum);
actions.Items.Add(Difference);
actions.Items.Add(Multiplication);
actions.Items.Add(Division);
actions.SelectedIndex := 0;
var calculate := new Button('Calculate');
calculate.Click += () ->
case actions.SelectedValue.ToString()[1] of
Sum: result.Value := first.Value + second.Value;
Difference: result.Value := first.Value - second.Value;
Multiplication: result.Value := first.Value * second.Value;
Division: result.Value := first.Value div second.Value;
end;
end.
Демонтрация стека
uses FormsABC;
const
Push = 'Push';
Pop = 'Pop';
Peek = 'Peek';
begin
mainForm.Width := 350;
mainForm.Height := 120;
mainForm.Title := 'Stack demostration';
mainForm.IsFixedSize := true;
var source := new Stack<integer>();
var item := new IntegerField('Item:', 100);
var result := new Field('Result:', 220);
LineBreak();
var actions := new ComboBox();
actions.Items.Add(Push);
actions.Items.Add(Pop);
actions.Items.Add(Peek);
actions.SelectedIndex := 0;
var show := new Button('Show');
show.Click += () ->
begin
var stackToString: Func<Stack<integer>, string> := from ->
begin
result := string.Empty;
foreach var item in from do
result += $'{item} ';
end;
case actions.SelectedValue.ToString() of
Push:
source.Push(item.Value);
Pop:
if source.Count > 0 then
source.Pop();
Peek:
if source.Count > 0 then
source.Peek();
end;
result.Text := stackToString(source);
end;
end.