- •Глава 1 Знакомство со средой программирования Delphi. Первая программа
- •Задача
- •Вопросы для самоконтроля
- •Глава 2 Разработка линейных программ
- •Практика
- •Рекомендуемый интернет–ресурс
- •Вопросы для самоконтроля
- •Глава 3. Стандартные и библиотечные функции в линейных программах
- •Теория
- •Рекомендуемый интернет–ресурс
- •Вопросы для самоконтроля
- •Задачи для самостоятельного решения
- •Глава 4. Программы с разветвлениями
- •Теория
- •Практика
- •Рекомендуемый интернет-ресурс
- •Вопросы для самоконтроля
- •Задачи для самостоятельного решения
- •Глава 5. Циклы
- •Теория
- •Практика
- •Рекомендуемый интернет-ресурс
- •Вопросы для самоконтроля
- •Задачи для самостоятельного решения
- •Глава 6. Использование массивов в программах. Компонент Memo для ввода данных в массив
- •Теория
- •Практика
- •Рекомендуемый интернет-ресурс
- •Вопросы для самоконтроля
- •Задачи для самостоятельного решения
- •Теория
- •Практика
- •Рекомендуемый интернет-ресурс
- •Задачи для самостоятельного решения
- •Глава 8. Процедуры и функции, разрабатываемые программистом
- •Практика
- •Рекомендуемый интернет-ресурс
- •Вопросы для самоконтроля
- •Задачи для самостоятельного решения
- •Глава 9. Внешние файлы
- •Теория
- •Практика
- •Вопросы для самоконтроля
- •Задачи для самостоятельного решения
- •Приложение1. Основные свойства базовых компонентов
- •Приложение 3. Сообщения компилятора Delphi об ошибках
- •Интернет-портал по программированию для начинающих
Часть II. Delphi
Глава 7. Двумерные массивы. Компонент StringGrid. Разработка многооконных проектов
В данной главе рассматриваются следующие вопросы: компонент StringGrid,
технология разработки многооконных проектов, ввод и вывод двумерных массивов с помощью компонента StringGrid.
Теория
Определение двумерного массива было дано в предыдущем параграфе.
Компонент StringGrid
Находится на вкладке Additional.
StringGrid — служит для представления текстовых данных в виде таблицы. Очень удобен для ввода и вывода массивов (одномерных и двухмерных). Доступ к каждому элементу таблицы происходит через свойство Cells. Наиболее важными для нас являются следующие свойства компонента StringGrid.
|
Свойство |
Назначение |
|
|
|
|
|
|
Name |
Имя компонента |
|
|
|
||
|
ColCount |
Количество колонок таблицы |
|
||||
|
RowCount |
Количество строк таблицы |
|
||||
|
Cells |
Соответствующий |
таблице |
|
|||
|
|
двумерный |
|
массив. |
|
Ячейка |
|
|
|
таблицы, |
находящаяся |
на |
|
||
|
|
пересечении столбца номер col и |
|
||||
|
|
строки номер |
row определяется |
|
|||
|
|
элементом cells[col, row] |
|
|
|
||
|
FixedCols |
Количество |
зафиксированных |
|
|||
|
|
слева |
колонок |
таблицы. |
|
||
|
|
Зафиксированные |
колонки |
|
|||
|
|
выделяются |
цветом |
и |
при |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Часть II. Delphi
|
горизонтальной |
прокрутке |
|||
|
остаются на месте |
|
|
||
FixedRows |
Количество |
зафиксированных |
|||
|
сверху |
строк |
таблицы. |
||
|
Зафиксированные |
строки |
|||
|
выделяются |
цветом |
и |
при |
|
|
вертикальной прокрутке таблицы |
||||
|
остаются на месте |
|
|
||
Options.goEditing |
Признак |
|
допустимости |
||
|
редактирования |
содержимого |
|||
|
ячеек |
таблицы.True |
|
― |
|
|
редактирование |
разрешено. |
False |
||
|
― запрещено |
|
|
|
|
Options.goTabs |
Разрешает (True) или запрещает |
||||
|
(False) использование |
клавиши |
|||
|
<Tab> для перемещения курсора в |
||||
|
следующую ячейку таблицы |
|
|||
Options.goAlwaysShowEditor |
Признак |
|
нахождения |
||
|
компонента |
|
в |
режиме |
|
|
редактирования. |
Если |
значение |
||
|
свойства False, то для того, чтобы |
||||
|
в ячейке появился курсор, надо |
||||
|
начать набирать текст, нажать |
||||
|
клавишу <F2> или сделать щелчок |
||||
|
мышью |
|
|
|
|
Внимание! У элементов таблицы StringGrid первый индекс это номер столбца,
второй индекс это номер строки (cells[col, row]).
Технология создания многооконных проектов
Решение многих задач требует создания многооконных проектов. Одной из причин, вызывающей необходимость создания многооконных проектов, может быть разделение ввода исходных данных в программу и вывода результатов счета.
После загрузки самой среды Delphi на экране уже появляется заготовка проекта, состоящего из одной формы и одного модуля. Для добавления новой формы в проект можно воспользоваться кнопкой на панели кнопок быстрого доступа или командой из главного меню
Добавление новой формы в проект. Можно с помощью
Часть II. Delphi
команды File→New→NewForm
Вывод списка форм проекта
Вывод списка модулей проекта
Вместе с формой в проект добавляется связанный с ней модуль. Например, для формы Form2 добавится модуль Unit2.
Структуру многооконного проекта можно представить в виде схемы
Основная программа обычно записывается в главном модуле, связанном с главной формой. К главному модулю нужно подключить модули дочерних форм, т. е. в раздел Uses дописать названия дочерних модулей. Например,
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids,Unit2,Unit3;
Для вывода на экран дочерних форм используется процедура Show (показать). Например,
Form2.Show;
Враздел public дочерних модулей целесообразно включить описание переменных
имассивов, передающихся из родительского модуля.
Если в родительском модуле используются компоненты из дочерних форм, перед их названием пишется имя формы, где они находятся. Например, Form2.StringGrid1.
Ввод и вывод двумерных массивов c помощью компонента StringGrid
После создания на форме строковой таблицы (компонент StringGrid) и задания с помощью Инспектора Объектов ее свойств, в программе нужно записать группу операторов для подписи строк и столбцов таблицы, чтобы пользователю программы было понятно, как вводить данные.Это можно сделать, как и раньше, добавив на
Часть II. Delphi
форму компонент ButtonN и создав процедуруButtonNClick.Но можно записать и в отдельной процедуре, например, связанной с событием выход (Exit) из компонента Edit, где вводится размерность массива, или в процедуре, связанной с событием создания формы (FormCreate).
Пример {Процедура подготовки таблицы на форме для ввода квадратной матрицы, которая
выполняется при выходе из поля ввода размерности матрицы.} procedure TForm1.Edit1Exit(Sender: TObject);
Vari,j:Integer;// номера строки столбца квадратной матрицы begin
//порядок матрицы получает свое значение из поля ввода
N:=StrToInt(Edit1.Text);
//свойство количество строк компонента StringGrid
//получает значение: порядок +1 StringGrid1.RowCount:=N+1;
//свойство количество столбцов компонента StringGrid
//получает значение порядок: +1 StringGrid1.ColCount:=N+1; //подпись заголовка таблицы
For i:=1 to StringGrid1.RowCount do StringGrid1.Cells[i,0]:= IntToStr(i); //подписьстроктаблицы
For j:=1 to StringGrid1.ColCount do StringGrid1.Cells[0,j]:= IntToStr(j);
//добавление в свойства таблицы признака
//допустимости редактирования содержимого ячеек таблицы
StringGrid1.Options:= StringGrid1.Options +[goEditing]; end;
Замечание
Для создания процедуры, связанной с каким-то событием, произошедшим с компонентом, нужно перейти на вкладку Events (события), найти нужное событие в строке, например OnCreate, и два раза щелкнуть мышью). Рядом с событием OnCreate для компонента Form появится событие FormCreate. В модуле автоматически будет создана заготовка процедуры создания формы:
procedureTForm1.FormCreate(Sender: TObject); begin
Часть II. Delphi
end;
Если щелкнуть по компоненту Edit, то автоматически будет создана заготовка процедуры обработки события изменение компонента Edit:
procedure TForm1.Edit1Change(Sender: TObject); begin
end;
Нужно изменить событие Change (изменить) на событие Exit (выход). Для этого обязательно перейти на вкладку события (Events) в инспекторе объектов. В строке OnExit раскрыть список, выбрать название Edit1Change и заменить Change на Exit.
Для чтения двумерного массива действительных чисел из StrigGrid
необходимо записать операторы, подобные этим: For i:=1 to StringGrid1.RowCount-1 do
For j:=1 to StringGrid1.ColCount-1 do Massiv[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
Длязаписи двумерного массива действительных чисел в StrigGrid необходимо
записать операторы, подобные этим: For i:=1 to StringGrid1.ColCount-1 do
For j:=1 to StringGrid1.RowCount-1 do StringGrid1.Cells[j,i]:=FloatToStr(Massiv[i,j]);
Понятие о классах в Delphi
В языке объектно-ориентированного программирования Delphiдается возможность определять так называемые классы. Класс — это сложная структура, включающая помимо описания данных, описание процедур и функций, которые могут быть выполнены над представителем класса — объектом.
Система Delphiвсегда сама генерирует свои классы во время проектирования приложения.Описание сформированного класса находится в разделе typeинтерфейсной части модуля. Например, в программе про бак для летнего душа из параграфа 2 описание класса выглядит так:
type
TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel;