Delphi справочник - Форум программистов - Навигация  
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z      По первой букве  
System     SysUtils     StrUtils     DateUtils     FileCtrl     ConvUtils     StdConvs     Math     Classes     Dialogs     Types     Variants    ПО Unit   Compiler directives     Directives     Keywords     Types     Variables     Constants     Functions     Procedures    По категории  


Основы Delphi
Procedure
Ключевое слово
Определяет подпрограмму, которая не возвращает значение System unit
  
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 позволяет Вам обращаться к объектному методу. Обращайтесь к переменной такого типа, как будто Вы вызываете объектный метод непосредственно. См. второй пример.
Похожие команды
Abstract  Определяет метод класса, осуществляемый только в подклассах

Const  Начинает определение данных с установленными значениями

Function  Определяет подпрограмму, которая возвращает значение

Out  Идентифицирует стандартный параметр только для вывода

Overload  Позволяет 2-м или более подпрограммам иметь одинаковое название

Override  Определяет метод, который заменяет виртуальный родительский метод класса

Var  Начинает раздела определения переменных

Virtual  Позволяет методу класса быть отменённым в производных классах

Dynamic  Позволяет методу класса быть заменённым в производных классах

 
Пример кода : Простой пример
// Полный код Модуля.
// -----------------------------------------------------------
// Вы должны поместить этот код в модуль с именем 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
 
Пример кода : Иллюстрирование Procedure и Procedure type
// Полный код Модуля.
// -----------------------------------------------------------
// Вы должны поместить этот код в модуль с именем 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
 



© Форум Delphi   |  Блог программистов   |  Создание и продвижение сайтов - "Веб сателлит"  |  Ссылки   |  Английская версия