home *** CD-ROM | disk | FTP | other *** search
- {*******************************************************}
- { }
- { Delphi Visual Component Library }
- { }
- { Copyright (c) 1995 Borland International }
- { }
- {*******************************************************}
-
- unit Classes;
-
- {$N+,P+,R-,S-,W-}
- {$C PRELOAD}
-
- interface
-
- uses SysUtils, WinTypes, WinProcs;
-
- const
-
- { Maximum TList size }
-
- MaxListSize = 65520 div SizeOf(Pointer);
-
- { TStream seek origins }
-
- soFromBeginning = 0;
- soFromCurrent = 1;
- soFromEnd = 2;
-
- { TFileStream create mode }
-
- fmCreate = $FFFF;
-
- type
-
- { Text alignment types }
-
- TAlignment = (taLeftJustify, taRightJustify, taCenter);
- TLeftRight = taLeftJustify..taRightJustify;
-
- { Types used by standard events }
-
- TShiftState = set of (ssShift, ssAlt, ssCtrl,
- ssLeft, ssRight, ssMiddle, ssDouble);
-
- THelpContext = -MaxLongint..MaxLongint;
-
- { Standard events }
-
- TNotifyEvent = procedure(Sender: TObject) of object;
- THelpEvent = function (Command: Word; Data: Longint;
- var CallHelp: Boolean): Boolean of object;
- TGetStrProc = procedure(const S: string) of object;
-
- { Exception classes }
-
- EStreamError = class(Exception);
- EFCreateError = class(EStreamError);
- EFOpenError = class(EStreamError);
- EFilerError = class(EStreamError);
- EReadError = class(EFilerError);
- EWriteError = class(EFilerError);
- EClassNotFound = class(EFilerError);
- EMethodNotFound = class(EFilerError);
- EInvalidImage = class(EFilerError);
- EResNotFound = class(Exception);
- EListError = class(Exception);
- EStringListError = class(Exception);
- EComponentError = class(Exception);
- EParserError = class(Exception);
-
- { Forward class declarations }
-
- TStream = class;
- TFiler = class;
- TReader = class;
- TWriter = class;
- TComponent = class;
-
- { TList class }
-
- TList = class(TObject)
- protected
- procedure Error; virtual;
- function Get(Index: Integer): Pointer;
- procedure Grow; virtual;
- procedure Put(Index: Integer; Item: Pointer);
- procedure SetCapacity(NewCapacity: Integer);
- procedure SetCount(NewCount: Integer);
- public
- destructor Destroy; override;
- function Add(Item: Pointer): Integer;
- procedure Clear;
- procedure Delete(Index: Integer);
- procedure Exchange(Index1, Index2: Integer);
- function Expand: TList;
- function First: Pointer;
- function IndexOf(Item: Pointer): Integer;
- procedure Insert(Index: Integer; Item: Pointer);
- function Last: Pointer;
- procedure Move(CurIndex, NewIndex: Integer);
- function Remove(Item: Pointer): Integer;
- procedure Pack;
- property Capacity: Integer;
- property Count: Integer;
- property Items[Index: Integer]: Pointer; default;
- end;
-
- { TPersistent abstract class }
-
- {$M+}
-
- TPersistent = class(TObject)
- protected
- procedure AssignTo(Dest: TPersistent); virtual;
- procedure DefineProperties(Filer: TFiler); virtual;
- public
- procedure Assign(Source: TPersistent); virtual;
- end;
-
- {$M-}
-
- { TPersistent class reference type }
-
- TPersistentClass = class of TPersistent;
-
- { TStrings class }
-
- TStrings = class(TPersistent)
- protected
- procedure DefineProperties(Filer: TFiler); override;
- function Get(Index: Integer): string; virtual; abstract;
- function GetCount: Integer; virtual; abstract;
- function GetObject(Index: Integer): TObject; virtual;
- procedure Put(Index: Integer; const S: string); virtual;
- procedure PutObject(Index: Integer; AObject: TObject); virtual;
- procedure SetUpdateState(Updating: Boolean); virtual;
- public
- function Add(const S: string): Integer; virtual;
- function AddObject(const S: string; AObject: TObject): Integer; virtual;
- procedure AddStrings(Strings: TStrings); virtual;
- procedure Assign(Source: TPersistent); override;
- procedure BeginUpdate;
- procedure Clear; virtual; abstract;
- procedure Delete(Index: Integer); virtual; abstract;
- procedure EndUpdate;
- function Equals(Strings: TStrings): Boolean;
- procedure Exchange(Index1, Index2: Integer); virtual;
- function GetText: PChar; virtual;
- function IndexOf(const S: string): Integer; virtual;
- function IndexOfObject(AObject: TObject): Integer;
- procedure Insert(Index: Integer; const S: string); virtual; abstract;
- procedure InsertObject(Index: Integer; const S: string;
- AObject: TObject);
- procedure LoadFromFile(const FileName: string);
- procedure LoadFromStream(Stream: TStream); virtual;
- procedure Move(CurIndex, NewIndex: Integer); virtual;
- procedure SaveToFile(const FileName: string);
- procedure SaveToStream(Stream: TStream); virtual;
- procedure SetText(Text: PChar); virtual;
- property Count: Integer;
- property Objects[Index: Integer]: TObject;
- property Values[const Name: string]: string;
- property Strings[Index: Integer]: string; default;
- end;
-
- { TStringList class }
-
- TDuplicates = (dupIgnore, dupAccept, dupError);
-
- TStringList = class(TStrings)
- protected
- procedure Changed; virtual;
- procedure Changing; virtual;
- function Get(Index: Integer): string; override;
- function GetCount: Integer; override;
- function GetObject(Index: Integer): TObject; override;
- procedure Put(Index: Integer; const S: string); override;
- procedure PutObject(Index: Integer; AObject: TObject); override;
- procedure SetUpdateState(Updating: Boolean); override;
- public
- constructor Create;
- destructor Destroy; override;
- function Add(const S: string): Integer; override;
- procedure Clear; override;
- procedure Delete(Index: Integer); override;
- procedure Exchange(Index1, Index2: Integer); override;
- function Find(const S: string; var Index: Integer): Boolean; virtual;
- function IndexOf(const S: string): Integer; override;
- procedure Insert(Index: Integer; const S: string); override;
- procedure Sort; virtual;
- property Duplicates: TDuplicates;
- property Sorted: Boolean;
- property OnChange: TNotifyEvent;
- property OnChanging: TNotifyEvent;
- end;
-
- { TStream abstract class }
-
- TStream = class(TObject)
- public
- function Read(var Buffer; Count: Longint): Longint; virtual; abstract;
- function Write(const Buffer; Count: Longint): Longint; virtual; abstract;
- function Seek(Offset: Longint; Origin: Word): Longint; virtual; abstract;
- procedure ReadBuffer(var Buffer; Count: Longint);
- procedure WriteBuffer(const Buffer; Count: Longint);
- function CopyFrom(Source: TStream; Count: Longint): Longint;
- function ReadComponent(Instance: TComponent): TComponent;
- function ReadComponentRes(Instance: TComponent): TComponent;
- procedure WriteComponent(Instance: TComponent);
- procedure WriteComponentRes(const ResName: string; Instance: TComponent);
- procedure ReadResHeader;
- property Position: Longint;
- property Size: Longint;
- end;
-
- { THandleStream class }
-
- THandleStream = class(TStream)
- public
- constructor Create(AHandle: Integer);
- function Read(var Buffer; Count: Longint): Longint; override;
- function Write(const Buffer; Count: Longint): Longint; override;
- function Seek(Offset: Longint; Origin: Word): Longint; override;
- property Handle: Integer;
- end;
-
- { TFileStream class }
-
- TFileStream = class(THandleStream)
- public
- constructor Create(const FileName: string; Mode: Word);
- destructor Destroy; override;
- end;
-
- { TMemoryStream }
-
- TMemoryStream = class(TStream)
- public
- destructor Destroy; override;
- function Read(var Buffer; Count: Longint): Longint; override;
- function Write(const Buffer; Count: Longint): Longint; override;
- function Seek(Offset: Longint; Origin: Word): Longint; override;
- procedure LoadFromStream(Stream: TStream);
- procedure LoadFromFile(const FileName: string);
- procedure SaveToStream(Stream: TStream);
- procedure SaveToFile(const FileName: string);
- procedure SetSize(Size: Longint);
- procedure Clear;
- property Memory: Pointer;
- end;
-
- { TFiler }
-
- TReaderProc = procedure(Reader: TReader) of object;
- TWriterProc = procedure(Writer: TWriter) of object;
- TStreamProc = procedure(Stream: TStream) of object;
-
- TFiler = class(TObject)
- public
- constructor Create(Stream: TStream; BufSize: Cardinal);
- destructor Destroy; override;
- procedure DefineProperty(const Name: string;
- ReadData: TReaderProc; WriteData: TWriterProc;
- HasData: Boolean); virtual; abstract;
- procedure DefineBinaryProperty(const Name: string;
- ReadData, WriteData: TStreamProc;
- HasData: Boolean); virtual; abstract;
- property Root: TComponent;
- end;
-
- { TReader }
-
- TFindMethodEvent = procedure(Reader: TReader; const MethodName: string;
- var Address: Pointer; var Error: Boolean) of object;
- TSetNameEvent = procedure(Reader: TReader; Component: TComponent;
- var Name: string) of object;
- TReadComponentsProc = procedure(Component: TComponent) of object;
- TReaderError = procedure(Reader: TReader; const Message: string; var Handled: Boolean) of object;
-
- TReader = class(TFiler)
- protected
- function Error(const Message: string): Boolean; virtual;
- function FindMethod(Root: TComponent; const MethodName: string): Pointer; virtual;
- procedure SetName(Component: TComponent; var Name: string); virtual;
- public
- destructor Destroy; override;
- procedure DefineProperty(const Name: string;
- ReadData: TReaderProc; WriteData: TWriterProc;
- HasData: Boolean); override;
- procedure DefineBinaryProperty(const Name: string;
- ReadData, WriteData: TStreamProc;
- HasData: Boolean); override;
- function EndOfList: Boolean;
- procedure Read(var Buf; Count: Longint);
- function ReadBoolean: Boolean;
- function ReadChar: Char;
- procedure ReadComponents(AOwner, AParent: TComponent;
- Proc: TReadComponentsProc);
- function ReadFloat: Extended;
- function ReadIdent: string;
- function ReadInteger: Longint;
- procedure ReadListBegin;
- procedure ReadListEnd;
- function ReadRootComponent(Root: TComponent): TComponent;
- procedure ReadSignature;
- function ReadStr: string;
- function ReadString: string;
- property Owner: TComponent;
- property Parent: TComponent;
- property OnError: TReaderError;
- property OnFindMethod: TFindMethodEvent;
- property OnSetName: TSetNameEvent;
- end;
-
- { TWriter }
-
- TWriter = class(TFiler)
- public
- destructor Destroy; override;
- procedure DefineProperty(const Name: string;
- ReadData: TReaderProc; WriteData: TWriterProc;
- HasData: Boolean); override;
- procedure DefineBinaryProperty(const Name: string;
- ReadData, WriteData: TStreamProc;
- HasData: Boolean); override;
- procedure Write(const Buf; Count: Longint);
- procedure WriteBoolean(Value: Boolean);
- procedure WriteComponent(Component: TComponent);
- procedure WriteChar(Value: Char);
- procedure WriteFloat(Value: Extended);
- procedure WriteIdent(const Ident: string);
- procedure WriteInteger(Value: Longint);
- procedure WriteListBegin;
- procedure WriteListEnd;
- procedure WriteRootComponent(Root: TComponent);
- procedure WriteSignature;
- procedure WriteStr(const Value: string);
- procedure WriteString(const Value: string);
- end;
-
- { TComponent class }
-
- TOperation = (opInsert, opRemove);
- TComponentState = set of (csLoading, csReading, csWriting, csDestroying,
- csDesigning);
-
- TComponentName = string[63];
-
- TComponent = class(TPersistent)
- protected
- procedure ChangeName(const NewName: TComponentName);
- procedure DefineProperties(Filer: TFiler); override;
- function HasParent: Boolean; virtual;
- procedure Loaded; virtual;
- procedure Notification(AComponent: TComponent;
- Operation: TOperation); virtual;
- procedure ReadState(Reader: TReader); virtual;
- procedure SetDesigning(Value: Boolean);
- procedure SetName(const NewName: TComponentName); virtual;
- procedure ValidateRename(AComponent: TComponent;
- const CurName, NewName: string); virtual;
- procedure WriteComponents(Writer: TWriter); virtual;
- procedure WriteState(Writer: TWriter); virtual;
- public
- constructor Create(AOwner: TComponent); virtual;
- destructor Destroy; override;
- procedure DestroyComponents;
- procedure Destroying;
- function FindComponent(const AName: string): TComponent;
- procedure InsertComponent(AComponent: TComponent);
- procedure RemoveComponent(AComponent: TComponent);
- property Components[Index: Integer]: TComponent;
- property ComponentCount: Integer;
- property ComponentIndex: Integer;
- property ComponentState: TComponentState;
- property DesignInfo: Longint;
- property Owner: TComponent;
- published
- property Name: TComponentName;
- property Tag: Longint default 0;
- end;
-
- { TComponent class reference type }
-
- TComponentClass = class of TComponent;
-
- { Point and rectangle constructors }
-
- function Point(AX, AY: Integer): TPoint;
- function Rect(ALeft, ATop, ARight, ABottom: Integer): TRect;
- function Bounds(ALeft, ATop, AWidth, AHeight: Integer): TRect;
-
- { Class registration routines }
-
- procedure RegisterClass(AClass: TPersistentClass);
- procedure RegisterClasses(AClasses: array of TPersistentClass);
- procedure RegisterClassAlias(AClass: TPersistentClass; const Alias: string);
- procedure UnRegisterClass(AClass: TPersistentClass);
- procedure UnRegisterClasses(AClasses: array of TPersistentClass);
- function FindClass(const ClassName: string): TPersistentClass;
- function GetClass(const ClassName: string): TPersistentClass;
-
- { Component registration routines }
-
- procedure RegisterComponents(const Page: string;
- ComponentClasses: array of TComponentClass);
- procedure RegisterNoIcon(ComponentClasses: array of TComponentClass);
-
- { Object filing routines }
-
- type
- TIdentToInt = function (const Ident: string; var Int: Longint): Boolean;
- TIntToIdent = function (Int: Longint; var Ident: string): Boolean;
-
- procedure RegisterIntegerConsts(IntegerType: Pointer; IdentToInt: TIdentToInt;
- IntToIdent: TIntToIdent);
- function ReadComponentRes(const ResName: string; Instance: TComponent): TComponent;
- function ReadComponentResFile(const FileName: string; Instance: TComponent): TComponent;
- procedure WriteComponentResFile(const FileName: string; Instance: TComponent);
-
- { Object conversion routines }
-
- procedure ObjectBinaryToText(Input, Output: TStream);
- procedure ObjectTextToBinary(Input, Output: TStream);
-
- procedure ObjectResourceToText(Input, Output: TStream);
- procedure ObjectTextToResource(Input, Output: TStream);
-
- { StrItem management, shared by TStringList and TStringSparseList }
-
- type
- PStrItem = ^TStrItem;
- TStrItem = record
- FObject: TObject;
- FString: string;
- end;
-
- procedure DisposeStrItem(P: PStrItem);
-
- implementation
-