Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие Delphi.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

15Работа со списками и переключателями

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

Delphi предлагает следующие компоненты для работы с переключателями: ChekBox, RadioButton и RadioGroup. Переключатели можно разделить на зависимые (RadioButton) и независимые переключатели (ChekBox).

15.1 Компонент ChekBox

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

Для анализа состояния переключателя используется свойство Checked типа Boolean. По умолчанию оно имеет свойство False (переключатель не установлен). Во время выполнения приложения пользователь может поменять состояние переключателя щелчком мыши. Если переключатель был сброшен, то после щелчка мыши он установится и, наоборот:

CheckBox1.Checked:=true; // установка включенного состояния

// переключателя

……………………………

if CheckBox1.Checked then ………. //анализ состояния

//переключателя (делать что-то, если переключатель установлен)

Кроме двух состояний (включен/ выключен) переключатель может находиться в отмененном состоянии. В этом состоянии цвет галочки в прямоугольнике - серый. Если программист желает иметь у своего переключателя данное состояние, то необходимо свойству AllowGrayed типа Boolean установить в значение True.

Для анализа и установки состояния переключателя используется свойство State типа TCheckBoxState, которое может принимать следующие значения:

  • cbUnchecked – переключатель сброшен

  • cbChecked – переключатель установлен

  • cbGrayed – переключатель запрещен

На рисунке 32 представлена форма с тремя возможными состояниями переключателя.

Рисунок 32 - Состояние переключателя CheckBox

При выборе пользователем текущего переключателя возникает событие onClick.

15.2Компонент RadioButton

Переключатели с зависимой фиксацией – компонент RadioButton, также называется кнопкой выбора. Данный компонент представляет собой надпись с кругом слева, в который можно поставить точку. Обычно кнопки выбора располагаются по отдельным группам. Выбор переключателя является взаимоисключающим, т.е. при выборе одного переключателя все остальные сбрасываются (становятся невыбранными). Для формирования групп переключателей используются такие компоненты как форма Form, панель Panel, группа GroupBox и специализированный контейнер RadioGroup.

Для того, чтобы объединить переключатели в группу, достаточно положить их на соответствующий компонент. При использовании компонента RadioGroup этого делать не нужно, чтобы добавить или удалить элемент, необходимо использовать свойство Items типа TStrings в Инспекторе объектов или программно. Данное свойство содержит строки, которые отображаются как названия переключателя. Обращение в программе к конкретному элементу доступно через свойство ItemIndex типа Integer, нумерация которого начинается с нуля. Рекомендуется установить начальные значения для данного компонента, например, выбрав нужный переключатель в методе формы onShow, иначе ни один из переключателей не будет выбран до того, как пользователь не установит его, а свойство ItemIndex будет равно -1.

Для управления количеством столбцов используется свойство Columns, имеющее по умолчанию значение 1.

Пример 16. Рассчитать значения функции на интервале [а,b] с шагом h. В зависимости от выбора пользователя, результаты расчета поместить в таблицу, нарисовать график или записать в файл. (продолжение примера 15)

Преобразуйте форму, разработанную для примера 15 в форму, представленную на рисунке 33 (под компонентом Chart находится компонент StringGrid).

Рисунок 33 - Внешний вид приложения

В начале работы приложения на форме не должно быть видно окно результатов расчета (ни график, ни таблица) и выбрана первая позиция в компоненте RadioGroup, поэтому добавим метод формы OnShow следующим кодом:

procedure TForm1.FormShow(Sender: TObject);

begin

// начало такое же, как и в примере 15

Form1.StringGrid1.Visible:=false;

Form1.Chart1.Visible:=false;

Form1.RadioGroup1.ItemIndex:=0;

end;

Программа расчета с учетом всех обновлений выглядит так:

procedure Clear; // процедура очистки

var

i:integer;

begin

for i:=1 to Form1.StringGrid1.RowCount-1 do

begin

Form1.StringGrid1.Cells[0,i]:='';

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

end;

Form1.Chart1.SeriesList.Series[0].Clear;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

var

a,b,y:real;

i:integer;

Raschet:TextFile;

begin

a:=StrToFloat(Form1.LabeledEdit1.Text);

b:=StrToFloat(Form1.LabeledEdit2.Text);

if a>=b then

begin

Mr:=MessageDlg('Данные введены неверно.

Ввести заново?', mtConfirmation,

[mbYes, mbNo,mbCancel],0);

if Mr=mrYes then

Form1.FormShow(Sender);

exit;

end;

h:=StrToFloat(InputBox('Ввод шага

расчета','Введите шаг','1'));

Form1.StringGrid1.Cells[0,0]:=' x ';

Form1.StringGrid1.Cells[1,0]:=' y ';

i:=1;

Clear;

case Form1.RadioGroup1.ItemIndex of

0:begin

Form1.StringGrid1.Visible:=true;

Form1.Chart1.Visible:=false;

end;

1:begin

Form1.StringGrid1.Visible:=false;

Form1.Chart1.Visible:=true;

end;

2:begin

Form1.StringGrid1.Visible:=false;

Form1.Chart1.Visible:=false;

if Form1.SaveDialog1.Execute then

begin

AssignFile(Raschet,

Form1.SaveDialog1.FileName);

Rewrite(Raschet);

end;

end;

end;

while a<=b do

begin

y:=a*a;

case Form1.RadioGroup1.ItemIndex of

0:

begin

if i>Form1.StringGrid1.RowCount

then Form1.StringGrid1.RowCount:=

Form1.StringGrid1.RowCount+1;

Form1.StringGrid1.Cells[0,i]:=

FloatToStr(a);

Form1.StringGrid1.Cells[1,i]:=

FloatToStr(y);

end;

1: Form1.Chart1.SeriesList.Series[0].

AddXY(a,y,'',clRed);

2: WriteLn(Raschet,FloatToStr(a)+

' '+FloatToStr(y));

end;

a:=a+h;

inc(i);

end;

if Form1.RadioGroup1.ItemIndex=2

then CloseFile(Raschet);

end;