Description |
The Default directive is used in two separate, and quite different ways with properties to establish default processing.
Version 1
When you have one or more properties that used an index as a parameter (see the example and Index for further details), you can specify the Default directive. It allows you to use a more compact way of using the property.
Instead of :
myValue := MyObject.GetItem(23);
We can use :
myValue := MyObject[23];
This can make for more readable and compact code, but can be confusing for newcomers to Delphi - they will see MyObject is not an array and find it difficult to find the mechanism. Especially if the class is big.
Version 2
Has a much more specialised use. It stores the supplied default ordinal property value in the run time information for the class. Its use is beyond the scope of Delphi Basics.
|
|
Related commands |
Private |
|
Starts the section of private data and methods in a class |
Property |
|
Defines controlled access to class fields |
Protected |
|
Starts a section of class private data accesible to sub-classes |
Public |
|
Starts an externally accessible section of a class |
Published |
|
Starts a published externally accessible section of a class |
|
|
|
|
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
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type // Class with Indexed properties
TRectangle = class
private
fCoords: array[0..3] of Longint;
function GetCoord(Index: Integer): Longint;
procedure SetCoord(Index: Integer; Value: Longint);
public
property Left : Longint Index 0 read GetCoord write SetCoord;
property Top : Longint Index 1 read GetCoord write SetCoord;
property Right : Longint Index 2 read GetCoord write SetCoord;
property Bottom : Longint Index 3 read GetCoord write SetCoord;
property Coords[Index: Integer] : Longint
read GetCoord write SetCoord; Default;
end;
// The form class itself
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// TRectangle property 'Getter' routine
function TRectangle.GetCoord(Index: Integer): Longint;
begin // Only allow valid index values
if (Index >= 0) and (Index <= 3)
then Result := fCoords[Index]
else Result := -1;
end;
// TRectangle property 'Setter' routine
procedure TRectangle.SetCoord(Index, Value: Integer);
begin // Only allow valid index values
if (Index >= 0) and (Index <= 3)
then fCoords[Index] := Value;
end;
// Main line code
procedure TForm1.FormCreate(Sender: TObject);
var
myRect : TRectangle;
begin // Create my little rectangle
myRect := TRectangle.Create;
// And set the corner coordinates myRect.Left := 22; // Left using direct method
myRect.Top := 33; myRect.SetCoord(2,44); // Right using indexed method
myRect.SetCoord(3,55);
// Get the first two coords using the get method name
ShowMessage('myRect coord 0 = '+intToStr(myRect.GetCoord(0)));
ShowMessage('myRect coord 0 = '+intToStr(myRect.GetCoord(1)));
// Now use the more compact version to get the remaining coords // This is only possible when we have a 'default' indexed property
ShowMessage('myRect coord 1 = '+intToStr(myRect[2]));
ShowMessage('myRect coord 1 = '+intToStr(myRect[3]));
end;
end.
|
myRect coord 0 = 22
myRect coord 1 = 33
myRect coord 2 = 44
myRect coord 3 = 55
|
|