Где найти самоучитель по написанию в модуле FormsABC - PascalABC.NET
Формулировка задачи:
Где найти самоучитель по написанию в модуле FormsABC
Решение задачи: «Где найти самоучитель по написанию в модуле FormsABC»
textual
Листинг программы
- #apptype 'windows'//Тип подключаемой системы
- #reference 'System.Windows.Forms.dll'//Файл-библиотека
- uses
- System, System.Windows.Forms;//Типы из библоитек
- var
- _form: Form;//Переменная формы
- _textbox: TextBox;//Переменная окна ввода
- AddHead, RemHead: Button;//Переменные для кнопок
- arr: array[1..1000] of TextBox;//Массив обьектов, графически представляющих этек
- n: integer := 0;//Количество текущих обьектов стека на экране
- procedure _AddStart(sender: object; e: EventArgs);//Процедура добавления обьекта в начало стека
- begin
- _textbox.Focus;//Установка мигающего курсора в окно вводда
- if n = 36 then EXIT;//Если превышено число обьектов на экране, то процедура прерывается
- for var i := n downto 1 do//Циклическое смещение обьектов вправо
- begin
- arr[i + 1] := arr[i];//Смещение в массиве
- arr[i + 1].Left := arr[i + 1].Left + 30;//Смещение на экране
- end;
- if n >= 18 then//Если не умещается на одну строку, то обьект, создающий конфликт элемент перемещается вручную вниз
- begin
- arr[19].Top := 70;//Отступ сверху
- arr[19].Left := 30;//Отступ слева
- end;
- arr[1] := new System.Windows.Forms.TextBox;//Выделение памяти под ноый обьект
- arr[1].Text := _textbox.Text.ToString;//Текст из окна ввода копируется в окошко текста, представляющего ячейку стека
- arr[1].Enabled := false;//Запрещаем писать в окошке текста, представляющего ячейку стека
- arr[1].Width := 20;//Ширина обьекта
- arr[1].Top := 20;//Отступ сверху
- arr[1].Left := 30;//Отступ слева
- _form.Controls.Add(arr[1]);//Добавляем его на форму
- _textbox.Text := '';//Очищаем окошко ввода
- Inc(n);//Увеличиваем счетчик кол-ва элементов стека
- end;
- procedure _RemHead(sender: object; e: EventArgs);//Процедура удаления обьекта из начала стека
- begin
- if n = 0 then EXIT;//Если элементов нет, то процедура прерывается
- arr[1].Dispose;//Удаляем элемент из головы стека и с формы
- Dec(n);//Уменьшаем счетчик кол-ва элементов стека
- for var i := 1 to n do//Смещаем все обьекты влево на 1 позицию
- begin
- arr[i] := arr[i + 1];//Смещаем в массиве
- arr[i].Left := arr[i].Left - 30;//Смещаем на экране
- end;
- if n >= 18 then //Если имело место быть переполнение, то откатываем его "ручным" спомобом
- begin
- arr[18].Top := 20;//Отступ сверху
- arr[18].Left := 30 * 18;//Отступ слева
- end;
- arr[n + 1] := nil;//Очищаем элемент, следующий за последним элементом, так как имело место смещение влево
- end;
- begin
- //Создание формы
- _form := new Form();//Выделение памяти
- _form.Width := 600;//Ширина
- _form.Height := 200;//Высота
- //Создание окна ввода контента
- _textbox := new TextBox();//Выделение памяти
- _textbox.Left := 0;//Отступ слева
- _textbox.Top := 138;//Отступ сверху
- _textbox.Width := 150;//Ширина
- //Создание кнопки для управления добавлением элементов в стека
- AddHead := new System.Windows.Forms.Button();//Выделение памяти
- AddHead.Left := 151;//Отступ слева
- AddHead.Top := 138;//Отступ сверху
- AddHead.Text := 'Add Head';//Надпись на кнопке
- //Создание кнопки для управления удалением элементов из стека
- RemHead := new System.Windows.Forms.Button();//Выделение памяти
- RemHead.Left := 225;//Отступ слева
- RemHead.Top := 138;//Отступ сверху
- RemHead.Text := 'Rem Head';//Надпись на кнопке
- //Программирование обработчиков событий нажатия на кнопки
- AddHead.Click += _AddStart;//Добавление в стек
- RemHead.Click += _RemHead; //Удаление из стека
- //Добавление на форму объектов, описанных выше
- _form.Controls.Add(_textbox);//Добавление на форму окна ввода
- _form.Controls.Add(AddHead);//Добавление на форму кнопки добавления
- _form.Controls.Add(RemHead);//Добавление на форму кнопки удаления
- _form.Controls.Add(arr[1]);//Добавление на форму не помню чего.
- Application.Run(_form);//Запуск формы
- end.
Объяснение кода листинга программы
- Объявление переменных и кнопок:
- _form: Form;
- _textbox: TextBox;
- AddHead, RemHead: Button;
- arr: array[1..1000] of TextBox;
- n: integer := 0;
- Процедура добавления элемента в начало стека (_AddStart):
- Перемещение фокуса на окно ввода.
- Проверка, не превышает ли количество элементов 36.
- Циклическое смещение элементов вправо.
- Если на экране не умещается 18 элементов, то элемент, создающий конфликт, перемещается вниз вручную.
- Выделение памяти под новый элемент.
- Копирование текста из окна ввода в новый элемент.
- Запрет записи в новый элемент.
- Установка ширины нового элемента.
- Добавление нового элемента на форму.
- Очистка окна ввода.
- Увеличение счетчика количества элементов.
- Процедура удаления элемента из начала стека (_RemHead):
- Проверка, нет ли элементов в стеке.
- Удаление элемента из головы стека и с формы.
- Уменьшение счетчика количества элементов.
- Смещение всех элементов влево на 1 позицию.
- Если было смещение влево, то откатываем его
ручным
способом. - Очистка элемента, следующего за последним элементом.
- Создание формы:
- Выделение памяти под форму.
- Установка ширины и высоты формы.
- Создание окна ввода контента:
- Выделение памяти под окно ввода.
- Установка координат окна ввода.
- Создание кнопок для управления добавлением и удалением элементов:
- Выделение памяти под кнопки.
- Установка текста на кнопках.
- Установка обработчиков событий нажатия на кнопки.
- Добавление объектов на форму:
- Добавление окна ввода, кнопок и неизвестного объекта на форму.
- Запуск формы:
- Запуск формы с помощью метода Application.Run().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д