- •Часть III
- •Свойства компонента Edit (поле ввода-редактирования)
- •Свойства компонента Label (поле ввода-редактирования)
- •Свойства компонента Button (командная кнопка)
- •Пример составления программы
- •Значение свойства Caption для переменных типа Label
- •Значение свойства Caption для переменных типа Button
- •Задания по вариантам
- •Свойства компонента RadioGroup
- •Пример составления программы
- •Задания по вариантам
- •Лабораторная работа №3 Цель работы
- •Программа работы
- •Пример составления программы
- •Задания по вариантам
- •Пример составления программы
- •Задания по вариантам
- •Свойства компонента CheckBox
- •Свойства компонента SpinEdit
- •Пример составления программы
- •Задание по вариантам
- •Пример составление программы
- •Свойства компонента Memo
- •Свойства компонента ProgressBar
- •Пример составление программы
- •Составление системы уравнений для схемы
- •Задания по вариантам
- •Литература
Свойства компонента CheckBox
Свойство |
Определяет |
Name |
Имя компонента. Используется в программе для доступа к свойствам компонента |
Caption |
Текст, поясняющий назначение флажка |
Checked |
Состояние, внешний вид флажка: если флажок установлен (в квадратике есть "галочка"), то checked = TRUE; если флажок сброшен (нет "галочки"), то Checked=FALSE |
State |
Состояние флажка. В отличие от свойства Checked, позволяет различать установленное, сброшенное и промежуточное состояния. Состояние флажка определяют константы: cbChecked (установлен); cbGrayed (серый, неопределенное состояние); cbUnChecked (сброшен) |
AllowGrayed |
Может ли флажок быть в промежуточном состоянии: если AllowGrayed = FALSE, то флажок может быть только установленным или сброшенным; если AllowGrayed = TRUE, то допустимо промежуточное состояние |
Left |
Расстояние от левой границы флажка до левой границы формы |
Top |
Расстояние от верхней границы флажка до верхней границы формы |
Height |
Высоту поля вывода поясняющего текста |
Width |
Ширину поля вывода поясняющего текста |
Font |
Шрифт, используемый для отображения поясняющего текста |
ParentFont |
Признак наследования характеристик шрифта родительской формы |
Компонент SpinEdit удобно использовать, когда нужно вводить или редактировать данные, изменяющиеся в заданном диапазоне и с заданным шагом. Значок этого компонента находится на вкладке Samples. Свойства его приведены в табл. 5.2.
Таблица 5.2.
Свойства компонента SpinEdit
Свойство |
Определяет |
Name |
Имя компонента. Используется в программе для доступа к свойствам компонента |
Left |
Расстояние от левой границы компонента до левой границы формы |
Top |
Расстояние от верхней границы компонента до верхней границы формы |
|
|
Height |
Высота компонента |
Width |
Ширина компонента |
Font |
Шрифт, используемый для отображения поясняющего текста |
ParentFont |
Признак наследования характеристик шрифта родительской формы |
Increment |
Шаг приращения величины |
MaxValue |
Максимальная величина вводимых исходных данных |
MinValue |
Минимальная величина вводимых исходных данных |
Пример составления программы
Рассмотрим пример программы, демонстрирующий применение описанных компонент.
Пример 5.1.
Дан файл, содержащий следующие данные о сотрудниках: фамилия, возраст, рост, масса. Вывести данные о сотрудниках, которые имеют:
а) возраст не старше 50 лет и рост не выше 180 сантиметров;
б) массу не менее 70 килограмм и рост не ниже 160 сантиметров;
в) массу не более 90 килограмм и возраст не моложе 30 лет.
Поместим на форму компонент GroupBox, а затем поместим на него три компонента типа CheckBox, три компонента типа Combobox и три компонента типа SpinEdit. При правильной последовательности действий все компоненты, находящиеся на компоненте GroupBox, при перемещении его по форме будут перемещаться вместе с ним. Так же добавим один компонент StringGrid и два компонента типа Button. Примерное расположение компонент на форме показано на рис.5.1.
Рис. 5.1. Внешний вид формы
Для компонент типа ComboBox зададим соответствующие альтернативы (см. работу №2): Combobox1 – «не старше», «не моложе»; ComboBox2 – «не выше», «не ниже»; ComboBox3 – «не больше», «не меньше».
Компонент StringGrid будем использовать для вывода результатов работы программы. При его создании присвоим свойствам FixedCols и FixedRows значения 0 и 1 соответственно, что позволит использовать первую строку в качестве заголовка для соответствующих столбцов таблицы. Свойство FixedRows=1 будет означать, что первая строка зафиксирована, т.е. не будет перемещаться при использовании полосы прокрутки.
Величины свойств MinValue и MaxValue компонент типа SpinEdit будут определены в процессе чтения данных из файла. Это сделано для большей универсальности работы программы, что позволит не корректировать данные величины при смене исходных данных. Последние будут находиться в файле data.inp, который пользователю необходимо сформировать самостоятельно. Файл, использованный в программе, приведен ниже:
Иванов
30
170
80
Петров
42
185
98
Сидоров
26
160
60
Васечкин
32
169
88
Колокольчиков
51
175
70
Под каждого человека выделено 4 строки. Первая содержит в себе фамилию, вторая – возраст, третья – рост, четвертая – вес. При чтении из файла данные заносятся в массив, состоящий из элементов типа record.
Функции чтения информации из файла исходных данных, определение величин свойств MinValue и MaxValue компонентов типа SpinEdit, а так же заполнения заголовков столбцов таблицы возложены на процедуру TForm1.FormActivate (см. пример создания в работе №2). Текст этой процедуры приведен ниже:
procedure TForm1.FormActivate(Sender: TObject);
Var ff:TextFile;
Begin
StringGrid1.Cells[0,0]:='Фамилия';
StringGrid1.Cells[1,0]:='Возраст';
StringGrid1.Cells[2,0]:='Рост';
StringGrid1.Cells[3,0]:='Масса';
AssignFile(ff,'data.inp');
Reset(ff);
count:=0;
SpinEdit1.MinValue:=1000;
SpinEdit2.MinValue:=1000;
SpinEdit3.MinValue:=1000;
SpinEdit1.MaxValue:=0;
SpinEdit2.MaxValue:=0;
SpinEdit3.MaxValue:=0;
while not eof(ff) do
begin
count:=count+1;
readln(ff,person1[count].famil);
readln(ff,person1[count].vozr);
if person1[count].vozr<SpinEdit1.MinValue then
SpinEdit1.MinValue:=person1[count].vozr;
if person1[count].vozr>SpinEdit1.MaxValue then
SpinEdit1.MaxValue:=person1[count].vozr;
readln(ff,person1[count].rost);
if person1[count].rost<SpinEdit2.MinValue then
SpinEdit2.MinValue:=person1[count].rost;
if person1[count].rost>SpinEdit2.MaxValue then
SpinEdit2.MaxValue:=person1[count].rost;
readln(ff,person1[count].massa);
if person1[count].massa<SpinEdit3.MinValue then
SpinEdit3.MinValue:=person1[count].massa;
if person1[count].massa>SpinEdit3.MaxValue then
SpinEdit3.MaxValue:=person1[count].massa;
end;
CloseFile(ff);
SpinEdit1.Value:=SpinEdit1.MinValue;
SpinEdit2.Value:=SpinEdit2.MinValue;
SpinEdit3.Value:=SpinEdit3.MinValue;
end;
После запуска программы необходимо выбрать соответствующие параметры, для которых будет проводиться обработка исходных данных (см. рис.2) и нажать клавишу «Вывод данных». После этого запустится процедура TForm1.Button1Click, предназначенная для обработки исходных данных в соответствии с выбранными параметрами. Ее текст представлен ниже.
Рис.5.2. Пример выбора параметров при работе с программой
procedure TForm1.Button1Click(Sender: TObject);
Var count1,count2,i,j:integer;
Begin
{Очистка таблицы}
for i:=1 to count do
for j:=1 to 4 do
StringGrid1.Cells[j-1,i]:='';
person2:=person1;
{Возраст}
if CheckBox1.Checked then
begin
if ComboBox1.ItemIndex=0 then
begin
for i:=1 to count do
if person2[i].vozr<SpinEdit1.Value then
begin
person2[i].famil:='1';
end;
end;
if ComboBox1.ItemIndex=1 then
begin
for i:=1 to count do
if person2[i].vozr>SpinEdit1.Value then
person2[i].famil:='1';
end;
end;
{рост}
if CheckBox2.Checked then
begin
if ComboBox2.ItemIndex=0 then
begin
// не выше
for i:=1 to count do
if person2[i].rost>SpinEdit2.Value then
person2[i].famil:='1';
end;
if ComboBox2.ItemIndex=1 then
begin
// не ниже
for i:=1 to count do
if person2[i].rost<SpinEdit2.Value then
person2[i].famil:='1';
end;
end;
{масса}
if CheckBox3.Checked then
begin
if ComboBox3.ItemIndex=0 then
begin
for i:=1 to count do
if person2[i].massa>SpinEdit3.Value then
person2[i].famil:='1';
end;
if ComboBox3.ItemIndex=1 then
begin
for i:=1 to count do
if person2[i].massa<=SpinEdit3.Value then
person2[i].famil:='1';
end;
end;
{вывод результатов}
count1:=0;
for i:=1 to count do
begin
if person2[i].famil<>'1' then
begin
count1:=count1+1;
StringGrid1.Cells[0,count1]:=person2[i].famil;
StringGrid1.Cells[1,count1]:=IntToStr(person2[i].vozr);
StringGrid1.Cells[2,count1]:=IntToStr(person2[i].rost);
StringGrid1.Cells[3,count1]:=IntToStr(person2[i].massa);
end;
end;
end;
Условие выбора того или иного параметра определяется структурой типа if CheckBox.Checked then. Если параметр выбран, то определяется предел, по которому в дальнейшем будет проводиться обработка исходных данных (структура типа if ComboBox.ItemIndex=0 ) и производятся необходимые операции выбора.
Результаты работы программы представлены на рис. 5.3.
Рис. 5.3. Результаты работы программы