Смекни!
smekni.com

Учебно-методическое пособие для студентов физико-математических специальностей вузов Балашов (стр. 8 из 18)

Компоненты таблицы имеют форму и функциональные возможности электронных таблиц. В компоненте DrawGrid можно отображать какие-либо данные (числа, рисунки, пиктограммы) в форме таблиц. Кроме того, имеется возможность редактировать данные в каждой ячейке по отдельности. С помощью компонента StringGrid можно обрабатывать строки
и связанные с ними объекты, в полной мере пользуясь возможностями компонента DrawGrid.

С помощью инспектора объектов в свойстве ColCount можно определить количество строк, а в свойстве RowCount задать количество столбцов. Свойства DefaulColWidth и DefaulRowWidth задают ширину всех строк и высоту всех столбцов. Свойство ScrollBar является логическим
и определяет наличие линеек прокрутки. Логическое свойство DefaultDrawing показывает, отображается ли содержание ячейки автоматически. Если данное свойство имеет значение True, то происходит автоматическое отображение содержимого, в противном случае необходимо создавать свои средства отображения.

Каждая таблица должна иметь ячейки, в которых будет выводиться служебная информация, постоянно находящаяся на экране, даже если применяются линейки прокрутки. Поэтому существуют свойства FixedCol, FixedRows и FixedColor, задающие количество фиксированных строк и столбцов таблицы, их цвет (по умолчанию FixedCol=1 и FixedRows=1). Любая таблица должна иметь хотя бы одну строку и один столбец подобных ячеек. Необходимо помнить, что нумерация и строк, и столбцов начинается с нуля. Поэтому, если оставить одну фиксированную строку и столбец, нумерация, доступная для редактирования, будет начинаться с 1.

Рисунок 19

С помощью составного свойства Options можно задать флаги, определяющие поведение таблицы. Среди них отметим следующие: goEditing — показывает, может ли редактироваться содержимое ячеек, goAlweysShowEditing — определяет, становится ли выделенная ячейка сразу и активной (в противном случае ячейка активизируется либо нажатием клавиши F2, либо двойным щелчком мыши, либо нажатием произвольной символьной клавиши).

На рисунке 19 изображена форма с компонентом StringGrid. Большинство описанных свойств представлены в инспекторе объектов.

Следует знать в виду, что в силу своей универсальности таблица типа DrawGrid не имеет конкретного средства отображения реальных изображений в ячейках таблицы и для каждого нового вида изображений необходимо создавать свои средства, поэтому остановимся более подробно на таблице типа StringGrid.

Для доступа к ячейкам таблицы на этапе выполнения программы можно воспользоваться свойствами Cells[ACol, ARow], Cols[ACol], Rows[ARow].

Cells[ACol, ARow] определяет ячейку, находящуюся в столбце ACol
и строке ARow;

Cols[ACol] определяет колонку;

Rows[ARow] определяет строку.

Значения целочисленных свойств Col и Row, допустимых только во время выполнения, указывают на активную в данный момент ячейку, строку или столбец.

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

Замечание. На этапе проектирования заполнять таблицу начальными данными нельзя.

Пример 1

Заполнить таблицу произвольного размера произвольными числами.

Поместим на форму компонент StringGrid, где будем располагать числа; два компонента Edit, в которых будут вводиться размеры таблицы; кнопку Button, при нажатии на нее произойдет заполнение таблицы. Тогда процедура будет иметь следующий вид:

procedure TForm1.Button1Click(Sender: TObject);

var i,j:Integer;

begin

with StringGrid1 do

begin

ColCount:=StrToInt(Edit1.Text)+1;

RowCount:= StrToInt(Edit1.Text)+1;

for i :=1 to ColCount do

for j:=1 to RowCount do

Cells[i,j]:=IntToStr(50-Random(100));

end;

end;

Пример 2

В числовой таблице, заданной произвольным образом, подсчитать количество отрицательных значений в каждой строке и в дополнительном столбце.

procedure TForm1.Button2Click(Sender: TObject);

var i,j,k:Integer;

begin

with StringGrid1 do

begin

ColCount:= StrToInt(Edit1.Text)+2;

for i:=1 to RowCount-1 do

begin

k:=0;

for j:=1 to ColCount-2 do

If StrToInt(Cells[j,i])<0 Then k:=k+1;

Cells[ColCount-1,i]:=IntToStr(k);

end;

end;

end;

При использовании компонента DrawGrid элементом каждой ячейки является рисунок класса TRect, возможности обработки которого будут продемонстрированы нами в лабораторной работе 7 при изучении графических возможностей.

