Мансуров. Основы программирования в среде Lazarus. 2010
.pdfГлава 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