А. Использование компонента StringGrid




Лабораторная работа № 42

Разработка оконного приложения

Цель работы: Дать понятие визуального конструирования формы с использованием компонентов многострочного редактора для работы с одномерными массивами, закрепить полученные знания на практике

Теоретический материал

Массив это структура данных, представляющая собой набор переменных одинакового типа, имеющих общее имя.

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

Описание и обработка массивов в Delphi осуществляются так же как и в Pascale, а вот ввод и вывод отличаются.

В Delphi для ввода данных используются компоненты StringGrid палитры Additional (Дополнительная) или Memo палитры Standart (Стандартная), а вывод осуществляется

· или в поле диалогового окна (обращение к свойству Caption текстовой метки Label1.Caption или к свойству Lines многостраничного поля Memo1.Lines.Add(st)

· или в окно сообщения ShowMessage.

При вводе-выводе удобно использовать инструкцию for. При этом переменная-счетчик инструкции for может быть использована в качестве индекса элемента массива. При вводе массива через таблицу (StringGrid), надо учитывать, что колонки и строки таблицы нумеруются с нуля.

Рассмотрим ввод-вывод массива на примере: вычисление среднего арифметического значения элементов массива.

 

А. Использование компонента StringGrid

Значок StringGrid находится на вкладке Additional (Дополнительная). Компонент StringGrid представляет собой таблицу, ячейки которой содержат строки символов.

Ниже перечислены некоторые свойства компонента StringGrid:

RowCount, ColCount – число строк и столбцов, включая заголовок

Row,Col – текущие строка и столбец

ColWidths[], RowHeights[] – массивы ширины столбцов и высоты строк

Cells[столбец, строка] – данные ячейки таблицы (строковый тип)

FixedCols, FixedRows – число зафиксированных столбцов слева и строк сверху. Нумеруются с нуля, причем нулевые строка и столбец по умолчанию отведены для заголовков

Options – настройки таблицы со значениями True/False (. goEditing – допустимость редактирования, goRowSizing, goColSizing – можно ли пользователю менять размеры строк и столбцов)

DefaultColWidth, DefaultRowHeight – ширина и высота ячейки по умолчанию

GridLineWidth –ширина линий, ограничивающих ячейки

Options.AlwaysShowEditing – Признак нахождения компонента в режиме редактирования. Если значение свойства False, то для того, чтобы в ячейке появился курсор, надо начать набирать текст, нажать клавишу <F2> или сделать щелчок мышью.

Options.goTabs – Разрешает (True) или запрещает (False) использование клавиши <Tab> для перемещения курсора в следующую ячейку таблицы.

 

Добавляется компонент StringGrid в форму точно та же, как и другие компоненты. После добавления компонента к форме нужно выполнить его настройку:

ColCount=10

FixedCols=0

RowCount=1

DefaultRowHeight=24

DefaultColWidth=64

Options. GoEditing=true

Options.AlwaysShowEditing=true

Options.goTabs=true

Значения свойств Height и Width следует при помощи мыши установить такими, чтобы размер компонента был равен размеру строки.

 

Приложение должно иметь следующий вид:

 
 

 

 


Процедура обработки события OnClick (клавиша Вычислить) представлена ниже:

 

procedure TForm1.Button1Click(Sender: TObject);

var a:array[1..10] of integer;

sum,i: integer;

sr:real; s: string;

ввод массива
begin s:='';

for i:=1 to 10 do

Begin

if length(StringGrid1.Cells[i-1,0])<>0

then a[i]:=StrToInt(StringGrid1.Cells[i-1,0])

else a[i]:=0;

вывод массива
s:=s+StringGrid1.Cells[i-1,0]+' ';

Label2.Caption:='Введенный массив'+#13+s+#13;

end;

обработка массива
sum:=0;

for i:=1 to 10 do sum:=sum+a[i];

sr:=sum/10;

вывод результата
Label3.Caption:='сумма элементов:'+IntToStr(sum)+

#13+'Среднее арифметическое:'+FloatToStr(sr)

 

end;

Текст процедуры обработки события OnKeyPress приведен ниже. Процедура осуществляет контроль вводимых данных, разрешая вводить в ячейку таблицы только цифры. Следует обратить внимание на свойство Col, которое во время работы программы содержит номер колонки таблицы, в которой находится курсор. Это свойство можно также использовать для перемещения курсора в нужную ячейку таблицы при нажатии клавиши <Enter>. Однако нужно учитывать, что колонки и строки таблицы нумеруются с нуля.

 

Procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);

Begin

case key of

#8,'0'..'9':;

#13: if StringGrid1.Col<StringGrid1.ColCount-1

