Windows forms pascalabc net

  • Минимальная программа на PascalABC.NET, создающая форму
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'} 
uses System, System.Windows.Forms;
 
var f : Form;
 
begin
  f := new Form;
  Application.Run(f);
end.
  • Как добавить кнопку на форму и вывести по ее нажатии сообщение?
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'} 
  
uses System, System.Windows.Forms;
 
var f : Form;
    btn : Button;
 
procedure ButtonClick(sender: object; e: EventArgs);
begin
  MessageBox.Show('Hello world!');
end;    
 
begin
  f := new Form;
  btn := new Button;
  btn.Text := 'Click me';
  btn.Click += ButtonClick;
  f.Controls.Add(btn);
  Application.Run(f);
end.

Материал из Викиучебника — открытых книг для открытого мира

FormsABC — учебный модуль PascalABC.NET для работы с простейшими оконными приложениями без дизайнера форм. Основан на устаревшей технологии Windows Forms.

  • Данный модуль является устаревшим (может быть в будущем исключен из среды) и специфическим для PascalABC.NET и не поддерживается другими диалектами Pascal и остальными языками. Современный аналог — Controls.
  • Программы с использованием FormsABC рекомендуется запускать без связи с оболочкой.

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 (наследуется от Object) — класс кнопки. Для ее создания пишите:

, где:

  • {text} — текст на кнопке
Свойство Значение
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) — класс метки. Для её создания пишите:

, где:

  • {text} — текст метки

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) Устанавливает размер формы, равный 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.
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.

1. Какие элементы среды PascalABC отображаются на экране после создания проекта?
2. Какие файлы входят в состав приложения, создаваемого в PascalABC?
3. Для чего предназначена форма?
4. Для чего используют инспектор объектов?
5. Какие свойства форм вы можете назвать?
6. Как создать обработчик события?

Упражнения

1. Внесите изменения в проект из примера 2.11 так, чтобы цвет формы менялся случайно. Изменять цвет можно с помощью функции FromArgb. У этой функции четыре параметра: прозрачность (альфа-канал, интенсивность красного цвета, интенсивность зеленого цвета, интенсивность синего цвета). Генерация случайных чисел происходит следующим образом. Сначала создается переменная, являющаяся объектом класса Random (команда var rnd: Random := new Random();). Каждое новое случай ное число можно получить, обращаясь к методу next(x), где x задает полуинтервал [0, x). Команда смены цвета будет выглядеть следующим образом:

BackColor := Color.FromArgb (255, rnd.next(256), rnd.next(256), rnd.next(256));

2. Создайте проект, в котором при двойном клике мыши по форме ее размеры бу­дут увеличиваться на 5.

  1. Создайте и сохраните в новой папке проект.
  2. Измените свойство Text формы на Упражнение 2.
  3. Создайте обработчик события мыши DblClick.
  4. Для изменения ширины и высоты формы можно воспользоваться командами:

Width := Width + 5;

Height := Height + 5;

  1. Сохраните изменения в проекте.
  2. Запустите проект и проверьте его работу.

3. Создайте проект, в котором цвет формы будет меняться при наведении на нее мыши, например с желтого на зеленый.

  1. Измените свойство Text у формы на Упражнение 3.
  2. Установите желтый цвет формы.
  3. Создайте обработчики для двух событий мыши: MouseEnter и MouseLeave.
  4. В коде события MouseEnter установите зеленый (Green) цвет формы, а коде события MouseLeave — желтый (Yellow).
  5. Сохраните изменения в проекте.
  6. Запустите проект и проверьте его работу.

Проверь себя 

1. Разработка приложения Windows Forms на PascalABC для расчета стоимости товара и использование структуры алгоритма расчета на

странице сайта
организации
Выполнил ученик 10А класса
ГБОУ СОШ №72
Герасимов Андрей
Санкт-Петербург, 2018 г.

2. Цель проекта:

Изучить принципы разработки приложения Windows Forms и создать
приложение, имеющее конкретную практическую направленность.
Приложение должно выполнять функцию калькулятора для расчета
стоимости товара. В частности стоимость заказа кухонного фартука из
стекла с дополнительными видами работ.
Данное приложение имеет реальную практическую ценность, так как
часто используется организациями, магазинами для того, чтобы
сориентировать покупателя о его затратах.

3. Задачи проекта:

Создать приложение, выполняющее роль калькулятора для расчета
стоимости товара. Для этого:
Изучить создание приложений Wimdows Forms на PascalABC.Net
Ознакомиться с основными элементами управления Form (Форма),
Button (Кнопка), RadioButton (РадиоКнопка), CheckBox (Флажок), TextBox
(Текстовое поле), Label (Метка), PictureBox (Картинка)
Провести анализ задачи, составить математическую модель,
реализовать модель в среде программирования

4. Входные данные:

Стекло бывает бесцветное и осветленное. От этого зависит стоимость. 1м.кв.
бесцветного стекла стоит, например, 4000 руб. 1 м.кв. осветленного стекла стоит
5000 руб.
Пользователь вводит длину (a) и ширину (b) необходимого ему стекла в см. Задача
приложения перевести эти значения в метры и вычислить итоговую площадь S.
Если необходим замер, то к общей стоимости price прибавляется 1000 руб.
Если необходима доставка, то к общей стоимости price прибавляется 1500 руб.
Если необходима установка стекла, то к общей стоимости price прибавляется 1000 х
S руб., т.к. установка зависит от общей площади стекла.
Если необходим дизайн изображения, то к общей стоимости price прибавляется 500
руб.
Затем полученное значение price надо вывести в текстовое поле, в котором должна
отражаться итоговая сумма.

5. Макет формы приложения

6. Фрагмент кода программы

7. Разработанное приложение

Программа скомпилирована и
работает как отдельное независимое
приложение

8. Web-приложение на сайте

http://fartukvdom.ru/index.php/raschet

9. Итоги проекта

Изучено создание приложений Wimdows Forms на
PascalABC.Net
Ознакомились с основными элементами управления Form
(Форма), Button (Кнопка), RadioButton (РадиоКнопка),
CheckBox (Флажок), TextBox (Текстовое поле), Label (Метка),
PictureBox (Картинка)
Проведен анализ задачи, составлена математическая
модель и реализована в среде программирования
Создано приложение, выполняющее роль калькулятора для
расчета стоимости товара

10. Спасибо за внимание!

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Удалить пользователя майкрософт в windows 10
  • Что такое цифровое аудио s pdif windows 10
  • Где хранится windows на ноутбуке
  • Доклад на тему операционная система windows
  • Как сравнить два реестра windows