Введение в FormsABC
FormsABC - учебный модуль PascalABC.NET для работы с простейшими оконными приложениями без дизайнера форм. Основан на устаревшей технологии Windows Forms.
- Данный модуль является устаревшим (может быть в будущем исключен из среды) и специфическим для PascalABC.NET и не поддерживается другими диалектами Pascal и остальными языками. Современный аналог - Controls.
- Программы с использованием FormsABC рекомендуется запускать без связи с оболочкой.
![]() |
Внимание! В настоящее время рекомендуется использовать технологию MAUI для создания кроссплатформенных оконных приложений. Однако, данная технология не поддерживается в 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]
- MainMenu (главное меню) [аналог в Windows Forms]
Button Править
Button (наследуется от Object) - класс кнопки. Для ее создания пишите:
new Button({text});
, где:
- {text} - текст на кнопке
Свойство | Значение |
---|---|
Text | Текст на кнопке. |
Width | Ширина кнопки. |
Событие | Значение |
---|---|
Click | Ссылка на процедуру, которая выполняется при нажатии на кнопку. Для установки его значения используйте +=. |
CheckBox Править
CheckBox (наследуется от Object) - класс флажка. Для его создания пишите:
new CheckBox({text});
, где:
- {text} - текст, относящийся к флажку
Свойство | Значение |
---|---|
Checked | Значение, указывающее установлен ли флажок.
|
RadioButton Править
RadioButton (наследуется от Object) - класс радио-кнопки. Для её создания пишите:
new RadioButton({text});
, где:
- {text} - текст, относящийся к радио-кнопке
Свойство | Значение |
---|---|
Checked | Значение, указывающее выбрана ли радио-кнопка.
|
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({text}) | Добавляет текст {text} новой строкой. |
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() | Удаляет все элементы списка. |
MainMenu Править
MainMenu (наследуется от Object) - класс главного меню. Для его создания пишите:
new MainMenu();
Свойство | Значение |
---|---|
Item | Пункт меню. |
Метод | Описание |
---|---|
Add({items}) | Добавляет перечисленные через запятую пункты меню. |
Размещение элементов управления формы Править
Изначально элементы управления формы размещаются по порядку - каждый следующий позиционируется справа от предыдущего.
Функция | Значение |
---|---|
LineBreak | Переходит на новую строку. |
EmptyLine | Пропускает n пикселей по вертикали. Следующий элемент управления будет располагаться через n пикселей по вертикали от предыдущего. |
EmptySpace | Пропускает n пикселей по горизонтали. Следующий элемент управления будет располагаться через n пикселей по горизонтали от предыдущего. |
Свойства формы Править
Настраивать главную форму можно через глобальную переменную mainForm.
Свойство | Значение |
---|---|
Title | Заголовок окна. |
Width | Ширина окна. |
Height | Высота окна. |
Left | Отступ окна от верхнего края экрана в пикселях. |
Top | Отступ окна от левого края экрана в пикселях. |
IsFixedSize | Значение, указывающее имеет ли окно фиксированный размер. |
Метод | Описание |
---|---|
mainForm.SetSize(x, y) | Устанавливает размер формы, равный xxy пикселей. |
mainForm.CenterOnScreen() | Центрирует окно относительно центра экрана. |
Примеры Править
Простой калькулятор Править
uses System;
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 += () ->
try
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;
except on Exception do
end;
end.
Max-Min калькулятор Править
uses System;
uses FormsABC;
const
Max = 'Max';
Min = 'Min';
Average = 'Average';
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(Max);
actions.Items.Add(Min);
actions.Items.Add(Average);
actions.SelectedIndex := 0;
var calculate := new Button('Calculate');
calculate.Click += () ->
try
case actions.SelectedValue.ToString() of
Max: result.Value := Math.Max(first.Value, second.Value);
Min: result.Value := Math.Min(first.Value, second.Value);
Average: result.Value := (first.Value + second.Value) div 2;
end;
except on Exception do
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.
Текстовый редактор Править
uses System;
uses System.IO;
uses FormsABC;
begin
mainForm.Width := 640;
mainForm.Height := 400;
mainForm.Title := 'Text Editor';
var menu := new MainMenu();
parentControl := mainForm;
var editor := new TextBox();
editor.Dock := DockStyle.Fill;
menu.Add('File', 'Edit');
menu[0].Add('Save', procedure (item) ->
begin
var dialog := new SaveFileDialog();
if dialog.ShowDialog() = DialogResult.OK then
&File.WriteAllLines(dialog.FileName, editor.Text.Split(|'\n'|, StringSplitOptions.RemoveEmptyEntries));
end);
menu[0].Add('Open', procedure (item) ->
begin
var dialog := new OpenFileDialog();
if dialog.ShowDialog() = DialogResult.OK then
begin
editor.Text := string.Empty;
foreach var line in &File.ReadAllLines(dialog.FileName) do
editor.Text += $'{line}{Environment.NewLine}';
end;
end);
menu[0].Add('Exit', procedure (item) -> mainForm.Close());
menu[1].Add('Undo', procedure (item) -> editor.Undo());
menu[1].Add('Redo', procedure (item) -> editor.Redo());
menu[1].Add('Copy', procedure (item) -> editor.Copy());
menu[1].Add('Cut', procedure (item) -> editor.Cut());
menu[1].Add('Clear', procedure (item) -> editor.Text := string.Empty);
end.