Mega Code Archive

 
Categories / Delphi / Keywords
 

Procedure - defines a subroutine that does not return a value

1 Procedure Name; {Directives;} 2 Procedure Name(Parameters); {Directives;} 3 type Name = Procedure{(Parameters)} {of object}; Description The Procedure keyword defines a subroutine that does not return a value. See the SubRoutines tutorial for details on using procedures. Version 1 Defines a procedure that operates with no parameters. Version 2 Defines a procedure that is passed one or more parameters. When a procedure is defined in a class, it is commonly called a Method. The same name may be used for more than one procedure as long as the Overload directive is used. The other main directives, in the order that they should appear is given here: Reintroduce : Redefines a suppressed function Overload : Allows same name for 2 or more functions Virtual : Can be redefined in a child class Override : Redefines a parent class method Abstract : Forces child class to implement Version 3 Defines a procedure as a data type. This allows the procedure to be passed as a parameter, and used as a variable. The type definition defines just the profile of the procedure - and not the name. A variable of such a type could be assigned the name of any procedure with that profile. When assigned, the variable name can be treated as if it were a procedure name. See the example code. Further still, the Of Object option allows you to refer to an object method. Access to a variable of such type would then behave as if you were calling the object method directly. See the second example. Related commands Abstract Defines a class method only implemented in subclasses Const Starts the definition of fixed data values Function Defines a subroutine that returns a value Out Identifies a routine parameter for output only Overload Allows 2 or more routines to have the same name Override Defines a method that replaces a virtual parent class method Var Starts the definition of a section of data variables Virtual Allows a class method to be overriden in derived classes Dynamic Allows a class method to be overriden in derived classes Example code : A simple example // Full Unit code. // ----------------------------------------------------------- // You must store this code in a unit called Unit1 with a form // called Form1 that has an OnCreate event called FormCreate. unit Unit1; interface uses // The System unit does not need to be defined Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} // Include form definitions Procedure ShowSum(a, b : Integer); var total : Integer; begin // Add the two numbers together total := a + b; // And display the sum ShowMessageFmt('%d + %d = %d',[a,b,total]); end; // The main form On Create routine - our main program procedure TForm1.FormCreate(Sender: TObject); begin // Show the sum of a few number pairs ShowSum(1,2); ShowSum(245,62); end; end. 1 + 2 = 3 245 + 62 = 307 Example code : Illustrating a Procedure and a Procedure type // Full Unit code. // ----------------------------------------------------------- // You must store this code in a unit called Unit1 with a form // called Form1 that has an OnCreate event called FormCreate. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type // The form class itself TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} // In line functions Procedure ShowMsg(msg : string); begin ShowMessage(msg); end; Procedure ShowLongMsg(msg : string); begin ShowMessage('Message text = '+msg); end; // Main line code procedure TForm1.FormCreate(Sender: TObject); type TShowProc = Procedure(msg : string); var showProc : TShowProc; begin // Use the ShowMsg proc directly ShowMessage('Using ShowMsg directly :'); ShowMsg('Hello World'); // Use ShowMsg indirectly ShowMessage('Using ShowMsg indirectly :'); showProc := ShowMsg; showProc('Hello again'); // Use ShowLongMsg indirectly ShowMessage('Using ShowLongMsg indirectly :'); showProc := ShowLongMsg; showProc('Hello again'); end; end. Using ShowMsg directly : Hello World Using ShowMsg indirectly : Hello again Using ShowLongMsg indirectly : Message text = Hello again Example code : Using a type of a procedure of a class // Full Unit code. // ----------------------------------------------------------- // You must store this code in a unit called Unit1 with a form // called Form1 that has an OnCreate event called FormCreate. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type // Define a simple class TSimple = class private name : string; public function GetName : string; Procedure SetName(name : string); constructor Create(name : string); end; // The form class itself TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} // Create a simple object constructor TSimple.Create(name: string); begin // Save the passed string self.name := name; end; // Returns the simple name function TSimple.GetName: string; begin Result := name; end; // Assigns the passed name Procedure TSimple.SetName(name : string); begin self.name := name; end; // Main line code procedure TForm1.FormCreate(Sender: TObject); type TNameProc = Procedure(name : string) of object; var simple : TSimple; nameProc : TNameProc; begin // Create a simple object simple := TSimple.Create('Brian'); // And set the name simple.SetName('New name'); // Show the object name ShowMessage('Name now = '+simple.GetName); // Refer to the SetName method nameProc := simple.SetName; // And set the name nameProc('Even newer name'); // Show the object name ShowMessage('Name now = '+simple.GetName); end; end. Name now = New name Name now = Even newer name