Для визуализации работы с двумерным массивом будем использовать компонент TStringGrid со страницы Additional палитры компонентов, предназначенный для создания таблиц, в ячейках которых располагаются произвольные текстовые строки
Таблица делится на две части — фиксированную и рабочую. Фиксированная служит для показа заголовков столбцов/рядов и для ручного управления их размерами. Обычно фиксированная часть занимает крайний левый столбец и самый верхний ряд таблицы, однако с помощью свойств FixedCols и FixedRows можно задать другое количество фиксированных столбцов и рядов (если эти свойства имеют значение 0, таблица не содержит фиксированной зоны). Рабочая часть — это остальная часть таблицы. Она может содержать произвольное количество столбцов и рядов, более того, эти величины могут изменяться программно. Рабочая часть может не умещаться целиком в пределах окна компонента, в этом случае в него автоматически помещаются нужные полосы прокрутки. При прокрутке рабочей области фиксированная область не исчезает, но меняется ее содержимое — заголовки строк и рядов.
Свойство | Тип | Комментарий | |||||
Cells[ACol, ARow: Integer] | String | Определяет содержимое ячейки с табличными координатами (ACol, ARow) | |||||
Cols[ACol: Integer] | TStrings | Все строки с номером ACol | |||||
Rows[ACol: Integer] | TStrings | Все строки с номером ARCow | |||||
ColCount | Integer | Общее количество столбцов | |||||
RowCount | Integer | Общее количество рядов | |||||
FixedCols | Integer | Количество фиксированных (заголовочных) столбцов | |||||
FixedRow s | Integer | Количество фиксированных (заголовочных) рядов | |||||
Col | Integer | Номер столбца текущей ячейки | |||||
Row | Integer | Номер ряда текущей ячейки | |||||
Options | TGridOptions | Данное свойство множественного типа определяет ряд дополнительных параметров таблицы. В частности, нам наиболее важны следующие: | |||||
goEditing | Разрешается редактирование ячеек таблицы | ||||||
goTabs | Разрешается перемещение по ячейкам с помощью клавиши Tab и комбинации Shift+Tab | ||||||
Центральным свойством компонента является Cells — двумерный массив ячеек, каждая из которых может содержать произвольный текст. Конкретная ячейка определяется парой чисел — номером столбца и номером ряда, на пересечении которых она находится (нумерация начинается с нуля). Свойство Cells имеет тип String, поэтому программа может легко прочитать или записать содержимое нужной ячейки. Например:
Cells[1,1]:= ‘Верхняя ячейка рабочей зоны’;
Количество ячеек по каждому измерению хранит пара свойств ColCount (количество столбцов)и RowCount (количество рядов). Значения этих свойств, и, следовательно, размеры таблицы могут меняться как на этапе разработки программы, так и в ходе ее работы, однако их значения должны быть как минимум на единицу больше соответственно значений в свойствах FixedCols и FixedRows, определяющих размеры фиксированной зоны. Содержимое ячеек можно редактировать.
В данной работе наше приложение должно быть красиво оформлено в виде пиктограмм. Пиктограммы будут назначаться пунктам меню и кнопкам панели инструментов. Для того, чтобы можно было назначить картинку любому из этих элементов, необходимо вначале установить в свойстве ImageList содержащего его компонента используемый список картинок, а затем в свойстве ImageIndex каждого элемента указать номер картинки из списка. Однако если наша программа основана на концепции действий (Action), вместо прямого задания значения свойства ImageIndex пункта меню или кнопки панели инструментов следует указать значение свойства ImageIndex соответствующего компонента TAction.
Для определения действия необходимо на форму поместить компонент типа TActionList, который может содержать в себе множество действий. Затем нужно дважды щелкнуть на нем мышкой, при этом откроется редактор действий. Нажатием на клавишу Insert можно добавлять новые действия. При выборе мышкой действия в списке, оно становится доступным в инспекторе объектов. Список основных свойств приведен ниже в таблицах 1-2.
Таблица 1.Основные свойства объектов типа TAction
Свойство | Тип | Комментарий |
Caption | String | Название действия в меню |
Category | String | Категория — используется для упорядочивания действий внутри TActionList |
Checked | Boolean | Отмечены ли галочкой пункты меню и нажаты ли соответствующие кнопки |
Enabled | Boolean | Разрешена ли команда |
Hint | String | Всплывающая подсказка для кнопок |
ImageIndex | Integer | Код картинки в связанном списке картинок |
ShortCut | TshortCut | Код горячей клавиши для вызова действия |
Visible | Boolean | Видимы ли пункты меню и кнопки |
Таблица 2. Основные события объектов типа TAction
Свойство | Комментарий |
OnExecute | Выполнение действия |
OnUpdate | Обновление информации о действии. Здесь можно изменить любые свойства действия в зависимости от текущего состояния программы. Обычно с помощью этого события запрещают недоступные команды. |
После того, как созданы все необходимые действия, их необходимо назначить соответствующим пунктам меню и кнопкам. У этих компонентов имеется свойство Action, значение которого можно установить в инспекторе объектов с помощью выпадающего списка всех доступных в форме действий.
В нашем приложении необходимо сделать назначение действий для главного меню, локального меню и кнопкам панели.
При создании элементов меню, соответствующих действиям, не нужно указывать заголовки. Нужно задать свойство Action элемента меню, при этом заголовок, код картинки, горячая клавиша и обработчик события будут автоматически взяты из компонента TAction.
Замечание | Не забудьте указать свойство ImageList компонетов меню и панели инструментов из выпадающего списка в инспекторе объектов для отображения в них картинок. |
Локальное меню обычно появляется на экране при нажатии правой кнопки мыши на визуальных компонентах. Для этого у этих компонентов должно быть установлено свойство PopupMenu в инспекторе объектов. В нашем случае достаточно назначить свойство PopupMenu только для формы. Тогда нажатие правой кнопки мышки в любом месте формы будет вызывать локальное меню.
Для создания панели инструментов с кнопками используем компонент Ttoolbar. Для добавления в него новых кнопок необходимо нажать правую кнопку мыши для вызова локального меню и выбрать соответствующий пункт. Как и пункты меню, кнопки имеют свойство Action, при установке значения которого из выпадающего списка кнопки автоматически получат все необходимые свойства (текст надписи, всплывающую подсказку, код картинки, обработчик нажатия). По умолчанию кнопки на панели инструментов отображаются только с картинкой без сопроводительной надписи. Для отображения с надписью необходимо указать свойство ShowCaption равным True.
В большинстве современных приложений панели инструментов можно свободно перетаскивать по экрану с помощью мышки.
Для того, чтобы это можно было делать, в Delphi имеется компонент типа TСontrolBar, который дополняет все помещаемые на него другие компоненты рамочкой и двумя вертикальными полосками слева для перетаскивания. Обычно в TСontrolBar помещают панели инструментов TToolBar. Поэтому перед размещением панелей инструментов на форме сначала необходимо поместить компонент TControlBar, а в него затем — панели инструментов.
Задание
Создать проект, реализующий работу с двумерным массивом. Приложение должно быть снабжено главным меню, локальным меню и панелью инструментов.
Таблица 3. Список действий, создаваемых в приложении
Действие | Описание |
ActionInput | Заполнить матрицу с помощью датчика случайных чисел |
ActionClear | Очистить матрицу. Вернуть первоначальную размерность |
ActionMatr | Смотрите задание |
ActionExit | Выход из программы |
ActionAbout | Выдает краткую информацию об авторе |
Таблица 4. Задания
Номер задания | Описание |
Удалить строку, содержащую максимальный элемент. | |
Удалить столбец, содержащий максимальный элемент. | |
Отсортировать матрицу по возрастанию элементов первого столбца. | |
Отсортировать матрицу по убыванию элементов первой строки. | |
Удалить строку и столбец, на пересечении которых находится минимальный элемент матрицы. |