Введение в FormsABC: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Метка: редактор вики-текста 2017
Метка: редактор вики-текста 2017
Строка 17: Строка 17:
# '''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''']]
# '''MainMenu''' (главное меню) [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.menustrip?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''']) - класс кнопки. Для ее создания пишите:

Версия от 14:26, 18 июля 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]
  12. MainMenu (главное меню) [аналог в 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 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 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('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.