Свойства компонента UpDown




Лабораторная работа 43

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

Двумерные массивы удобно вводить через компонент StringGrid, который находится на вкладке Additional (Дополнительная). В отличии от работы с одномерными массивами надо указывать количество строк и столбцов (RowCount, ColCount). Обращение к ячейке осуществляется следующим образом: StringGrid1.Cells[столбец,строка].

 

Внимание: На первом месте всегда номер столбца.

 

Выводить элементы массива можно в компонент StringGrid или на форму через метку Label.

Рассмотрим ввод и вывод элементов массива на конкретных задачах.

 

Задача №1. Найти в целочисленном массиве минимальный и максимальный элементы и поменять их местами.

Ввод элементов массива осуществляется через StringGrid, а вывод результатов на форму через Label (см. рис.1). На форме помещены три кнопки: Вычислить, Сброс, Выход.

                                 
 
   
 
 
     
 
     
 
 
     
 
 
       
 


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

 

procedure TForm1.Button1Click(Sender: TObject);

var a: array [1..5,1..5] of integer;

max,min,i,j,maxi,maxj,mini,minj: integer;

Begin

for j:=1 to 5 do

Begin

for i:=1 to 5 do

Begin

a[i,j]:=strtoint(StringGrid1.Cells[i-1,j-1]);

label5.Caption:=Label5.Caption+inttostr(a[i,j])+' ';

end;

label5.Caption:=Label5.Caption+#13;

end;

max:=a[1,1]; maxi:=1; maxj:=1;

min:=max; mini:=1; minj:=1;

for j:=1 to 5 do

for i:=1 to 5 do

begin if a[i,j]>max then begin max:=a[i,j];

maxi:=i;

maxj:=j

end;

if a[i,j]<min then begin min:=a[i,j];

mini:=i;

minj:=j;

end;

end;

a[maxi,maxj]:=min;

Label7.Caption:='max='+inttostr(max);

a[mini,minj]:=max;

Label8.Caption:='min='+inttostr(min);

for j:=1 to 5 do

Begin

for i:=1 to 5 do

label6.Caption:=Label6.Caption+inttostr(a[i,j])+' ';

label6.Caption:=Label6.Caption+#13;

end;

end;

 

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

 

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

Begin

case key of

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

#13: begin if stringGrid1.Col< stringGrid1.ColCount-1

then stringGrid1.Col:=stringGrid1.Col+1 {переход на следующую колонку}

Else begin

if stringGrid1.Row< stringGrid1.RowCount-1

Then

begin stringGrid1.col:=0;

stringGrid1.Row:=stringGrid1.Row+1 {переход на следующую строку}

end;

end;

end;

else key:=Chr(0);

end;

end;

 

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

 

procedure TForm1.Button2Click(Sender: TObject);

var i,j: integer;

Begin

for j:=1 to 5 do

for i:=1 to 5 do

StringGrid1.Cells[i-1,j-1]:='';

label5.Caption:='';

label6.Caption:='';

label7.Caption:='';

label8.Caption:='';

stringGrid1.col:=0; {установка курсора в позицию 0,0 таблицы}

stringGrid1.row:=0;

end;

 

При нажатии кнопки Выход происходит закрытие приложения. См. предыдущие работы.

 

 

Задача №2: В целочисленной квадратной матрице (массиве) найти максимальный элемент среди элементов, лежащих на главной диагонали и ниже ее.

В этой задаче элементы массива вводятся через генератор случайных чисел, а вывод осуществляется в компонент StringGrid. Вид формы см. на рис.2.

 

                     
 
 
 
 
   
 
       
 

 

 


 

 
 
Рис. 2.

 

 


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

 

procedure TForm1.Button1Click(Sender: TObject);

var a: array [1..5,1..5] of integer;

max,min,i,j,maxi,maxj,mini,minj: integer;

begin randomize; {активизация генератора случайных чисел}

for j:=1 to 5 do

for i:=1 to 5 do

Begin

a[i,j]:=random(50); {заполнение массива}

StringGrid1.Cells[i-1,j-1]:=inttostr(a[i,j]); {вывод элементов массива в таблицу StringGrid}

end;

max:=a[1,1]; maxi:=1; maxj:=1;

for j:=1 to 5 do

for i:=1 to j do

begin if a[i,j]>max then begin max:=a[i,j];

maxi:=i;

maxj:=j

end;

end;

Label2.Caption:='max='+inttostr(max); {вывод найденного значения}

Label3.Caption:='i='+inttostr(maxj)+' j='+inttostr(maxi);

end;

 

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

 

procedure TForm1.Button2Click(Sender: TObject);

var i,j:i nteger;

Begin

for j:=1 to 5 do

for i:=1 to 5 do

StringGrid1.Cells[i-1,j-1]:='';

label2.Caption:='';

label3.Caption:='';

stringGrid1.col:=0;

stringGrid1.row:=0;

end;

 

Реакция на нажатие клавиши Выход аналогична рассмотренной ранее.

 

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

· на первом месте стоит номер колонки, а на втором – номер строки

· колонки и строки нумеруются с нуля.

Задача №3: Работа со списками

 

Компонент UpDown – счѐтчик предназначен для пошагового регулирования числовой величины. Он имеет пару кнопок, с помощью которых величина наращивается или уменьшается. Сам по себе этот элемент не имеет возможности что–либо менять, а обычно его связывают с текстовым полем Edit, которое отображает регулируемую величину.

Связанный компонент называется компаньоном. Сам компонент UpDown находится во вкладке Win32.

Свойства компонента UpDown

 

Компонент ListBox – список, представляет собой стандартный для Windows список, с помощью которого пользователь может выбрать один или несколько пунктов. В этом компоненте предусмотрена возможность программной прорисовки пунктов, поэтому список может содержать не только текстовые строки, но и произвольные изображения.



Поделиться:




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

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


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