При работе с компонентом StringGrid имеется один досадный факт,
а именно — в отличие от компонентов Memo и RichEdit в таблицах нет возможности сразу записать все содержимое в файл. Поэтому для работы с файлами данные процедуры необходимо писать самостоятельно. В следующем примере представлены две процедуры, одна из которых записывает содержимое в файл, а вторая читает содержимое из файла, используя только стандартные средства языка программирования Pascal. Это, соответственно, процедуры SaveGrid и LoadGrid. Если не совсем понятно содержимое данных процедур, то соответствующий материал рекомендуется повторить.

Procedure SaveGrid;

var f:textfile;

x,y:integer;

Begin

assignfile (f,’Filename’);

rewrite (f);

writeln (f, StringGrid1.colcount);

writeln (f, StringGrid1.rowcount);

For X:=0 to StringGrid1.colcount-1 do

For y:=0 to StringGrid1.rowcount-1 do

writeln (F, StringGrid1.cells[x,y]);

closefile (f);

end;

Procedure LoadGrid;

var f:textfile;

temp,x,y:integer;

tempstr:string;

begin

assignfile (f,’Filename’);

reset (f);

readln (f,temp);

StringGrid1.colcount:=temp;

readln (f,temp);

StringGrid1.rowcount:=temp;

For X:=0 to StringGrid1.colcount-1 do

For y:=0 to StringGrid1.rowcount-1 do

begin

readln (F, tempstr);

stringgrid.cells[x,y]:=tempstr;

end;

closefile (f);

end;

Задания:

1. Проверьте все примеры из лабораторной работы.

2. Дана таблица размера n×n, посчитайте количество четных элементов главной диагонали.

3. Заполните две таблицы случайными числами и перемножить их по правилу перемножения матриц. Ответ выводится в третьей таблице.

4. Дана таблица размера n×n. Забейте таблицу случайными числами
и отразите элементы относительно главной диагонали.

5. Реализуйте на языке программирования Delphi задания из лабораторных работ по теме «Массива».

Лабораторная работа 6. Окна сообщений и диалоговые окна

Цель: изучить возможности формирования сообщений и использования диалоговых компонентов.

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

Процедура ShowMessage (Msg:String) формирует и выдает на экран окно с сообщением Msg. Помимо сообщения это окно имеет кнопку Ok, при нажатии на которую закрывается данное окно. Заголовок окна совпадает с названием приложения. При необходимости выдаваемая информация разбивается на строки. Окно, сформированное данной процедурой, так же, как и все окна, работает в модальном режиме, когда блокируется выполнение приложения до закрытия данного окна.

Процедура ShowMessagePos (Msg: String, X:Integer; Y:Integer) выдает окно так, чтобы его левый верхний угол находился в точке с абсолютными координатами (X, Y).

Пример использования данной процедуры может иметь следующий вид:

ShowMessage (‘Текст содержит‘ +IntToStr (RichEdit1.Lines.Count ));

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

Общий вид данной функции: MessageDlg(Msg:String; aType:TmsgDlg Type; aButton:TmsgDlgButton; HelpCtx: LongInt): Word;

В переменной Msg задается текст выдаваемого сообщения, в переменной aType тип окна. Всего имеется пять предопределенных окон сообщения, следовательно, параметр aType может иметь пять различных значений, которые перечислены в таблице 2.

Таблица 2. Значения параметра aType

Свойство

Описание

mtWarning Окно-предупреждение
mtError Окно-сообщение об ошибке
mtInformation Информационное окно
mtConfirmation Окно-подтверждение
mtCustom Окно-сообщение

Параметр aButton определяет, какие кнопки будет содержать окно сообщения. Это параметр имеет тип множество, и его значение должно быть заключено в квадратные скобки. Для данного параметра могут задаваться значения, перечисленные в таблице 3.

Таблица 3. Значения параметра aButton

Значение

Описание

mbYes Кнопка Yes (Да)
MbNo Кнопка No (Нет)
MbOk Кнопка Ok
mbCancel Кнопка Cancel (Отмена)
mbHelp Кнопка Help (Помощь)
mbAbort Кнопка Abort (Прекратить)
mbIgnore Кнопка Ignore (Игнорировать)
mbAll Кнопка All (Все)
mbRetry Кнопка Retry (Продолжить)

Параметр HelpCtx определяет текст справки, которая должна выводиться, если пользователь нажмет клавишу [F1].