then StringGrid1.Col:=StringGrid1.Col+1;

else key:=Chr(0);

end;

end;

 

При нажатии клавиши Сброс происходит очистка полей ввода:

 

procedure TForm1.Button2Click(Sender: TObject);

var i: integer;

Begin

For i:=1 to 10 do StringGrid1.Cells[i-1,0]:='';

Label2.Caption:=’ ‘;

Label3.Caption:=’ ‘;

end;

При нажатии клавиши Выход происходит закрытие приложения:

 

procedure TForm1.Button3Click(Sender: TObject);

Begin

form1.Close

end;

 

Б. Использование компонента Memo.

 

В некоторых случаях для ввода массива можно использовать компонент Memo. Компонент Memo позволяет вводить текст, состоящий из достаточно большого количества строк, поэтому его удобно использовать для ввода символьного массива. Компонент Memo добавляется в форму обычным образом. Значок компонента находится на вкладке Standart (Стандартная).

Свойство Lines определяет массив, каждый элемент которого содержит одну строку находящегося в поле Memo текста, а свойство Lines.Count определяет количество строк текста в поле Memo.

При использовании компонента Memo для ввода массива значение каждого элемента массива следует вводить в отдельной строке и после ввода каждого элемента массива нажимать клавишу <Enter >. Для того, чтобыкурсор был виден в поле ввода компоненты Memo, надо установить у свойства OnRead значение False, а у свойства Enabled значение True.

Получить доступ к находящейся в поле Memo строке текста можно при помощи свойства Lines, указав в квадратных скобках номер нужной строки (строки нумеруются с нуля).

Основной цикл процедуры ввода символьного массива из компонента Memo может выглядеть так:

 

for i:=1 to 10 do a[i]:=Memo1.Lines[i-1];

 

Для ввода числового массива надо использовать функции преобразования StrToInt или StrToFloat:

 

for i:=1 to 10 do a[i]:=StrToInt(Form1.Memo1.Lines[i-1]);

for i:=1 to 10 do a[i]:=StrToFloat(Form1.Memo1.Lines[i-1]);

 

Приложение должно иметь следующий вид:

                     
 
 
   
 
 
       

 


Процедура обработки события OnClick (клавиша Вычислить) представлена ниже:

 

procedure TForm1.Button1Click(Sender: TObject);

var a: array [1..10] of integer;

sum,i,n: integer;

sr: real; s: string;

Begin

s:='';

n:=Memo1.Lines.Count;

if n=0 then

begin ShowMessage('Исходные данные не введены!');

Exit;

end;

if n>10 then

begin ShowMessage('Количество строк превышает размер массива.');

n:=10;

end;

for i:=1 to n do

Begin

a[i]:=StrToInt(Form1.Memo1.Lines[i-1]);

s:=s+Form1.Memo1.Lines[i-1]+#13;

end;

s:='Введенный массив'+#13+s+#13;

sum:=0;

for i:=1 to n do sum:=sum+a[i];

sr:=sum/n;

s:=s+'сумма элементов:'+IntToStr(sum)+

#13+'Среднее арифметическое:'+FloatToStr(sr);

ShowMessage(s);

end;

 

Процедура TForm1.Button1Click сначала проверяет, есть ли в поле Memo1 текст. Если текст есть (в этом случае значение свойства Lines.Count больше нуля), то процедура сравнивает количество введенных строк и размер массива. Если это количество превышает размер массива, то программа выдает сообщение об этом и изменяет значение n, тем самым подготавливает ввод только первых 10 строк. Если текста нет, т.е. n=0, то выдается сообщение об ошибке и программа завершает свою работу.

Веденный массив и результаты работы программы выдаются в отдельное окно функцией ShowMassage.

 

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

 

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);

begin Case key of

'0'..'9',#8,#13:;

else key:=chr(0);

end;

end;

 

При нажатии клавиши Сброс происходит очистка полей ввода при помощи события Clear:

 

procedure TForm1.Button2Click(Sender: TObject);

Begin

Memo1.Clear;

end;

 

При нажатии клавиши Выход происходит закрытие приложения:

 

procedure TForm1.Button3Click(Sender: TObject);

Begin

Form1.Close;

end;

 

В заключении можно сказать, что работа с одномерными массивами в Delphi мало чем отличается от работы в Pascal e.

 

Задание 1:

 

Рассмотреть свойства компонентов ListBox, ComboBox и CheckListBox, создав следующую форму.

Задание 2. Рассмотреть свойства компонента StringGrid и создать следующую таблицу. По щелчку на любую ячейку номер ее строки и столбца, а также содержимое ячейки должно отображаться в заголовке формы.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: