Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Разработка процедур обработки событий для полей редактирования





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

  • в поля исходных данных модели допускается вводить только положительные числа, а ввод других символов программа должна блокировать;
  • числа, вводимые в поля Edit3 и Edit5, не должны быть равны или больше чисел, вводимых в поля соответственно Edit2 и Edit4 (стандартное отклонение должно быть в пять раз и более меньше математического ожидания);
  • во время ввода данных модели при нажатии на клавишу Enter курсор автоматически должен перемещаться в поле ввода следующего числа. Если клавиша Enter нажата во время ввода в поле Edit7, программа должна перейти к вводу в первую таблицу;
  • при обнаружении ошибок при вводе в поля Edit3 или Edit5 курсор должен быть соответственно в одном из них;
  • если в какое - то поле не введена хотя бы одна цифра (поле пустое) и нажата клавиша Enter, то возникает ошибка, о чем выдается сообщение, и ввод нужно повторить.

Чтобы программа удовлетворяла вышеприведенным требованиям, надо для каждого поля редактирования написать процедуру обработки события OnKeyPress, которая в зависимости от того, какую клавишу нажал пользователь, будет выполнять нужное действие.

Заготовка процедуры OnKeyPress для Edit1, генерируемая Delphi, выглядит следующим образом:

Procedure Tform1.Edit1KeyPress(Sender:Tobject; var Key:Char);

begin

end;

Заголовок процедуры Edit1KeyPress показывает, что процедура в качестве параметра получает символьную переменную Key. Эта переменная содержит символ, соответствующий нажатой клавише. Следует обратить внимание на то, что параметр принимается по ссылке (перед именем переменной стоит слово var), поэтому процедура может изменить значение переменной. Символ, соответствующий нажатой клавише, появляется в поле редактирования после выполнения процедуры обработки события OnKeyPress, поэтому процедура обработки может заменить введенный символ или присвоением переменной Key значения Chr(0) запретить его появление в поле редактирования.

Ниже приведен программный код процедуры обработки события OnKeyPress в поле редактирования.

рrocedure TForm1.Edit1KeyPress(Sender:Tobject; var Key:Char);

begin

case Key of

'0'..'9',Chr(8):;

'-':Key:=Chr(0);

',':if pos(',',Edit1.text)<> then Key:=Chr(0);

Chr(13):Edit2.SetFocus

'.': begin

MessageDlg('Для отделения дробной части' +'числа'+#13

+'от целой используйте запятую', mtInformation, [mbOk],0);

Key:=Chr(0);

end;

else Key:=Chr(0);

end;

end;

Процедура TForm1.Edit1KeyPress проверяет, какая клавиша нажата при вводе исходных данных в поле редактирования Edit1. Если нажата клавиша BackSprace, то процедура завершает свою работу и символ появляется в поле редактирования или стирается последний введённый символ. Если нажата запятая, то процедура проверяет, есть ли уже запятая в поле редактирования. Если есть, то ввод второй запятой блокируется. Если нажата клавиша "-", то ввод её тоже блокируется. Если нажата клавиша Enter, то применением метода SetFocus к полю редактирования Edit2 курсор перемещается в это поле.

Процедуры обработки события OnKeyPress полей редактирования отличаются только способом обработки нажатия клавиши Enter (в поле Edit1 Edit2.SetFocus, в поле Edit2 Edit3.SetFocus и т.д., а в поле Edit7

then

begin

FormActivate1(Sender);

Tabl1.SetFocus;

end;

В остальном эти процедуры идентичны. Поэтому вместо написания процедур обработки события OnKeyPress для каждого поля редактирования можно написать одну общую процедуру, которая при нажатии Enter будет выбирать нужное действие в зависимости от того, в каком поле произошло событие. Получить информацию об источнике события можно проверкой значения параметра Sender.

Создайте в разделе implementation программный код процедур EditKeyPress и FormActivate1(см. п. 8.3.3).

procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);

var

nak:string[20];

begin

if Sender=Edit1 then

nak:=Edit1.text

else if Sender=Edit2 then

nak:=Edit2.text

else if Sender=Edit3 then

nak:=Edit3.text

else if Sender=Edit4 then

nak:=Edit4.text

else if Sender=Edit5 then

nak:=Edit5.text

else if Sender=Edit6 then

nak:=Edit6.text

else nak:=Edit7.text;

case Key of

'0'..'9',Chr(8):;

'-':Key:=Chr(0);

',':if pos(',',nak) <>0 then Key:=Chr(0);

Chr(13):if Sender=Edit1

then Edit2.SetFocus

else if Sender=Edit2

then Edit3.SetFocus

else if Sender=Edit3

then Edit4.SetFocus

else if Sender=Edit4

then Edit5.SetFocus

else if Sender=Edit5

then Edit6.SetFocus

else if Sender=Edit6

then Edit7.SetFocus

else if Sender=Edit7

then

begin

FormActivate1(Sender);

Tabl1.SetFocus;

end;

'.':begin

MessageDlg('Для отделения дробной'

+'части от целой'+#13

+'используйте запятую',

mtInformation,[mbOk],0);

Key:=Chr(0);

end;

else Key:=Chr(0)

end;

end;

Объявите в интерфейсной части:

type TForm1 = class(TForm)

Edit1: TEdit;

procedure FormActivate1(Sender: TObject);

private

Теперь выделите компонент Edit2 и на вкладке Events раскройте список. Из списка для onKeyPress щелчком установите EditKeyPress. Проделайте тоже для компонентов Edit3 … Edit7.

Date: 2015-07-17; view: 396; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию