Delphi-Help

  • Increase font size
  • Default font size
  • Decrease font size

Procedure

Печать
Рейтинг пользователей: / 1
ХудшийЛучший 

Procedure

Описание

1 Procedure Name; {Directives;}

2 Procedure Name(Parameters); {Directives;}

3 type Name = Procedure{(Parameters)} {of object};

Ключевое слово Procedure определяет подпрограмму, которая не возвращает значение.

Версия 1: Определяет процедуру, которая работает без параметров. Версия 2: Определяет процедуру, которой передаётся один или более параметров.

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

Reintroduce : Переопределяет подавленную функцию
Overload : Позволяет иметь одинаковые названия для 2 или более функций
Virtual : Может быть переопределен в дочернем классе
Override : Переопределяет родительский метод класса
Abstract : Вызывает дочерний класс для выполнения

Версия 3: Определяет процедуру как тип данных. Это позволяет процедуре быть переданным как параметр, и использоваться как переменная. Определение типов определяет только конфигурацию процедуры - а не название.

Переменной данного типа можно присвоить имя любой процедуры с её конфигурацией. Когда присвоено, имя переменной может быть обработано, как будто это название процедуры. См. код примера.

Опция Of Object позволяет Вам обращаться к объектному методу. Обращайтесь к переменной такого типа, как будто Вы вызываете объектный метод непосредственно. См. второй пример.

Пример кода

// Полный код Модуля.
// -----------------------------------------------------------
// Вы должны поместить этот код в модуль с именем Unit1 и с формой
// названную Form1, которая имеет событие OnCreate названное FormCreate.

unit Unit1;

interface

uses
// Модуль System не нуждается в определении
Forms, Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;

var
Form1: TForm1;

implementation
{$R *.dfm} // Вложение определений формы

Procedure ShowSum(a, b : Integer);
var
total : Integer;
begin
// Сложение двух чисел
total := a + b;

// Показ суммы
ShowMessageFmt('%d + %d = %d',[a,b,total]);
end;

// Подпрограмма On Create основной формы - наша основная программа
procedure TForm1.FormCreate(Sender: TObject);
begin
// Показ суммы нескольких пар чисел
ShowSum(1,2);
ShowSum(245,62);
end;

end.

1 + 2 = 3
245 + 62 = 307

// Полный код Модуля.
// -----------------------------------------------------------
// Вы должны поместить этот код в модуль с именем Unit1 и с формой
// названную Form1, которая имеет событие OnCreate названное FormCreate.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
// Сам класс формы
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

// В строку функций

Procedure ShowMsg(msg : string);
begin
ShowMessage(msg);
end;

Procedure ShowLongMsg(msg : string);
begin
ShowMessage('Текст сообщения = '+msg);
end;

// Основная линия кода
procedure TForm1.FormCreate(Sender: TObject);
type
TShowProc = Procedure(msg : string);

var
showProc : TShowProc;

begin
// Использование ShowMsg косвенно
ShowMessage('Используя ShowMsg косвенно :');
ShowMsg('Привет Мир');

// Использование процедуры ShowMsg непосредственно
ShowMessage('Используя ShowMsg непосредственно :');
showProc := ShowMsg;
showProc('Снова привет');

// Использоване ShowLongMsg косвенно
ShowMessage('Используя ShowLongMsg косвенно :');
showProc := ShowLongMsg;
showProc('Снова привет');
end;

end.

Используя ShowMsg косвенно :
Привет Мир
Используя ShowMsg непосредственно :
Снова привет
Используя ShowLongMsg косвенно :
Текст сообщения = Снова привет

// Полный код Модуля.
// -----------------------------------------------------------
// Вы должны поместить этот код в модуль с именем Unit1 и с формой
// названную
Form1, которая имеет событие OnCreate названное FormCreate.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
//
Определение простого класса
TSimple = class
private
name : string;
public
function GetName : string;
Procedure SetName(name : string);
constructor Create(name : string);
end;

//
Сам класс формы
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

//
Создание простого объекта
constructor TSimple.Create(name: string);
begin
// Save the passed string
self.name := name;
end;

//
Возвращение простого имени
function TSimple.GetName: string;
begin
Result := name;
end;

//
Назначение переданного имени
Procedure TSimple.SetName(name : string);
begin
self.name := name;
end;

//
Основная линия кода
procedure TForm1.FormCreate(Sender: TObject);
type
TNameProc = Procedure(name : string) of object;

var
simple   : TSimple;
nameProc : TNameProc;

begin
//
Создание простого объекта
simple := TSimple.Create('Brian');

//
И установка имени
simple.SetName('New name');

//
Показ имени объекта
ShowMessage('
Имя сейчас = '+simple.GetName);

//
Обращение к методу SetName
nameProc := simple.SetName;

//
И установка имени
nameProc('Even newer name');

//
Показ имени объекта
ShowMessage('
Имя сейчас = '+simple.GetName);
end;
end.

Имя сейчас = New name
Имя сейчас = Even newer name

Примечание

 

 

Авторизация



Счетчики