|
|
@@ -0,0 +1,1093 @@
|
|
|
+{ Components used in component streaming tests.
|
|
|
+
|
|
|
+ Copyright (C) 2020- Michael Van Canneyt [email protected]
|
|
|
+
|
|
|
+ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public
|
|
|
+ License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version
|
|
|
+ with the following modification:
|
|
|
+
|
|
|
+ As a special exception, the copyright holders of this library give you permission to link this library with independent modules
|
|
|
+ to produce an executable, regardless of the license terms of these independent modules,and to copy and distribute the resulting
|
|
|
+ executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions
|
|
|
+ of the license of that module. An independent module is a module which is not derived from or based on this library. If you
|
|
|
+ modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do
|
|
|
+ not wish to do so, delete this exception statement from your version.
|
|
|
+
|
|
|
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details.
|
|
|
+
|
|
|
+ You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free
|
|
|
+ Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA.
|
|
|
+}
|
|
|
+unit testcomps;
|
|
|
+
|
|
|
+interface
|
|
|
+
|
|
|
+uses classes, sysutils;
|
|
|
+
|
|
|
+Type
|
|
|
+ TEmptyComponent = Class(TComponent)
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Simple integer, fits in 1 byte
|
|
|
+ TIntegerComponent = Class(TComponent)
|
|
|
+ private
|
|
|
+ FIntProp: Integer;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property IntProp : Integer Read FIntProp Write FIntProp;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Simple integer, fits in 2 bytes
|
|
|
+ TIntegerComponent2 = Class(TComponent)
|
|
|
+ private
|
|
|
+ FIntProp: Integer;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property IntProp : Integer Read FIntProp Write FIntProp;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Simple integer, fits in 3 bytes
|
|
|
+ TIntegerComponent3 = Class(TComponent)
|
|
|
+ private
|
|
|
+ FIntProp: Integer;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property IntProp : Integer Read FIntProp Write FIntProp;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Simple integer, Default value. (set)
|
|
|
+ TIntegerComponent4 = Class(TComponent)
|
|
|
+ private
|
|
|
+ FIntProp: Integer;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property IntProp : Integer Read FIntProp Write FIntProp default 6;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Simple integer, Default value. (not set)
|
|
|
+ TIntegerComponent5 = Class(TComponent)
|
|
|
+ private
|
|
|
+ FIntProp: Integer;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property IntProp : Integer Read FIntProp Write FIntProp default 6;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Simple Int64 property fits in a single byte.
|
|
|
+ TInt64Component = Class(TComponent)
|
|
|
+ private
|
|
|
+ FIntProp: NativeInt;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property Int64Prop : NativeInt Read FIntProp Write FIntProp;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Simple Int64 property fits 2 bytes.
|
|
|
+ TInt64Component2 = Class(TComponent)
|
|
|
+ private
|
|
|
+ FIntProp: NativeInt;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property Int64Prop : NativeInt Read FIntProp Write FIntProp;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Simple Int64 property fits 3 bytes.
|
|
|
+ TInt64Component3 = Class(TComponent)
|
|
|
+ private
|
|
|
+ FIntProp: NativeInt;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property Int64Prop : NativeInt Read FIntProp Write FIntProp;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Simple Int64 property fits 4 bytes.
|
|
|
+ TInt64Component4 = Class(TComponent)
|
|
|
+ private
|
|
|
+ FIntProp: NativeInt;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property Int64Prop : NativeInt Read FIntProp Write FIntProp;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Int64 property with default, set.
|
|
|
+ TInt64Component5 = Class(TComponent)
|
|
|
+ private
|
|
|
+ FIntProp: NativeInt;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property Int64Prop : NativeInt Read FIntProp Write FIntProp default 7;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Int64 property with default, not set.
|
|
|
+ TInt64Component6 = Class(TComponent)
|
|
|
+ private
|
|
|
+ FIntProp: NativeInt;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property Int64Prop : NativeInt Read FIntProp Write FIntProp default 7;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // String property.
|
|
|
+ TStringComponent = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: String;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property StringProp : String Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // String property, empty
|
|
|
+ TStringComponent2 = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: String;
|
|
|
+ Published
|
|
|
+ Property StringProp : String Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // String property, with quote.
|
|
|
+
|
|
|
+ { TStringComponent3 }
|
|
|
+
|
|
|
+ TStringComponent3 = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: String;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property StringProp : String Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
+ // WideString property
|
|
|
+ TWideStringComponent = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: WideString;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property WideStringProp : WideString Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // WideString property, empty
|
|
|
+ TWideStringComponent2 = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: WideString;
|
|
|
+ Published
|
|
|
+ Property WideStringProp : WideString Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Single property
|
|
|
+ TSingleComponent = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: Single;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property SingleProp : Single Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Double property
|
|
|
+ TDoubleComponent = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: Double;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property DoubleProp : Double Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Extended property
|
|
|
+ TExtendedComponent = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: Extended;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property ExtendedProp : Extended Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ (*
|
|
|
+ // Comp property
|
|
|
+ TCompComponent = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: Comp;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property ExtendedProp : Comp Read F Write F;
|
|
|
+ end;
|
|
|
+ *)
|
|
|
+
|
|
|
+ // Currency property
|
|
|
+ TCurrencyComponent = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: Currency;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property CurrencyProp : Currency Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // DateTime property, date only
|
|
|
+ TDateTimeComponent = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: TDateTime;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property DateTimeProp : TDateTime Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // DateTime property, time only
|
|
|
+ TDateTimeComponent2 = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: TDateTime;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property DateTimeProp : TDateTime Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // DateTime property, Date and time
|
|
|
+ TDateTimeComponent3 = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: TDateTime;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property DateTimeProp : TDateTime Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ TDice = (one,two,three,four,five,six);
|
|
|
+
|
|
|
+ // Enum property. No default (i.e. 0)
|
|
|
+ TEnumComponent = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: TDice;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property Dice : TDice Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Enum property, not set
|
|
|
+ TEnumComponent2 = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: TDice;
|
|
|
+ Published
|
|
|
+ Property Dice : TDice Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Enum property with default, not set
|
|
|
+ TEnumComponent3 = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: TDice;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property Dice : TDice Read F Write F default two;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Enum property with default, set
|
|
|
+ TEnumComponent4 = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: TDice;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property Dice : TDice Read F Write F default two;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Enum property with default, no need to set
|
|
|
+ TEnumComponent5 = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: TDice;
|
|
|
+ Published
|
|
|
+ Property Dice : TDice Read F Write F default one;
|
|
|
+ end;
|
|
|
+
|
|
|
+ Throws = Set of TDice;
|
|
|
+
|
|
|
+ // Set property, no default.
|
|
|
+ TSetComponent = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: Throws;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property Throw : Throws Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Set property, no default, not set
|
|
|
+ TSetComponent2 = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: Throws;
|
|
|
+ Published
|
|
|
+ Property Throw : Throws Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Set property, default, not set
|
|
|
+ TSetComponent3 = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: Throws;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property Throw : Throws Read F Write F default [three,six];
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Set property, default, set
|
|
|
+ TSetComponent4 = Class(TComponent)
|
|
|
+ private
|
|
|
+ F: Throws;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property Throw : Throws Read F Write F default [three,six];
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Multiple components.
|
|
|
+ TMultipleComponent = Class(TComponent)
|
|
|
+ private
|
|
|
+ FCurrency: Currency;
|
|
|
+ FInt: Integer;
|
|
|
+ FString: String;
|
|
|
+ FDice: TDice;
|
|
|
+ F: Throws;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property IntProp : Integer Read FInt Write FInt;
|
|
|
+ Property StringProp : String Read FString Write FString;
|
|
|
+ Property CurrencyProp : Currency Read FCurrency Write FCurrency;
|
|
|
+ Property Dice : TDice Read FDice Write FDice;
|
|
|
+ Property Throw : Throws Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ TTestPersistent1 = Class(TPersistent)
|
|
|
+ private
|
|
|
+ FInt: Integer;
|
|
|
+ FAstring: String;
|
|
|
+ Public
|
|
|
+ Procedure Assign(ASource : TPersistent); override;
|
|
|
+ Published
|
|
|
+ Property AInteger : Integer Read FInt Write FInt;
|
|
|
+ Property AString : String Read FAstring Write FAsTring;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Persistent as a published property.
|
|
|
+ TPersistentComponent = Class(TComponent)
|
|
|
+ private
|
|
|
+ FPers: TTestPersistent1;
|
|
|
+ procedure SetPers(const Value: TTestPersistent1);
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Destructor Destroy; override;
|
|
|
+ Published
|
|
|
+ Property Persist : TTestPersistent1 Read FPers Write SetPers;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // For use in collection streaming
|
|
|
+ TTestItem = Class(TCollectionItem)
|
|
|
+ Private
|
|
|
+ F : String;
|
|
|
+ Published
|
|
|
+ Property StrProp : String Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // For use in collection streaming: items with two properties
|
|
|
+
|
|
|
+ { TTest2Item }
|
|
|
+
|
|
|
+ TTest2Item = Class(TCollectionItem)
|
|
|
+ Private
|
|
|
+ F1, F2 : String;
|
|
|
+ public
|
|
|
+ Published
|
|
|
+ Property StrProp1 : String Read F1 Write F1;
|
|
|
+ Property StrProp2 : String Read F2 Write F2;
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
+ TTestCollection = Class(TCollection)
|
|
|
+ Public
|
|
|
+ Constructor Create;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Empty collection
|
|
|
+ TCollectionComponent = Class(TComponent)
|
|
|
+ Private
|
|
|
+ FColl : TCollection;
|
|
|
+ Procedure SetColl(AColl : TCollection);
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Destructor Destroy; override;
|
|
|
+ Published
|
|
|
+ Property Coll : TCollection Read FColl Write SetCOll;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // collection with elements.
|
|
|
+ TCollectionComponent2 = Class(TCollectionComponent)
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // collection with elements, one has no props
|
|
|
+ TCollectionComponent3 = Class(TCollectionComponent)
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // collection with changed propname, one element
|
|
|
+ TCollectionComponent4 = Class(TComponent)
|
|
|
+ FColl : TTestCollection;
|
|
|
+ Procedure SetColl(AColl : TTestCollection);
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Destructor Destroy; override;
|
|
|
+ Published
|
|
|
+ Property Coll : TTestCollection Read FColl Write SetColl;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // collection two elements, items with two properties
|
|
|
+ TCollectionComponent5 = Class(TComponent)
|
|
|
+ FColl : TCollection;
|
|
|
+ Procedure SetColl(AColl : TCollection);
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Destructor Destroy; override;
|
|
|
+ Published
|
|
|
+ Property Coll : TCollection Read FColl Write SetColl;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Component as published property
|
|
|
+ TOwnedComponent = Class(TComponent)
|
|
|
+ F : TComponent;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Property CompProp : TComponent Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Use this if owned components should also be streamed.
|
|
|
+ TChildrenComponent = Class(TComponent)
|
|
|
+ // Owned components are children
|
|
|
+ procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Stream sub component.
|
|
|
+ TStreamedOwnedComponent = Class(TChildrenComponent)
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Sub : TIntegerComponent;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Stream 2 sub components
|
|
|
+ TStreamedOwnedComponents = Class(TChildrenComponent)
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ SubA : TIntegerComponent;
|
|
|
+ SubB : TStringComponent;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Method tests.
|
|
|
+
|
|
|
+ THandler = Procedure of Object;
|
|
|
+
|
|
|
+ // Method property that points to own method.
|
|
|
+ TMethodComponent = Class(TComponent)
|
|
|
+ Private
|
|
|
+ F : THandler;
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Procedure MyMethod;
|
|
|
+ Property MethodProp : THandler Read F Write F;
|
|
|
+ end;
|
|
|
+
|
|
|
+ // Method property of owned component that points to own method.
|
|
|
+ TMethodComponent2 = Class(TChildrenComponent)
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Published
|
|
|
+ Procedure MyMethod2;
|
|
|
+ end;
|
|
|
+
|
|
|
+ { TMyItem }
|
|
|
+
|
|
|
+ TMyItem = Class(TCollectionItem)
|
|
|
+ private
|
|
|
+ FNR: Integer;
|
|
|
+ FStr: String;
|
|
|
+ Public
|
|
|
+ Procedure Assign(Source : TPersistent); override;
|
|
|
+ Published
|
|
|
+ Property Nr : Integer Read FNR Write FNR;
|
|
|
+ Property Str: String Read FStr Write FStr;
|
|
|
+ end;
|
|
|
+
|
|
|
+ { TMyColl }
|
|
|
+
|
|
|
+ TMyColl = Class(TCollection)
|
|
|
+ private
|
|
|
+ function GetIt(index : Integer): TMyItem;
|
|
|
+ procedure SetIt(index : Integer; const AValue: TMyItem);
|
|
|
+ Public
|
|
|
+ Property It[index : Integer] : TMyItem Read GetIt Write SetIt; default;
|
|
|
+ end;
|
|
|
+
|
|
|
+ { TCollComp }
|
|
|
+
|
|
|
+ TCollComp = Class(TComponent)
|
|
|
+ private
|
|
|
+ FMyColl: TMyColl;
|
|
|
+ procedure SetMyColl(const AValue: TMyColl);
|
|
|
+ Public
|
|
|
+ Constructor Create(AOwner : TComponent); override;
|
|
|
+ Destructor Destroy; override;
|
|
|
+ Function ToStream : TStream;
|
|
|
+ Procedure FromStream(AStream : TStream);
|
|
|
+ Published
|
|
|
+ Property MyColl : TMyColl Read FMyColl Write SetMyColl;
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
+Implementation
|
|
|
+
|
|
|
+{ TStringComponent3 }
|
|
|
+
|
|
|
+constructor TStringComponent3.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited Create(AOwner);
|
|
|
+ F:='A ''quoted'' string';
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChildrenComponent.GetChildren(Proc: TGetChildProc; Root: TComponent);
|
|
|
+
|
|
|
+Var
|
|
|
+ I : Integer;
|
|
|
+
|
|
|
+begin
|
|
|
+ if (Root=Nil) and (Root<>Nil) then exit;// Silence warning
|
|
|
+ For I:=0 to ComponentCount-1 do
|
|
|
+ Proc(Components[i]);
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+{ TIntegerComponent }
|
|
|
+
|
|
|
+constructor TIntegerComponent.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FIntProp:=3;
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+{ TInt64Component }
|
|
|
+
|
|
|
+constructor TInt64Component.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FIntProp:=4;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TInt64Component2 }
|
|
|
+
|
|
|
+constructor TInt64Component2.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FIntProp:=2 shl 9;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TIntegerComponent2 }
|
|
|
+
|
|
|
+constructor TIntegerComponent2.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FintProp:=2 shl 9;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TIntegerComponent3 }
|
|
|
+
|
|
|
+constructor TIntegerComponent3.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FintProp:=2 shl 17;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TInt64Component3 }
|
|
|
+
|
|
|
+constructor TInt64Component3.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FintProp:=2 shl 17;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TInt64Component4 }
|
|
|
+
|
|
|
+constructor TInt64Component4.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FintProp:=NativeInt(MaxInt)+NativeInt(2 shl 14);
|
|
|
+end;
|
|
|
+
|
|
|
+{ TStringComponent }
|
|
|
+
|
|
|
+constructor TStringComponent.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ Inherited;
|
|
|
+ F:='A string';
|
|
|
+end;
|
|
|
+
|
|
|
+{ TWideStringComponent }
|
|
|
+
|
|
|
+constructor TWideStringComponent.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:='Some WideString';
|
|
|
+end;
|
|
|
+
|
|
|
+{ TSingleComponent }
|
|
|
+
|
|
|
+constructor TSingleComponent.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:=1.23;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TDoubleComponent }
|
|
|
+
|
|
|
+constructor TDoubleComponent.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:=2.34;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TExtendedComponent }
|
|
|
+
|
|
|
+constructor TExtendedComponent.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:=3.45;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TCompComponent }
|
|
|
+(*
|
|
|
+constructor TCompComponent.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:=4.56;
|
|
|
+end;
|
|
|
+*)
|
|
|
+
|
|
|
+{ TCurrencyComponent }
|
|
|
+
|
|
|
+constructor TCurrencyComponent.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:=5.67;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TDateTimeComponent }
|
|
|
+
|
|
|
+constructor TDateTimeComponent.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:=EncodeDate(1996,8,1);
|
|
|
+end;
|
|
|
+
|
|
|
+{ TDateTimeComponent2 }
|
|
|
+
|
|
|
+constructor TDateTimeComponent2.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:=EncodeTime(23,20,0,0);
|
|
|
+end;
|
|
|
+
|
|
|
+{ TDateTimeComponent3 }
|
|
|
+
|
|
|
+constructor TDateTimeComponent3.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:=EncodeDate(1996,8,1)+EncodeTime(23,20,0,0);
|
|
|
+end;
|
|
|
+
|
|
|
+{ TEnumComponent }
|
|
|
+
|
|
|
+constructor TEnumComponent.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:=Four;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TSetComponent }
|
|
|
+
|
|
|
+constructor TSetComponent.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:=[two,five];
|
|
|
+end;
|
|
|
+
|
|
|
+{ TIntegerComponent4 }
|
|
|
+
|
|
|
+constructor TIntegerComponent4.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FIntProp:=6;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TIntegerComponent5 }
|
|
|
+
|
|
|
+constructor TIntegerComponent5.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FintProp:=5;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TInt64Component5 }
|
|
|
+
|
|
|
+constructor TInt64Component5.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FIntProp:=7;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TInt64Component6 }
|
|
|
+
|
|
|
+constructor TInt64Component6.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FintProp:=8;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TEnumComponent3 }
|
|
|
+
|
|
|
+constructor TEnumComponent3.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:=Three;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TEnumComponent4 }
|
|
|
+
|
|
|
+constructor TEnumComponent4.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:=Two;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TSetComponent4 }
|
|
|
+
|
|
|
+constructor TSetComponent4.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:=[Three,Six];
|
|
|
+end;
|
|
|
+
|
|
|
+{ TSetComponent3 }
|
|
|
+
|
|
|
+constructor TSetComponent3.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ F:=[One,Four];
|
|
|
+end;
|
|
|
+
|
|
|
+{ TMultipleComponent }
|
|
|
+
|
|
|
+constructor TMultipleComponent.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FInt:=1;
|
|
|
+ FCurrency:=2.3;
|
|
|
+ FString:='A String';
|
|
|
+ FDice:=two;
|
|
|
+ F:=[three,four];
|
|
|
+end;
|
|
|
+
|
|
|
+{ TTestPersistent1 }
|
|
|
+
|
|
|
+procedure TTestPersistent1.Assign(ASource: TPersistent);
|
|
|
+
|
|
|
+Var
|
|
|
+ T :TTestPersistent1;
|
|
|
+
|
|
|
+begin
|
|
|
+ If ASource is TTestPersistent1 then
|
|
|
+ begin
|
|
|
+ T:=ASource as TTestPersistent1;
|
|
|
+ FInt:=T.FInt;
|
|
|
+ FAString:=T.FAString;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ inherited;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TPersistentComponent }
|
|
|
+
|
|
|
+constructor TPersistentComponent.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FPers:=TTestPersistent1.Create;
|
|
|
+ FPers.AInteger:=3;
|
|
|
+ FPers.AString:='A persistent string';
|
|
|
+end;
|
|
|
+
|
|
|
+Destructor TPersistentComponent.Destroy;
|
|
|
+
|
|
|
+begin
|
|
|
+ FreeAndNil(FPers);
|
|
|
+ Inherited;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TPersistentComponent.SetPers(const Value: TTestPersistent1);
|
|
|
+begin
|
|
|
+ FPers.Assign(Value);
|
|
|
+end;
|
|
|
+
|
|
|
+{ TCollectionComponent }
|
|
|
+
|
|
|
+Procedure TCollectionComponent.SetColl(AColl : TCollection);
|
|
|
+
|
|
|
+begin
|
|
|
+ FColl.Assign(AColl);
|
|
|
+end;
|
|
|
+
|
|
|
+Constructor TCollectionComponent.Create(AOwner : TComponent);
|
|
|
+
|
|
|
+begin
|
|
|
+ Inherited;
|
|
|
+ FColl:=TCollection.Create(TTestItem);
|
|
|
+end;
|
|
|
+
|
|
|
+Destructor TCollectionComponent.Destroy;
|
|
|
+
|
|
|
+begin
|
|
|
+ FreeAndNil(FColl);
|
|
|
+ Inherited;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TCollectionComponent2 }
|
|
|
+
|
|
|
+Constructor TCollectionComponent2.Create(AOwner : TComponent);
|
|
|
+
|
|
|
+begin
|
|
|
+ Inherited;
|
|
|
+ (FColl.Add as TTestItem).StrProp:='First';
|
|
|
+ (FColl.Add as TTestItem).StrProp:='Second';
|
|
|
+ (FColl.Add as TTestItem).StrProp:='Third';
|
|
|
+end;
|
|
|
+
|
|
|
+{ TCollectionComponen3 }
|
|
|
+
|
|
|
+Constructor TCollectionComponent3.Create(AOwner : TComponent);
|
|
|
+
|
|
|
+begin
|
|
|
+ Inherited;
|
|
|
+ (FColl.Add as TTestItem).StrProp:='First';
|
|
|
+ (FColl.Add as TTestItem).StrProp:='';
|
|
|
+ (FColl.Add as TTestItem).StrProp:='Third';
|
|
|
+end;
|
|
|
+
|
|
|
+{ TCollectionComponent4 }
|
|
|
+
|
|
|
+constructor TCollectionComponent4.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FColl:=TTestCollection.Create;
|
|
|
+ (FColl.Add as TTestItem).StrProp:='Something'
|
|
|
+end;
|
|
|
+
|
|
|
+destructor TCollectionComponent4.Destroy;
|
|
|
+begin
|
|
|
+ FreeAndNil(FColl);
|
|
|
+ inherited;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TCollectionComponent4.SetColl(AColl: TTestCollection);
|
|
|
+begin
|
|
|
+ FColl.Assign(AColl);
|
|
|
+end;
|
|
|
+
|
|
|
+{ TCollectionComponent5 }
|
|
|
+
|
|
|
+procedure TCollectionComponent5.SetColl(AColl: TCollection);
|
|
|
+begin
|
|
|
+ FColl.Assign(AColl);
|
|
|
+end;
|
|
|
+
|
|
|
+constructor TCollectionComponent5.Create(AOwner: TComponent);
|
|
|
+var
|
|
|
+ Item : TTest2Item;
|
|
|
+begin
|
|
|
+ inherited Create(AOwner);
|
|
|
+ FColl:=TCollection.Create(TTest2Item);
|
|
|
+ Item := FColl.Add as TTest2Item;
|
|
|
+ Item.StrProp1 := 'Something';
|
|
|
+ Item.StrProp2 := 'Otherthing';
|
|
|
+ Item := FColl.Add as TTest2Item;
|
|
|
+ Item.StrProp1 := 'Something 2';
|
|
|
+ Item.StrProp2 := 'Otherthing 2';
|
|
|
+end;
|
|
|
+
|
|
|
+destructor TCollectionComponent5.Destroy;
|
|
|
+begin
|
|
|
+ FreeAndNil(FColl);
|
|
|
+ inherited Destroy;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TTestCollection }
|
|
|
+
|
|
|
+Constructor TTestCollection.Create;
|
|
|
+begin
|
|
|
+ Inherited Create(TTestitem);
|
|
|
+ PropName:='MyCollProp';
|
|
|
+end;
|
|
|
+
|
|
|
+{ TStreamedOwnedComponent }
|
|
|
+
|
|
|
+Constructor TStreamedOwnedComponent.Create(AOwner : TComponent);
|
|
|
+
|
|
|
+begin
|
|
|
+ Inherited;
|
|
|
+ Sub:=TIntegerComponent.Create(Self);
|
|
|
+ Sub.Name:='Sub';
|
|
|
+end;
|
|
|
+
|
|
|
+{ TStreamedOwnedComponents }
|
|
|
+
|
|
|
+constructor TStreamedOwnedComponents.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ SubA:=TIntegerComponent.Create(Self);
|
|
|
+ SubA.Name:='SubA';
|
|
|
+ SubB:=TStringComponent.Create(Self);
|
|
|
+ SubB.Name:='SubB';
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+Constructor TOwnedComponent.Create(AOwner : TComponent);
|
|
|
+
|
|
|
+Var
|
|
|
+ C: TComponent;
|
|
|
+
|
|
|
+begin
|
|
|
+ Inherited;
|
|
|
+ C:=TIntegerComponent.Create(Self);
|
|
|
+ C.Name:='SubComponent';
|
|
|
+ CompProp:=C;
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+{ TMethodComponent }
|
|
|
+
|
|
|
+Constructor TMethodComponent.Create(AOwner : TComponent);
|
|
|
+
|
|
|
+begin
|
|
|
+ Inherited;
|
|
|
+ MethodProp:=@MyMethod;
|
|
|
+end;
|
|
|
+
|
|
|
+Procedure TMethodComponent.MyMethod;
|
|
|
+
|
|
|
+begin
|
|
|
+ // Do nothing.
|
|
|
+end;
|
|
|
+
|
|
|
+{ TMethodComponent2 }
|
|
|
+
|
|
|
+constructor TMethodComponent2.Create(AOwner: TComponent);
|
|
|
+
|
|
|
+Var
|
|
|
+ C : TMethodComponent;
|
|
|
+
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ C:=TMethodComponent.Create(Self);
|
|
|
+ C.Name:='AComponent';
|
|
|
+ C.MethodProp:=@MyMethod2;
|
|
|
+end;
|
|
|
+
|
|
|
+Procedure TMethodComponent2.MyMethod2;
|
|
|
+
|
|
|
+begin
|
|
|
+ // Do nothng
|
|
|
+end;
|
|
|
+
|
|
|
+{ TMyColl }
|
|
|
+
|
|
|
+function TMyColl.GetIt(index : Integer): TMyItem;
|
|
|
+begin
|
|
|
+ Result:=Items[Index] as TMyItem;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TMyColl.SetIt(index : Integer; const AValue: TMyItem);
|
|
|
+begin
|
|
|
+ Items[Index]:=AValue;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TCollComp }
|
|
|
+
|
|
|
+procedure TCollComp.SetMyColl(const AValue: TMyColl);
|
|
|
+begin
|
|
|
+ if (FMyColl=AValue) then
|
|
|
+ exit;
|
|
|
+ FMyColl.Assign(AValue);
|
|
|
+end;
|
|
|
+
|
|
|
+constructor TCollComp.Create(AOwner: TComponent);
|
|
|
+begin
|
|
|
+ inherited Create(AOwner);
|
|
|
+ FMyColl:=TMyCOll.Create(TMyItem);
|
|
|
+end;
|
|
|
+
|
|
|
+destructor TCollComp.Destroy;
|
|
|
+begin
|
|
|
+ FreeAndNil(FMyColl);
|
|
|
+ inherited Destroy;
|
|
|
+end;
|
|
|
+
|
|
|
+function TCollComp.ToStream: TStream;
|
|
|
+begin
|
|
|
+ Result:=TMemoryStream.Create;
|
|
|
+ Result.WriteComponent(Self);
|
|
|
+ Result.Position:=0;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TCollComp.FromStream(AStream: TStream);
|
|
|
+begin
|
|
|
+ AStream.ReadComponent(Self);
|
|
|
+ Astream.Free;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TMyItem.Assign(Source: TPersistent);
|
|
|
+
|
|
|
+Var
|
|
|
+ I : TMyItem;
|
|
|
+
|
|
|
+begin
|
|
|
+ If (Source is TMyItem) then
|
|
|
+ begin
|
|
|
+ I:=Source as TMyItem;
|
|
|
+ FNR:=I.NR;
|
|
|
+ FStr:=I.Str;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ inherited Assign(Source);
|
|
|
+end;
|
|
|
+
|
|
|
+end.
|