.
Delphi. Урок 7.1. Объявление процедур в Delphi (procedure, var, messageDlg).
Автор megabax   
07.07.2009 г.
<strong>Продолжим изучать поиск и замену. Функция Delphi StringReplace</strong>

Объявление процедур в Delphi (procedure, var, messageDlg).

На этом уроке мы не будет изучать компоненты, а поговорим о структуре программы на Object Pascal, потому что на следующем уроке нам потребуются кое какие специфические знания.

И так, положим на форму два поля ввода edTest1 и edTest2, а так же две кнопки btnSumma и btnCopy. Форму назовем frmPascalDemo*.

Объявление процедур в Delphi (procedure, var, messageDlg).

 

В раздел interface добавим определение процедур (выделено красным цветом):

 

unit pascal;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;

 

type

  TfrmPascalDemo = class(TForm)

    edTest1: TEdit;

    edTest2: TEdit;

    btnSumma: TButton;

    btnCopy: TButton;

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

  procedure ShowSumma(r1,r2:real);

  procedure ShowSummaCopy(r1:real; var r2:real);

 

 

Объявив эти процедуры, мы, тем самым, по сути, добавляем в язык программирования новые слова. Тоесть, написав в разделе interface

 

 procedure ShowSumma(r1,r2:real);

 

мы в дальнейшем, сможем написать в программе конструкцию типа (в скобках могут быть любые другие числа):

 

ShowSumma(1.23,1.15)

 

Однако мы не определили, а что компьютер должен делать, когда встретит эти новые слова. Для этого в разделе implementation добавим такой текст:

 

procedure ShowSumma(r1,r2:real);

begin

  r2:=r1+r2;

  messageDlg(FloatToStr(r2),mtInformation,[mbOk],0);

end;

 

procedure ShowSummaCopy(r1:real; var r2:real);

begin

  r2:=r1+r2;

  messageDlg(FloatToStr(r2),mtInformation,[mbOk],0);

end;

 

По сути, вторая процедура отличается от первой только наличием модификатора var перед объявлением параметра. Этот модификатор означает, что при изменении параметра внутри процедуры, то он изменяется и во вне. А если этого модификатора, то во вне он остается прежний. Что бы продемонстрировать это, напишем обработчики события OnClick обеих кнопок:

 

procedure TfrmPascalDemo.btnSummaClick(Sender: TObject);

var r1,r2:real;

begin

   r1:=StrToFloat(edTest1.Text);

   r2:=StrToFloat(edTest2.Text);

   ShowSumma(r1,r2);

   edTest2.Text:=FloatToStr(r2);

end;

 

procedure TfrmPascalDemo.btnCopyClick(Sender: TObject);

var r1,r2:real;

begin

   r1:=StrToFloat(edTest1.Text);

   r2:=StrToFloat(edTest2.Text);

   ShowSummaCopy(r1,r2);

   edTest2.Text:=FloatToStr(r2);

end;

 

 

Теперь запустим программу. При нажатии на кнопку «Сумма» программа покажет нам сумму введенных чисел*:

 

Объявление процедур в Delphi (procedure, var, messageDlg).

 

А если мы нажмем кнопку «Копировать», то программа не только покажет сумму, но еще и поставит ее в нижнее поле ввода.

Теперь немножко пояснений.

В первом случае при выполнении команды

 

ShowSumma(r1,r2);

 

Значение переменной r2, которую мы присваиваем свойству Text, выполняя команду

 

edTest2.Text:=FloatToStr(r2);

 

остается прежней. А вот при выполнении команды

 

ShowSummaCopy(r1,r2);

 

В переменной r2 остается значение, равное сумме параметров, потому что r2 в параметрах объявлена с модификатором var.

 

 


Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями   программного продукта "Delphi", авторское право на который принадлежит "Borland Software Corporation".


 

 

 

Последнее обновление ( 22.06.2012 г. )