Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
osnovy_programmirovanija_v_srede_lazarus.pdf
Скачиваний:
185
Добавлен:
18.03.2015
Размер:
6.53 Mб
Скачать

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

____________________________________________________________________

них также можно поместить некоторое изображение. Разумеется, их можно ис-

пользовать и как обычные кнопки. Отличительной особенностью этих кнопок является возможность фиксации нажатого состояния. Для этого используются свойства GroupIndex и AllowAllUp.

По умолчанию свойство GroupIndex имеет значение 0. В этом случае кнопка ведет себя как обычная кнопка. Если значение GroupIndex > 0, то при нажатии на кнопку она останется в нажатом состоянии. Если свойству

AllowAllUp присвоить значение = true, то при повторном нажатии на кнопку она возвратится в нормальное состояние.

Если присвоить свойствам GroupIndex нескольких кнопок одинаковое значение > 0, то при нажатии следующей кнопки она останется в нажатом состоянии, а предыдущая кнопка вернется в обычное отжатое состояние (свой-

ство AllowAllUp должно иметь значение = true для всех этих кнопок).

Узнать в каком состоянии находится кнопка (нажатом или отжатом) можно по свойству Down. Если Down = true, то кнопка в нажатом состоянии.

6.3.6 Организация ввода данных. Однострочные редакторы TEdit, TLa-

beledEdit

Любая программа в своей работе использует какие-то исходные данные.

Чаще всего эти данные вводятся пользователем с клавиатуры.

Для организации ввода используются компоненты TEdit, TLabeledEdit и др. Сигналом завершения ввода и начала обработки вве-

денных данных служит обычно нажатие пользователем кнопки. Для заверше-

ния ввода также часто используется клавиша Enter.

6.3.6.1. Компонент TEdit

С помощью этого компонента можно вводить и редактировать некоторый

504

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

____________________________________________________________________

текст. Этот компонент носит также название однострочный редактор.

Text – вводимое значение содержится в этом свойстве в виде строки сим-

волов. По умолчанию содержит строку "Edit1".

AutoSelect – если установлено значение True, то при передаче фокуса на компонент, весь текст в поле редактирования будет выделен.

ReadOnly – если установлено значение True, то текст в поле редактиро-

вания доступен только для чтения, при этом сохраняется возможность копиро-

вания текста в буфер обмена.

Рассмотрим пример, консольный вариант которого мы рассматривали в разделе 3.3.1.3. Сделаем этот же пример в виде графического приложения. Как вы помните, в примере имитировался случай авторизации пользователя для входа в систему.

Перенесите на форму компонент TEdit, очистите свойство Text. Также нам понадобятся кнопка и надпись. Расположите их на форме так, как показано на рисунке 6.29, соответственно изменив свойства Caption формы, надписи и кнопки.

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

В редакторе исходного кода в обработчик события OnCreate формы введите следующий код:

procedure TForm1.FormCreate(Sender: TObject);

begin

passw:= '1234';

505

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

____________________________________________________________________

n:= 1;

end;

А в обработчик OnClick кнопки следующий код:

procedure TForm1.Button1Click(Sender: TObject); begin

if passw <> Edit1.Text then begin

Edit1.SetFocus; if n = 1 then begin

ShowMessage('Неправильный пароль!'); inc(n);

end else begin

if n = 3 then begin

ShowMessage('Вам отказано в доступе');

Close();

end else begin

Stroka:= 'Вы ' + IntToStr(n) + ' раза ввели неправиль-

ный пароль';

Stroka:= Stroka + ' После 3-й попытки вам будет отказано в

доступе';

ShowMessage(Stroka);

506

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

____________________________________________________________________

inc(n);

end

end

end

else

begin

ShowMessage('Вы успешно авторизовались!');

Close();

end;

end;

В разделе описания переменных модуля, добавьте следующие описания переменных:

var

Form1: TForm1;

passw: string[4];

Stroka: string;

n: integer;

Обратите внимание – чтобы введенные нами переменные были доступны в обработчиках, мы поместили их объявления в разделе interface.

Запустите приложение и поэкспериментируйте с вводом различных паро-

лей. Правильный пароль "1234".

В программе мы использовали функцию IntToStr(n), которая перево-

дит целое число в ее строковое представление и стандартную процедуру

ShowMessage, для вывода сообщения с кнопкой ОК. Единственным парамет-

ром этой процедуры является строка символов.

Можно ли улучшить программу?

Многие пользователи привыкли завершать ввод в однострочном редакторе

507

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

____________________________________________________________________

нажатием клавиши Enter. Для того чтобы реализовать эту возможность про-

сто установите у кнопки свойство Default равным True в инспекторе объектов. Однако учтите, если у вас в программе несколько кнопок, то сработа-

ет та кнопка, которая имеет в этот момент фокус ввода. Отслеживать фокус при большом числе компонентов становится делом довольно обременительным.

Выход заключается в написании обработчика в компоненте Edit1 на событие

OnKeyPress. В этом обработчике имеется параметр Key, которому система передает код нажатой клавиши. Код клавиши Enter равен #13 (см. табл. 3.4. в

разделе 3.3.1). Отсюда обработчик будет выглядеть следующим образом:

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

begin

if Key <> #13 then exit;

if passw <> Edit1.Text then begin

Edit1.SetFocus; if n = 1 then begin

ShowMessage('Неправильный пароль!'); inc(n);

end else begin

if n = 3 then begin

ShowMessage('Вам отказано в доступе');

Close();

end

508

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

____________________________________________________________________

else begin

Stroka:= 'Вы ' + IntToStr(n)+ ' раза ввели неправильный

пароль';

Stroka:= Stroka + ' После 3-й попытки вам будет отказано в

доступе';

ShowMessage(Stroka);

inc(n); end

end end else begin

ShowMessage('Вы успешно авторизовались!');

Close();

end;

end;

От обработчика Button1Click код отличается лишь одним первым оператором

if Key <> #13 then exit;

К сожалению, здесь имеет место почти полное дублирование кода. Чтобы избежать этого создадим процедуру и в обработчиках будем просто ее вызы-

вать. Окончательно программа будет иметь вид:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses

509

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

____________________________________________________________________

Classes, SysUtils, FileUtil, LResources, Forms,

Controls, Graphics, Dialogs,

StdCtrls;

type

{ TForm1 }

TForm1 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Label1: TLabel;

procedure Button1Click(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: char);

procedure FormCreate(Sender: TObject); procedure avtorization;

private

{private declarations } public

{public declarations } end;

var

Form1: TForm1; passw: string[4]; Stroka: string; n: integer;

implementation { TForm1 }

510

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

____________________________________________________________________

procedure TForm1.avtorization; begin

if passw <> Edit1.Text then begin

Edit1.SetFocus; if n = 1 then begin

ShowMessage('Неправильный пароль!'); inc(n);

end else begin

if n = 3 then begin

ShowMessage('Вам отказано в доступе');

Close();

end else begin

Stroka:= 'Вы ' + IntToStr(n) + ' раза ввели неправиль-

ный пароль';

Stroka:= Stroka + ' После 3-й попытки вам будет отказано в

доступе';

ShowMessage(Stroka);

inc(n); end

end end else

511

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]