Введение в 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]) - класс флажка. Для его создания пишите:
'''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.



Основные классы

FormsABC содержит следующие классы элементов управления формы:

  1. Button (кнопка) [аналог в Windows Forms]
  2. CheckBox (флажок) [аналог в Windows Forms]
  3. RadioButton (радио-кнопка) [аналог в Windows Forms]
  4. IntegerField (поле ввода целых значений) [аналог в Windows Forms]
  5. RealField (поле ввода вещественных значений) [аналог в Windows Forms]
  6. Field (поле ввода строк) [аналог в Windows Forms]
  7. TextBox (многострочное текстовое поле) [аналог в Windows Forms]
  8. TrackBar (ползунок) [аналог в Windows Forms]
  9. TextLabel (метка) [аналог в Windows Forms]
  10. ListBox (список) [аналог в Windows Forms]
  11. ComboBox (разворачивающийся список) [аналог в Windows Forms]

Button

Button (наследуется от Object) - класс кнопки. Для ее создания пишите:

new Button({text});

, заменив {text} на текст на кнопке.

Событие Значение
Click Хранит ссылку на процедуру, которая выполняется при нажатии на кнопку. Для установки его значения используйте +=.

CheckBox

CheckBox (наследуется от Object) - класс флажка. Для его создания пишите:

new CheckBox({text});

, заменив {text} на текст, относящийся к флажку.

Свойство Значение
Checked Хранит значение true или false, указывающее установлен ли флажок.
  • true - установлен
  • false - не установлен

RadioButton

RadioButton (наследуется от Object) - класс радио-кнопки. Для её создания пишите:

new RadioButton({text});

, заменив {text} на текст, относящийся к радио-кнопке.

Свойство Значение
Checked Хранит значение true или false, указывающее выбрана ли радио-кнопка.
  • 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.

Ссылки

Примеры