Описание работы. Перед началом работы необходимо создать новый проект и сохранить его в отдельном каталоге Lab3 в соответствии с рекомендациями

Перед началом работы необходимо создать новый проект и сохранить его в отдельном каталоге Lab3 в соответствии с рекомендациями, приведенными в предыдущих лабораторных работах.

Наше приложение будет состоять из трех модулей. Первый модуль UnitMain.pas, соответствующий форме MainForm, предназначен для координации работ других модулей и обработки массивов. Второй модуль Listlnput.pas, соответствующий форме List Form, предназначен для ввода одномерного массива. Третий модуль Gridlnput.pas, соответствующий форме GridForm, предназначен для ввода двумерного массива. Сам же проект необходимо сохранить под именем Lab3.dpr.

Для визуализации работы с одномерным массивом можно использовать компонент класса TListBox со страницы Standard палитры компонентов. Этот визуальный компонент представляет собой стандартное окно списка Windows, позволяющее работать с отдельными элементами. К элементам списка разрешен индексный способ доступа, как это делается при работе с массивами. В списках могут храниться строковые значения в паре с некоторым целочисленным значением. В данной работе предполагается хранить в списках только строковые значения. Кроме того, элементы списка могут динамически добавляться и удаляться, что делает этот компонент удобным для отображения меняющихся данных.

Для выполнения данной работы нам понадобятся приведенные в табл. 4 свойства объектов типа TListBox, а в табл. 5-6 свойства и методы объектов типа Т Strings, используемых для представления наборов строк в Delphi, а в данном случае для списка строк объекта TListBox.

Таблица 4. Основные свойства объектов типа TListBox
Свойство Тип Комментарий
Items TStrings Содержит массив строк, появляющихся в списке. Строки пронумерованы, начиная с 0
Itemlndex Integer Номер текущего выбранного элемента в списке. Если не выбрана ни одна строка, то значение свойства равно -1
Таблица 5. Основные свойства объектов типа TStrings
Свойство Тип Комментарий
Strings [i: integer] String Массив строк с номерами 0... Count-1
Count Integer Общее количество элементов
Таблица 6. Основные методы объектов типа TStrings
Метод Комментарий
Add (s: String) Добавляет новую строку в массив строк
Clear Очищает массив (делает Count=0)

Замечание

Индексация элементов таблицы производится с помощью двух чисел - номеров колонки (столбца) и ряоа (строки). Нумерация ведется, начиная с 0.

Для визуализации работы с двумерным массивом можно использовать компонент TStringGrid со страницы Additional палитры компонентов, предназначенный для создания таблиц, в ячейках которых располагаются произвольные текстовые строки.

В табл. 7 приведены некоторые свойства компонента TStringGrid, необходимые для выполнения данной лабораторной работы.

Таблица 7. Основные свойства объектов типа TStringGrid
Свойство Тип Комментарий
Cells [ACol, ARow: Integer] String Определяет содержимое ячейки с табличными координатами (ACol, ARow)
Cols[ACol: Integer] TStrings Все строки колонки с номером ACol
Rows[ARow: Integer] TStrings Все строки ряда с номером ARow
ColCount Integer Общее количество столбцов
RowCount Integer Общее количество рядов
FixedCols Integer Количество фиксированных (заголовочных) столбцов
FixedRows Integer Количество фиксированных (заголовочных) рядов
Col Integer Номер столбца текущей ячейки
Row Integer Номер ряда текущей ячейки
Options TGridOptions Данное свойство множественного типа определяет рад дополнительных параметров таблицы. В частности, нам наиболее важны следующие:
  goEditing Разрешается редактирование ячеек таблицы
goTabs Разрешается перемещение по ячейкам с помощью клавиши Tab и комбинации Shift+Tab

Замечание

При создании формы «Ввод двумерного массива» не забудьте установить значение True для подсвойства goEditing свойства Options компонента ТSznnqGrid для разрешения редактирования в ячейках таблицы.

