Введение в FormsABC: различия между версиями
Нет описания правки Метка: редактор вики-текста 2017 |
Метка: редактор вики-текста 2017 |
||
Строка 292: | Строка 292: | ||
=Примеры= |
=Примеры= |
||
== Простой калькулятор == |
== Простой калькулятор == |
||
<syntaxhighlight lang="pascal">uses FormsABC; |
<syntaxhighlight lang="pascal">uses FormsABC; |
||
Строка 325: | Строка 326: | ||
Difference: result.Value := first.Value - second.Value; |
Difference: result.Value := first.Value - second.Value; |
||
Multiplication: result.Value := first.Value * second.Value; |
Multiplication: result.Value := first.Value * second.Value; |
||
Division: |
Division: |
||
if second.Value <> 0 then |
|||
result.Value := first.Value div second.Value; |
|||
end; |
end; |
||
end.</syntaxhighlight> |
end.</syntaxhighlight> |
Версия от 11:37, 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:
if second.Value <> 0 then
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.