Returns the predecessor of the argument.
procedure Pred(X);
Pred( X);
System
X is an expression of a Delphi ordinal type (including Int64). The result, of the same type as X, is the predecessor of X.
Delphi Examples:
{ AssertErrorProc example The following code is a self-contained unit that you can add to a project that logs failed assertions to the event log rather than raising an exception. If /Debug is passed to the application as a command-line parameter, all failed Assert calls cause a call to OutputDebugString, which sends a messages to the Event Log window if run from Delphi, or does nothing if run outside the IDE (OutputDebugString is a no-op if not run from within a debugger). A nice side benefit is that all the line numbers and unit names can be stripped from the EXE by turning off assertions and rebuilding the project. Note: AssertErrorHandler should do as little as possible. This routine does no cleanup, so no variables, no compiler generated variables. Procedure calls are OK. Note: This example was originally provided by Brian Long. } type TForm1 = class(TForm) procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; TStorage = class(TObject) FData: string; property Data: string read FData write FData; private { Private declarations } public { Public declarations } end; var Form1: TForm1; procedure AssertErrorHandler(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer); implementation {$R *.dfm} {$ASSERTIONS ON} type EMyAssert = class(Exception); procedure DoMessage(Message, Filename: String; LineNumber: Integer; ErrorAddr: Pointer); var S: String; begin S := Format('%s (%s, line %d, address $%x)', [Message, Filename, LineNumber, Pred(Integer(ErrorAddr))]); OutputDebugString(PChar(S)); end; procedure AssertErrorHandler(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer); { No local variables. Not compiler generated temporary variables. } { Using the call stack here will cause Access Violation errors. } begin DoMessage(Message, Filename, LineNumber, ErrorAddr); raise EMyAssert.Create('Boom!'); end; procedure AssertErrorNoHandler(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer); begin end; procedure ModifyStorage(AStorage: TStorage; const s: string); begin Assert(AStorage <> nil, 'Value'); AStorage.Data := s; end; procedure TForm1.Button1Click(Sender: TObject); begin ModifyStorage(nil, 'Oops'); end; initialization if FindCmdLineSwitch('Debug', ['/', '-'], True) then begin MessageDlg('Command line switch found!', mtInformation, [mbOK], 0); // OldProc := System.AssertErrorProc; System.AssertErrorProc := @AssertErrorHandler end else System.AssertErrorProc := @AssertErrorNoHandler; ModifyStorage(nil, 'Ooops');
{ This example demonstrates how Pred and Succ can be used to manage enumerations. } procedure TForm1.Button1Click(Sender: TObject); type Colors = (RED,BLUE,GREEN); var S: string; begin S := 'The predecessor of 5 is ' + IntToStr(Pred(5)) + #13#10; S := S + 'The successor of 10 is ' + IntToStr(Succ(10)) + #13#10; if Succ(RED) = BLUE then S := S + 'In the type Colors, RED is the predecessor of BLUE.'; MessageDlg(S, mtInformation, [mbOk], 0, mbOk); end;
Copyright(C) 2008 CodeGear(TM). All Rights Reserved.
|
What do you think about this topic? Send feedback!
|