Учебник по Delphi

Процедуры, возвращающие значение.

   Процедуры в Delphi тоже могут возвращать значение. И даже не одно! Из-за этого, конечно, стирается грань между процедурами и функциями. В Delphi различия между процедурами и функциями главным образом есть лишь на уровне синтаксиса. Существует мнение, что процедуры занимают меньше места и чуть быстрее работают. Но не думаю, что на практике эта разница будет заметна. Чтобы процедура возвращала значение, в ее заголовке перед каждой переменной, которая должна возвращать значение, нужно указывать слово var:

procedure TForml.Otchet(var summa:Int64; var skidka:Int64);

   Как это все работает, лучше посмотреть на примере. Некоторые мои знакомые почему-то не помнят, в каком месяце сколько дней. Напишем программу, которая будет подсказывать эти ценные сведения. Причем количество дней как раз и будет передаваться как возвращаемое в переменной значение.

   Создайте в Delphi новый проект: File > New > Application. На форму поместите компоненты ComboBox и этикетки Labell и Label2. В качестве значений свойства Items компонента ComboBox укажите названия месяцев: Январь, Февраль, Март, Апрель, Май, Июнь, Июль, Август, Сентябрь, Октябрь, Ноябрь, Декабрь. Именно так, не Иcкажайте.

   Такую программу можно реализовать разными способами. Способ, который мы применим, предполагает, что месяцы можно вписывать в любом порядке, но сами названия должны быть написаны с большой буквы без ошибок (чтобы совпадали с текстом программы). Теперь приступим непосредственно к написанию программы. Перейдите в Object Inspector на вкладку Events и дважды щелкните мышью на событии OnChange, чтобы открыть редактирование процедуры ComboBoxlChange. Из этой процедуры будем вызывать процедуру WhatMonth (именно процедуру, а не функцию), которой будем сообщать выбранный месяц, а из нее будут возвращаться два параметра: номер месяца и количество дней в нем. Эти значения будем выводить на Labell и Label2.

Пишем процедуру WhatMonth (ее можно расположить до или после ComboBoxlChange).

   Нужно либо вписать ее в класс формы вручную, либо щелкнуть на заголовке процедуры правой кнопкой мыши и выбрать Complete class at cursor.

Листинг 6.4
procedure TForml.WhatMonth.(s: String; var nm, days: Integer);
// определение номера месяца и количества дней
begin
if з=Январь then begin nm := 1; days := 31; end;
if з=Февраль then begin nm := 2; days := 28; end;
if s=Mapr then begin nm := 3; days := 31; end;
if з=Апрель then begin nm := 4; days := 30; end;
if з=Май then begin nm := 5; days := 31; end;
if з=Июнь then begin nm := 6; days := 30; end;
if з=Июль then begin nm := 7; days := 31; end;
if з=Август then begin nm := 8; days := 31; end;
if з=Сентябрь then begin nm := 9; days := 30; end;
if з=0ктябрь then begin nm := 10; days := 31; end;
if з=Ноябрь then begin nm := 11; days := 30; end;
if з=Декабрь then begin nm := 12; days := 31; end;
end;

   Удобнее было бы применить здесь оператор case, но, увы, он не работает с переменными типа string. Обратите внимание на заголовок процедуры. В нее передается переменная s. Результат работы процедуры возвращается через переменные nm и days, поэтому перед ними стоит ключевое слово var.

   Процедуру будем вызывать из ComboBoxlChange. Так что подбор количества дней будет выполняться тогда, когда пользователь поменяет месяц в списке.

Листинг 6.5
procedure TForml.ComboBox1Change(Sender: TObject);
var
k1, K2: Integer;
begin
WhatMonth(ComboBox1.Text,k1,k2);
LabeИ.Caption := Номер месяца в году + IntToStr(kl);
Label2.Caption := Количество дней в этом месяце + lntfoStr(k2);
end;

   Значения переменных nm и days в процедуре whatMonth возвращаются в переменные kl и k2. Можете запустить программу и посмотреть, что все работает: значения подбираются в процедуре WhatMonth, передаются в ComboBoxlChange и уже оттуда выводятся на экран.




 

Рейтинг@Mail.ru          Rambler's Top100

X-ZiBiT