Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Мансуров. Основы программирования в среде Lazarus. 2010

.pdf
Скачиваний:
45
Добавлен:
27.04.2021
Размер:
6.3 Mб
Скачать

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

procedure ComboBox1Select(Sender: TObject); procedure FormCreate(Sender: TObject);

private

{private declarations } public

{public declarations } end;

var

Form1: TForm1; implementation

procedure TForm1.ComboBox1Select(Sender: TObject); begin

with ComboBox1 do case ItemIndex of

0:ShowMessage('Это отличник');

1:ShowMessage('Это двоечник');

2:ShowMessage('А этот середняк');

else

ShowMessage('Никто не выбран'); end;

end;

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: char);

begin

if Key = #13 then ComboBox1Select(Sender); end;

procedure TForm1.FormCreate(Sender: TObject); begin

ComboBox1.ItemIndex:= 0;

631

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

end;

initialization

{$I unit1.lrs}

end.

Сделаем более полезную программу. Предположим, в некоторых тексто-

вых файлах содержатся списки нескольких групп студентов. Пусть для опреде-

ленности групп будет три. Необходимо, в зависимости от выбора пользователя,

выводить список студентов выбранной группы. Список группы будем выводить в TListBox. В новом проекте сформируйте вид окна вашего приложения, рис.

6.65.

Рис. 6.65. Форма приложения

В свойстве Items введите любые три названия групп, например, как на рисунке 6.66.

Рис. 6.66. Диалог ввода строк в компонент

632

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

Создайте три текстовых файла с именами List1.txt, List2.txt и List3.txt с фамилиями студентов. Заполнять TListBox содержимым файла мы уже умеем, для простоты предположим, что файлы находятся в той же пап-

ке, что и наше приложение. Код программы:

unit Unit1;

{$mode objfpc}{$H+} interface

uses

Classes, SysUtils, FileUtil, LResources, Forms,

Controls, Graphics, Dialogs, StdCtrls, LCLType;

type

{ TForm1 }

TForm1 = class(TForm)

ComboBox1: TComboBox;

Label1: TLabel;

Label2: TLabel;

ListBox1: TListBox;

procedure ComboBox1KeyPress(Sender: TObject; var Key: char);

procedure ComboBox1Select(Sender: TObject); procedure FormCreate(Sender: TObject); procedure LoadListGroup(namefile: string);

private

{private declarations } public

{public declarations } end;

var

633

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

Form1: TForm1; implementation { TForm1 }

procedure TForm1.LoadListGroup(namefile: string); var

tfile: TStringList; str: string;

begin

tfile:= TStringList.Create; tfile.LoadFromFile(namefile); str:= tfile.Text;

{$IFDEF WINDOWS}

str:= SysToUTF8(str); // преобразование в кодировку UTF-8

{$ENDIF}

with ListBox1 do begin

Items.Text:= str; end;

tfile.Free; ListBox1.Sorted:= true;

end;

procedure TForm1.ComboBox1Select(Sender: TObject); begin

with ComboBox1 do begin

Label2.Caption:='Список группы ' + Text; case ItemIndex of

0: LoadListGroup('List1.txt');

634

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

1:LoadListGroup('List2.txt');

2:LoadListGroup('List3.txt'); else

ShowMessage('Группа не выбрана'); end;

end;

end;

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: char);

begin

if Key = #13 then begin

ComboBox1Select(Sender);

Key:=#0;

end;

end;

procedure TForm1.FormCreate(Sender: TObject); begin

ComboBox1.ItemIndex:= 0;

ComboBox1.Style:= csDropDownList;

end; initialization

{$I unit1.lrs} end.

Загрузку в TListBox содержимого текстового файла мы оформили в виде процедуры, в которую в качестве параметра передается имя файла, соответст-

вующее выбранной группе.

В заключение рассмотрим пример, как в TComboBox реализуются коррек-

635

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

тировка и добавление элементов в список. Создайте форму, рис. 6.67.

Рис. 6.67. Форма приложения

Теперь уже установите свойство Style компонента ComboBox1 рав-

ным csDropDown. В свойстве Items введите любые данные. В обработчи-

ке OnSelect в переменной oldItemIndex мы запоминаем индекс выбран-

ного элемента. Если нажата кнопка "Изменить", то оператор