При создании приложения, работающего с данными неизвестной заранее размерности, желательно не ограничивать пользователя какими-то жесткими рамками в количестве элементов данных. Именно поэтому мы и будем использовать списки и таблицы, позволяющие динамически менять свои размеры. В то же время для написания процедур обработки массивов удобно использовать такие стандартные средства языка Pascal, как динамические массивы. Скорость обращения к ним значительно превосходит скорость обращения к элементам списков и ячейкам таблиц, да и памяти требуют они меньше, что также немаловажно. Поэтому в данной работе необходимо позволить пользователю ввести числовые данные визуально с помощью списков и таблиц, а затем скопировать введенные значения в динамические массивы.

Замечание

Не забывайте при внесении изменений почаще сохранять проект во избежание потери результатов своей работы! Однако при запуске приложения на выполнение этого делать не нужно, т.к. Delphi сама сохранит все модули и проект.

Объявление динамического массива выполняется аналогично обычному, но диапазон изменения индексов не указывается. При этом нумерация элементов массива производится, начиная с 0. Для изменения количества элементов в динамическом массиве используется функция SetLength с двумя параметрами: именем переменной динамического массива и количеством элементов в массиве, например:

Замечание

Если вы хотите вывести на экран форму, находящуюся в другом модуле, используйте методы Show и ShowModal. При этом не забудьте внести в список uses в секции implementation имена этих модулей с формами.

var SomeArray: array of integer;
......................
SetLength(SomeArray,10);
for i:=0 to 9 do
SomeArray[i]:=0;


Для создания динамического двумерного массива необходимо объявить динамический массив динамических массивов, а для изменения его размера вызвать функцию SetLength с еще одним дополнительным параметром, указывающим размерность массива по второй координате, например:

var SomeArray2: array of array of integer;
.....................
Setlength(SomeArray2,10,5); for i:=0 to 9 do
For j:=0 to 3 do
SomeArray2 [i, j]: =0;


На рис. 10-12 приведены варианты форм, которые могут быть использованы для выполнения лабораторной работы.

На главной форме используется компонент типа TGroupBox для объединения других компонентов, логически связанных друг с другом.

На форме для ввода одномерного массива основным является компонент TListBox. В метках, размещенных на этой форме, свойство FocusedControl позволяет их использовать для быстрого перемещения на указанный компонент с помощью метки. Перемещение можно осуществлять нажатием мышкой на метке либо нажатием на клавиатуре комбинации Alt+<Подчеркнутая буква метки> Для того чтобы буква метки оказалась подчеркнутой, необходимо перед этой буквой в свойстве Caption поставить символ «&».

Например, для метки «Массив значений» необходимо установить свойство Caption равным «&Массив значений», а свойство FocusedControl — ListBoxArray.

Нажатие на кнопку «Добавить» должно приводить к добавлению в конец списка текущего значения из строки ввода. Нажатие на кнопку «Заменить» должно приводить к замене выделенного значения в списке новым значением из строки ввода.

На форме для ввода двумерного массива основным является компонент TStringGrid для ввода значений массива. Компонент ТPanel используется для отображения сообщений об ошибке. У компонента TPanel необходимо установить свойства BevelOuter.AJM изменения типа рамки. Alignment равным alLeft, для отображения текста, прижатого к левой стороне панели.

В первую очередь при создании модуля Gridlnput.pas необходимо написать обработчик события формы OnCreate. В нем следует установить начальные значения ячеек таблицы.

Также для компонента GridArray необходимо создать обработчик события OnSetEditText для проверки вводимых значений, который должен сообщать о возникающих ошибках, выводя информацию об этом в панель статуса PanelStatus. Также необходимо создать обработчик OnKeyDown нажатия клавиш. В нем следует сделать проверку на нажатие клавиши Delete, имеющей в Windows код VK_DELETE, чтобы при необходимости можно было стереть содержимое выделенной ячейки.

В данном модуле необходимо также создать метод формы UpdateGrid, используемый для автоматического сокращения количества ячеек в таблице. Delphi для такого рода методов не умеет создавать заготовки, поэтому это надо сделать полностью самостоятельно, описав этот метод в секции private и разместив тело метода в любом месте секции implementation.

В листингах 5-8 приведены тексты файла проекта и всех модулей.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: