FormsABC - учебный модуль PascalABC.NET для работы с простейшими оконными приложениями без дизайнера форм. Основан на устаревшей технологии Windows Forms .
Данный модуль является устаревшим (может быть в будущем исключен из среды) и специфическим для PascalABC.NET и не поддерживается другими диалектами Pascal и остальными языками. Современный аналог - Controls.
Программы с использованием FormsABC рекомендуется запускать без связи с оболочкой.
Основные классы [ править ]
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 (наследуется от Object ) - класс кнопки. Для ее создания пишите:
, где:
Свойство
Значение
Text
Текст на кнопке.
Width
Ширина кнопки.
Событие
Значение
Click
Ссылка на процедуру, которая выполняется при нажатии на кнопку. Для установки его значения используйте +=.
CheckBox (наследуется от Object ) - класс флажка. Для его создания пишите:
, где:
{text} - текст, относящийся к флажку
Свойство
Значение
Checked
Значение, указывающее установлен ли флажок.
true - установлен
false - не установлен
RadioButton (наследуется от Object ) - класс радио-кнопки. Для её создания пишите:
, где:
{text} - текст, относящийся к радио-кнопке
Свойство
Значение
Checked
Значение, указывающее выбрана ли радио-кнопка.
true - выбрана
false - не выбрана
IntegerField (наследуется от Field ) - класс однострочного поля ввода для целых чисел. Для его создания пишите:
new IntegerField ( {text} , {width} ) ;
, где:
{text} - текст, относящийся к полю
{width} - ширина поля
Свойство
Значение
FieldWidth
Ширина поля.
Text
Текст, отображаемый над полем.
Value
Число, находящееся в поле.
Событие
Описание
TextChanged
Ссылка на процедуру, которая выполняется при смене значения поля. Для установки его значения используйте вместо +=.
RealField (наследуется от Field ) - класс однострочного поля ввода для вещественных чисел. Для его создания пишите:
new RealField ( {text} , {width} ) ;
, где:
{text} - текст, относящийся к полю
{width} - ширина поля
Свойство
Значение
FieldWidth
Ширина поля.
Text
Текст, отображаемый над полем.
Value
Число, находящееся в поле.
Событие
Описание
TextChanged
Ссылка на процедуру, которая выполняется при смене значения поля. Для установки его значения используйте +=.
Field (наследуется от Object ) - класс однострочного поля ввода для строк. Для его создания пишите:
new Field ( {text} , {width} ) ;
, где:
{text} - текст, относящийся к полю
{width} - ширина поля
Свойство
Значение
FieldWidth
Ширина поля.
Text
Строка, который содержится в поле ввода.
Событие
Описание
TextChanged
Ссылка на процедуру, которая выполняется при смене значения поля. Для установки его значения используйте +=.
TextBox (наследуется от BaseDockControl ) - класс многострочного поля ввода для строк. Для его создания пишите:
Свойство
Значение
Width
Ширина поля.
Height
Высота поля.
Text
Строка, которая содержится в поле ввода.
Метод
Описание
Undo()
Отменяет последнее изменение.
Redo()
Отменяет отмену последнего изменения.
Cut()
Вырезает выделенное.
Copy()
Копирует выделенное.
Paste()
Вставляет текст из буфера обмена в местоположение курсора.
AddLine({text})
Добавляет текст {text} новой строкой.
TrackBar (наследуется от Object ) - класс ползунка. Для его создания пишите:
Свойство
Значение
Frequency
Расстояние через которое расставляются деления на ползунке (в пикселях).
Minimum
Минимальное значение ползунка.
Maximum
Максимальное значение ползунка.
Value
Значение ползунка.
Событие
Описание
ValueChanged
Хранит ссылку на процедуру, которая выполняется при смене значения ползунка. Для установки его значения используйте +=.
TextLabel (наследуется от Object ) - класс метки. Для её создания пишите:
, где:
ListBox (наследуется от Object ) - класс списка. Для его создания пишите:
Свойство
Значение
Count
Количество элементов в списке.
SelectedIndex
Индекс выбранного элемента списка.
SelectedItem
Выбранный элемент списка.
Items.Item[k]
K-ый элемент списка.
Событие
Описание
Click
Хранит ссылку на процедуру, которая выполнится при щелчке по списку. Для установки его значения используйте +=.
SelectedIndexChanged
Хранит ссылку на процедуру, которая выполнится при смене выбранного элемента списка. Для установки его значения используйте +=.
Метод
Описание
Items.Add(t)
Добавляет в список элемент с текстом t на нем.
Items.Clear()
Удаляет все элементы списка.
ComboBox (наследуется от Object ) - класс списка. Для его создания пишите:
Свойство
Значение
Width
Ширина списка.
Count
Количество элементов в списке.
SelectedIndex
Индекс выбранного элемента списка.
SelectedItem
Выбранный элемент списка.
Items.Item[k]
K-ый элемент списка.
Событие
Описание
Click
Хранит ссылку на процедуру, которая выполнится при щелчке по списку. Для установки его значения используйте +=.
SelectedIndexChanged
Хранит ссылку на процедуру, которая выполнится при смене выбранного элемента списка. Для установки его значения используйте +=.
Метод
Описание
Items.Add(t)
Добавляет в список элемент с текстом t на нем.
Items.Clear()
Удаляет все элементы списка.
MainMenu (наследуется от Object ) - класс главного меню. Для его создания пишите:
Свойство
Значение
Item
Пункт меню.
Метод
Описание
Add({items})
Добавляет перечисленные через запятую пункты меню.
Размещение элементов управления формы [ править ]
Изначально элементы управления формы размещаются по порядку - каждый следующий позиционируется справа от предыдущего.
Функция
Значение
LineBreak
Переходит на новую строку.
EmptyLine
Пропускает n пикселей по вертикали. Следующий элемент управления будет располагаться через n пикселей по вертикали от предыдущего.
EmptySpace
Пропускает n пикселей по горизонтали. Следующий элемент управления будет располагаться через n пикселей по горизонтали от предыдущего.
Свойства формы [ править ]
Настраивать главную форму можно через глобальную переменную mainForm .
Свойство
Значение
Title
Заголовок окна.
Width
Ширина окна.
Height
Высота окна.
Left
Отступ окна от верхнего края экрана в пикселях.
Top
Отступ окна от левого края экрана в пикселях.
IsFixedSize
Значение, указывающее имеет ли окно фиксированный размер.
Метод
Описание
mainForm.SetSize(x, y)
Устанавливает размер формы, равный x x y пикселей.
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 .