ComboBox1.Items[oldItemIndex]:= ComboBox1.Text;

изменит выбранный элемент новым содержимым. Если пользователь нажмет

кнопку "Добавить", то оператор

ComboBox1.Items.Add(ComboBox1.Text);

добавит новую запись в список.

unit Unit1;

{$mode objfpc}{$H+} interface

uses

Classes, SysUtils, FileUtil, LResources, Forms,

Controls, Graphics, Dialogs, StdCtrls;

636

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

type

{ TForm1 }

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

ComboBox1: TComboBox;

procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ComboBox1Select(Sender: TObject); procedure FormCreate(Sender: TObject);

private

{private declarations } public

{public declarations } end;

var

Form1: TForm1; oldItemIndex: integer;

implementation { TForm1 }

procedure TForm1.ComboBox1Select(Sender: TObject); begin

oldItemIndex:= ComboBox1.ItemIndex; end;

procedure TForm1.FormCreate(Sender: TObject); begin

ComboBox1.ItemIndex:= 0;

ComboBox1.Style:= csDropDown;

end;

637

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

procedure TForm1.Button1Click(Sender: TObject); begin

if ComboBox1.ItemIndex = - 1 then ComboBox1.Items[oldItemIndex]:= ComboBox1.Text;

end;

procedure TForm1.Button2Click(Sender: TObject); begin

if ComboBox1.ItemIndex = - 1 then ComboBox1.Items.Add(ComboBox1.Text);

end; initialization

{$I unit1.lrs} end.

Компоненты выбора – переключатели

Эта группа компонентов реализуют такие элементы графического интер-

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

состояний и т.д. Таким образом, в этих компонентах, в отличие от таких ком-

понентов как TListBox и TComboBox, производится выбор не данных как та-

ковых, а каких-то свойств и характеристик объектов, используемых в приложе-

нии. Выбор пользователя в этих компонентах подразумевает ответ пользовате-

ля типа "Да", "Нет". Рассмотрим компонент TCheckBox.

Этот компонент реализует элемент графического интерфейса флажок.

Применяется также термин индикатор. Многие программисты говорят также просто "чек бокс". Обычно в диалоговом окне присутствуют несколько флаж-

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

638

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

Рис. 6.68. Вид компонента TCheckBox

Основные свойства компонента:

State – компонент TCheckBox может находиться в общем случае в трех состояниях:

1.Флажок выбран, в окошке компонента стоит галочка. Этому состоянию соответствует значение State=cbChecked;

2.Флажок не выбран, в окошке компонента галочка отсутствует. Этому со-

стоянию соответствует значение State=cbUnchecked;

3. Флажок выбран, в окошке компонента стоит галочка. Но само окошко и галочка серого цвета. Этому состоянию соответствует значение

State=cbGrayed; Это, так называемое, промежуточное состояние. Чаще всего применяется в тех случаях, когда тот или иной режим, та или иная оп-

ция должна быть обязательно выбрана (задействована), но так, чтобы поль-

зователь был проинформирован об этом. Очень часто это состояние исполь-

зуется в комбинации со свойством Enabled=false, т.е. данная опция ав-

томатически установлена, пользователь об этом знает, но менять эту опцию нельзя.

AllowGrayed – разрешает или не разрешает применение состояния

State=cbGrayed. Если AllowGrayed= false (значение по умолчанию), то возможны только два состояния, флажок выбран и флажок не выбран;

Checked – если Checked = true, то флажок выбран. Значение State= cbChecked. Если же Checked = false, то State равен либо cbUnchecked, либо cbGrayed;

639

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

Caption – задает текст, связанный с флажком;

Для того чтобы определить выбран флажок или нет достаточно записать

оператор

if CheckBox1.Checked then <действия, если флажок выбран> else <действия, если флажок не выбран>;

или

case CheckBox1.State of

cbChecked: < соответствующие действия >; cbUnchecked: < соответствующие действия >; cbGrayed: < соответствующие действия >;

end;

Рассмотрим компонент, реализующий переключатель TRadioButton,

рис. 6.69. Говорят также радиокнопка или зависимый переключатель.

Рис. 6.69. Вид компонента TRadioButton

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

ций, свойств и т.д.). Поэтому необходимо использование как минимум двух компонентов TRadioButton. Свойства компонента:

640