mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-04-05 17:07:45 +02:00
1114 lines
23 KiB
ObjectPascal
1114 lines
23 KiB
ObjectPascal
{ Components used in component streaming tests.
|
|
|
|
Copyright (C) 2020- Michael Van Canneyt michael@freepascal.org
|
|
|
|
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;
|
|
|
|
{ TCharComponent2 }
|
|
|
|
TCharComponent = Class(TComponent)
|
|
private
|
|
C: Char;
|
|
Public
|
|
Constructor Create(AOwner : TComponent); override;
|
|
Published
|
|
Property CharProp : Char Read C Write C;
|
|
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
|
|
|
|
{ TCharComponent2 }
|
|
|
|
constructor TCharComponent.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
C:=#10;
|
|
end;
|
|
|
|
{ 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.
|