testcomps.pas 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011
  1. unit testcomps;
  2. interface
  3. uses classes, sysutils;
  4. Type
  5. TEmptyComponent = Class(TComponent)
  6. end;
  7. // Simple integer, fits in 1 byte
  8. TIntegerComponent = Class(TComponent)
  9. private
  10. FIntProp: Integer;
  11. Public
  12. Constructor Create(AOwner : TComponent); override;
  13. Published
  14. Property IntProp : Integer Read FIntProp Write FIntProp;
  15. end;
  16. // Simple integer, fits in 2 bytes
  17. TIntegerComponent2 = Class(TComponent)
  18. private
  19. FIntProp: Integer;
  20. Public
  21. Constructor Create(AOwner : TComponent); override;
  22. Published
  23. Property IntProp : Integer Read FIntProp Write FIntProp;
  24. end;
  25. // Simple integer, fits in 3 bytes
  26. TIntegerComponent3 = Class(TComponent)
  27. private
  28. FIntProp: Integer;
  29. Public
  30. Constructor Create(AOwner : TComponent); override;
  31. Published
  32. Property IntProp : Integer Read FIntProp Write FIntProp;
  33. end;
  34. // Simple integer, Default value. (set)
  35. TIntegerComponent4 = Class(TComponent)
  36. private
  37. FIntProp: Integer;
  38. Public
  39. Constructor Create(AOwner : TComponent); override;
  40. Published
  41. Property IntProp : Integer Read FIntProp Write FIntProp default 6;
  42. end;
  43. // Simple integer, Default value. (not set)
  44. TIntegerComponent5 = Class(TComponent)
  45. private
  46. FIntProp: Integer;
  47. Public
  48. Constructor Create(AOwner : TComponent); override;
  49. Published
  50. Property IntProp : Integer Read FIntProp Write FIntProp default 6;
  51. end;
  52. // Simple Int64 property fits in a single byte.
  53. TInt64Component = Class(TComponent)
  54. private
  55. FIntProp: Int64;
  56. Public
  57. Constructor Create(AOwner : TComponent); override;
  58. Published
  59. Property Int64Prop : Int64 Read FIntProp Write FIntProp;
  60. end;
  61. // Simple Int64 property fits 2 bytes.
  62. TInt64Component2 = Class(TComponent)
  63. private
  64. FIntProp: Int64;
  65. Public
  66. Constructor Create(AOwner : TComponent); override;
  67. Published
  68. Property Int64Prop : Int64 Read FIntProp Write FIntProp;
  69. end;
  70. // Simple Int64 property fits 3 bytes.
  71. TInt64Component3 = Class(TComponent)
  72. private
  73. FIntProp: Int64;
  74. Public
  75. Constructor Create(AOwner : TComponent); override;
  76. Published
  77. Property Int64Prop : Int64 Read FIntProp Write FIntProp;
  78. end;
  79. // Simple Int64 property fits 4 bytes.
  80. TInt64Component4 = Class(TComponent)
  81. private
  82. FIntProp: Int64;
  83. Public
  84. Constructor Create(AOwner : TComponent); override;
  85. Published
  86. Property Int64Prop : Int64 Read FIntProp Write FIntProp;
  87. end;
  88. // Int64 property with default, set.
  89. TInt64Component5 = Class(TComponent)
  90. private
  91. FIntProp: Int64;
  92. Public
  93. Constructor Create(AOwner : TComponent); override;
  94. Published
  95. Property Int64Prop : Int64 Read FIntProp Write FIntProp default 7;
  96. end;
  97. // Int64 property with default, not set.
  98. TInt64Component6 = Class(TComponent)
  99. private
  100. FIntProp: Int64;
  101. Public
  102. Constructor Create(AOwner : TComponent); override;
  103. Published
  104. Property Int64Prop : Int64 Read FIntProp Write FIntProp default 7;
  105. end;
  106. // String property.
  107. TStringComponent = Class(TComponent)
  108. private
  109. F: String;
  110. Public
  111. Constructor Create(AOwner : TComponent); override;
  112. Published
  113. Property StringProp : String Read F Write F;
  114. end;
  115. // String property, empty
  116. TStringComponent2 = Class(TComponent)
  117. private
  118. F: String;
  119. Published
  120. Property StringProp : String Read F Write F;
  121. end;
  122. // WideString property
  123. TWideStringComponent = Class(TComponent)
  124. private
  125. F: WideString;
  126. Public
  127. Constructor Create(AOwner : TComponent); override;
  128. Published
  129. Property WideStringProp : WideString Read F Write F;
  130. end;
  131. // WideString property, empty
  132. TWideStringComponent2 = Class(TComponent)
  133. private
  134. F: WideString;
  135. Published
  136. Property WideStringProp : WideString Read F Write F;
  137. end;
  138. // Single property
  139. TSingleComponent = Class(TComponent)
  140. private
  141. F: Single;
  142. Public
  143. Constructor Create(AOwner : TComponent); override;
  144. Published
  145. Property SingleProp : Single Read F Write F;
  146. end;
  147. // Double property
  148. TDoubleComponent = Class(TComponent)
  149. private
  150. F: Double;
  151. Public
  152. Constructor Create(AOwner : TComponent); override;
  153. Published
  154. Property DoubleProp : Double Read F Write F;
  155. end;
  156. // Extended property
  157. TExtendedComponent = Class(TComponent)
  158. private
  159. F: Extended;
  160. Public
  161. Constructor Create(AOwner : TComponent); override;
  162. Published
  163. Property ExtendedProp : Extended Read F Write F;
  164. end;
  165. // Comp property
  166. TCompComponent = Class(TComponent)
  167. private
  168. F: Comp;
  169. Public
  170. Constructor Create(AOwner : TComponent); override;
  171. Published
  172. Property CompProp : Comp Read F Write F;
  173. end;
  174. // Currency property
  175. TCurrencyComponent = Class(TComponent)
  176. private
  177. F: Currency;
  178. Public
  179. Constructor Create(AOwner : TComponent); override;
  180. Published
  181. Property CurrencyProp : Currency Read F Write F;
  182. end;
  183. // DateTime property, date only
  184. TDateTimeComponent = Class(TComponent)
  185. private
  186. F: TDateTime;
  187. Public
  188. Constructor Create(AOwner : TComponent); override;
  189. Published
  190. Property DateTimeProp : TDateTime Read F Write F;
  191. end;
  192. // DateTime property, time only
  193. TDateTimeComponent2 = Class(TComponent)
  194. private
  195. F: TDateTime;
  196. Public
  197. Constructor Create(AOwner : TComponent); override;
  198. Published
  199. Property DateTimeProp : TDateTime Read F Write F;
  200. end;
  201. // DateTime property, Date and time
  202. TDateTimeComponent3 = Class(TComponent)
  203. private
  204. F: TDateTime;
  205. Public
  206. Constructor Create(AOwner : TComponent); override;
  207. Published
  208. Property DateTimeProp : TDateTime Read F Write F;
  209. end;
  210. TDice = (one,two,three,four,five,six);
  211. // Enum property. No default (i.e. 0)
  212. TEnumComponent = Class(TComponent)
  213. private
  214. F: TDice;
  215. Public
  216. Constructor Create(AOwner : TComponent); override;
  217. Published
  218. Property Dice : TDice Read F Write F;
  219. end;
  220. // Enum property, not set
  221. TEnumComponent2 = Class(TComponent)
  222. private
  223. F: TDice;
  224. Published
  225. Property Dice : TDice Read F Write F;
  226. end;
  227. // Enum property with default, not set
  228. TEnumComponent3 = Class(TComponent)
  229. private
  230. F: TDice;
  231. Public
  232. Constructor Create(AOwner : TComponent); override;
  233. Published
  234. Property Dice : TDice Read F Write F default two;
  235. end;
  236. // Enum property with default, set
  237. TEnumComponent4 = Class(TComponent)
  238. private
  239. F: TDice;
  240. Public
  241. Constructor Create(AOwner : TComponent); override;
  242. Published
  243. Property Dice : TDice Read F Write F default two;
  244. end;
  245. // Enum property with default, no need to set
  246. TEnumComponent5 = Class(TComponent)
  247. private
  248. F: TDice;
  249. Published
  250. Property Dice : TDice Read F Write F default one;
  251. end;
  252. Throws = Set of TDice;
  253. // Set property, no default.
  254. TSetComponent = Class(TComponent)
  255. private
  256. F: Throws;
  257. Public
  258. Constructor Create(AOwner : TComponent); override;
  259. Published
  260. Property Throw : Throws Read F Write F;
  261. end;
  262. // Set property, no default, not set
  263. TSetComponent2 = Class(TComponent)
  264. private
  265. F: Throws;
  266. Published
  267. Property Throw : Throws Read F Write F;
  268. end;
  269. // Set property, default, not set
  270. TSetComponent3 = Class(TComponent)
  271. private
  272. F: Throws;
  273. Public
  274. Constructor Create(AOwner : TComponent); override;
  275. Published
  276. Property Throw : Throws Read F Write F default [three,six];
  277. end;
  278. // Set property, default, set
  279. TSetComponent4 = Class(TComponent)
  280. private
  281. F: Throws;
  282. Public
  283. Constructor Create(AOwner : TComponent); override;
  284. Published
  285. Property Throw : Throws Read F Write F default [three,six];
  286. end;
  287. // Multiple components.
  288. TMultipleComponent = Class(TComponent)
  289. private
  290. FCurrency: Currency;
  291. FInt: Integer;
  292. FString: String;
  293. FDice: TDice;
  294. F: Throws;
  295. Public
  296. Constructor Create(AOwner : TComponent); override;
  297. Published
  298. Property IntProp : Integer Read FInt Write FInt;
  299. Property StringProp : String Read FString Write FString;
  300. Property CurrencyProp : Currency Read FCurrency Write FCurrency;
  301. Property Dice : TDice Read FDice Write FDice;
  302. Property Throw : Throws Read F Write F;
  303. end;
  304. TTestPersistent1 = Class(TPersistent)
  305. private
  306. FInt: Integer;
  307. FAstring: String;
  308. Public
  309. Procedure Assign(ASource : TPersistent); override;
  310. Published
  311. Property AInteger : Integer Read FInt Write FInt;
  312. Property AString : String Read FAstring Write FAsTring;
  313. end;
  314. // Persistent as a published property.
  315. TPersistentComponent = Class(TComponent)
  316. private
  317. FPers: TTestPersistent1;
  318. procedure SetPers(const Value: TTestPersistent1);
  319. Public
  320. Constructor Create(AOwner : TComponent); override;
  321. Destructor Destroy; override;
  322. Published
  323. Property Persist : TTestPersistent1 Read FPers Write SetPers;
  324. end;
  325. // For use in collection streaming
  326. TTestItem = Class(TCollectionItem)
  327. Private
  328. F : String;
  329. Published
  330. Property StrProp : String Read F Write F;
  331. end;
  332. // For use in collection streaming: items with two properties
  333. { TTest2Item }
  334. TTest2Item = Class(TCollectionItem)
  335. Private
  336. F1, F2 : String;
  337. public
  338. Published
  339. Property StrProp1 : String Read F1 Write F1;
  340. Property StrProp2 : String Read F2 Write F2;
  341. end;
  342. TTestCollection = Class(TCollection)
  343. Public
  344. Constructor Create;
  345. end;
  346. // Empty collection
  347. TCollectionComponent = Class(TComponent)
  348. Private
  349. FColl : TCollection;
  350. Procedure SetColl(AColl : TCollection);
  351. Public
  352. Constructor Create(AOwner : TComponent); override;
  353. Destructor Destroy; override;
  354. Published
  355. Property Coll : TCollection Read FColl Write SetCOll;
  356. end;
  357. // collection with elements.
  358. TCollectionComponent2 = Class(TCollectionComponent)
  359. Public
  360. Constructor Create(AOwner : TComponent); override;
  361. end;
  362. // collection with elements, one has no props
  363. TCollectionComponent3 = Class(TCollectionComponent)
  364. Public
  365. Constructor Create(AOwner : TComponent); override;
  366. end;
  367. // collection with changed propname, one element
  368. TCollectionComponent4 = Class(TComponent)
  369. FColl : TTestCollection;
  370. Procedure SetColl(AColl : TTestCollection);
  371. Public
  372. Constructor Create(AOwner : TComponent); override;
  373. Destructor Destroy; override;
  374. Published
  375. Property Coll : TTestCollection Read FColl Write SetColl;
  376. end;
  377. // collection two elements, items with two properties
  378. TCollectionComponent5 = Class(TComponent)
  379. FColl : TCollection;
  380. Procedure SetColl(AColl : TCollection);
  381. Public
  382. Constructor Create(AOwner : TComponent); override;
  383. Destructor Destroy; override;
  384. Published
  385. Property Coll : TCollection Read FColl Write SetColl;
  386. end;
  387. // Component as published property
  388. TOwnedComponent = Class(TComponent)
  389. F : TComponent;
  390. Public
  391. Constructor Create(AOwner : TComponent); override;
  392. Published
  393. Property CompProp : TComponent Read F Write F;
  394. end;
  395. // Use this if owned components should also be streamed.
  396. TChildrenComponent = Class(TComponent)
  397. // Owned components are children
  398. procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  399. end;
  400. // Stream sub component.
  401. TStreamedOwnedComponent = Class(TChildrenComponent)
  402. Public
  403. Constructor Create(AOwner : TComponent); override;
  404. Published
  405. Sub : TIntegerComponent;
  406. end;
  407. // Stream 2 sub components
  408. TStreamedOwnedComponents = Class(TChildrenComponent)
  409. Public
  410. Constructor Create(AOwner : TComponent); override;
  411. Published
  412. SubA : TIntegerComponent;
  413. SubB : TStringComponent;
  414. end;
  415. // Method tests.
  416. THandler = Procedure of Object;
  417. // Method property that points to own method.
  418. TMethodComponent = Class(TComponent)
  419. Private
  420. F : THandler;
  421. Public
  422. Constructor Create(AOwner : TComponent); override;
  423. Published
  424. Procedure MyMethod;
  425. Property MethodProp : THandler Read F Write F;
  426. end;
  427. // Method property of owned component that points to own method.
  428. TMethodComponent2 = Class(TChildrenComponent)
  429. Public
  430. Constructor Create(AOwner : TComponent); override;
  431. Published
  432. Procedure MyMethod2;
  433. end;
  434. { TVariantComponent }
  435. TVariantComponent = Class(TComponent)
  436. private
  437. FVariant: Variant;
  438. Published
  439. Property VariantProp : Variant Read FVariant Write FVariant;
  440. end;
  441. TBooleanComponent = Class(TComponent)
  442. private
  443. FBoolean: Boolean;
  444. Published
  445. Property BooleanProp : Boolean Read FBoolean Write FBoolean;
  446. end;
  447. TemptyPersistent = Class(TPersistent);
  448. { TStringsCOmponent }
  449. TStringsCOmponent = Class(TComponent)
  450. private
  451. FStrings: TStrings;
  452. procedure SetStrings(AValue: TStrings);
  453. Public
  454. Constructor Create(AOwner : TComponent); override;
  455. Destructor Destroy; override;
  456. Published
  457. Property StringsProp : TStrings Read FStrings Write SetStrings;
  458. end;
  459. Implementation
  460. { TStringsCOmponent }
  461. procedure TStringsCOmponent.SetStrings(AValue: TStrings);
  462. begin
  463. if FStrings=AValue then Exit;
  464. FStrings.Assign(AValue);
  465. end;
  466. constructor TStringsCOmponent.Create(AOwner: TComponent);
  467. begin
  468. inherited Create(AOwner);
  469. FStrings:=TStringList.Create;
  470. FStrings.Add('One');
  471. FStrings.Add('Two');
  472. FStrings.Add('Three');
  473. end;
  474. destructor TStringsCOmponent.Destroy;
  475. begin
  476. FreeAndNil(FStrings);
  477. inherited Destroy;
  478. end;
  479. procedure TChildrenComponent.GetChildren(Proc: TGetChildProc; Root: TComponent);
  480. Var
  481. I : Integer;
  482. begin
  483. For I:=0 to ComponentCount-1 do
  484. Proc(Components[i]);
  485. end;
  486. { TIntegerComponent }
  487. constructor TIntegerComponent.Create(AOwner: TComponent);
  488. begin
  489. inherited;
  490. FIntProp:=3;
  491. end;
  492. { TInt64Component }
  493. constructor TInt64Component.Create(AOwner: TComponent);
  494. begin
  495. inherited;
  496. FIntProp:=4;
  497. end;
  498. { TInt64Component2 }
  499. constructor TInt64Component2.Create(AOwner: TComponent);
  500. begin
  501. inherited;
  502. FIntProp:=2 shl 9;
  503. end;
  504. { TIntegerComponent2 }
  505. constructor TIntegerComponent2.Create(AOwner: TComponent);
  506. begin
  507. inherited;
  508. FintProp:=2 shl 9;
  509. end;
  510. { TIntegerComponent3 }
  511. constructor TIntegerComponent3.Create(AOwner: TComponent);
  512. begin
  513. inherited;
  514. FintProp:=2 shl 17;
  515. end;
  516. { TInt64Component3 }
  517. constructor TInt64Component3.Create(AOwner: TComponent);
  518. begin
  519. inherited;
  520. FintProp:=2 shl 17;
  521. end;
  522. { TInt64Component4 }
  523. constructor TInt64Component4.Create(AOwner: TComponent);
  524. begin
  525. inherited;
  526. FintProp:=Int64(MaxInt)+Int64(2 shl 17);
  527. end;
  528. { TStringComponent }
  529. constructor TStringComponent.Create(AOwner: TComponent);
  530. begin
  531. Inherited;
  532. F:='A string';
  533. end;
  534. { TWideStringComponent }
  535. constructor TWideStringComponent.Create(AOwner: TComponent);
  536. begin
  537. inherited;
  538. F:='Some WideString';
  539. end;
  540. { TSingleComponent }
  541. constructor TSingleComponent.Create(AOwner: TComponent);
  542. begin
  543. inherited;
  544. F:=1.23;
  545. end;
  546. { TDoubleComponent }
  547. constructor TDoubleComponent.Create(AOwner: TComponent);
  548. begin
  549. inherited;
  550. F:=2.34;
  551. end;
  552. { TExtendedComponent }
  553. constructor TExtendedComponent.Create(AOwner: TComponent);
  554. begin
  555. inherited;
  556. F:=3.45;
  557. end;
  558. { TCompComponent }
  559. constructor TCompComponent.Create(AOwner: TComponent);
  560. begin
  561. inherited;
  562. {$if defined(FPC_COMP_IS_INT64)}
  563. F:=Round(4.56);
  564. {$else defined(FPC_COMP_IS_INT64)}
  565. F:=4.56;
  566. {$endif defined(FPC_COMP_IS_INT64)}
  567. end;
  568. { TCurrencyComponent }
  569. constructor TCurrencyComponent.Create(AOwner: TComponent);
  570. begin
  571. inherited;
  572. F:=5.67;
  573. end;
  574. { TDateTimeComponent }
  575. constructor TDateTimeComponent.Create(AOwner: TComponent);
  576. begin
  577. inherited;
  578. F:=EncodeDate(1996,8,1);
  579. end;
  580. { TDateTimeComponent2 }
  581. constructor TDateTimeComponent2.Create(AOwner: TComponent);
  582. begin
  583. inherited;
  584. F:=EncodeTime(23,20,0,0);
  585. end;
  586. { TDateTimeComponent3 }
  587. constructor TDateTimeComponent3.Create(AOwner: TComponent);
  588. begin
  589. inherited;
  590. F:=EncodeDate(1996,8,1)+EncodeTime(23,20,0,0);
  591. end;
  592. { TEnumComponent }
  593. constructor TEnumComponent.Create(AOwner: TComponent);
  594. begin
  595. inherited;
  596. F:=Four;
  597. end;
  598. { TSetComponent }
  599. constructor TSetComponent.Create(AOwner: TComponent);
  600. begin
  601. inherited;
  602. F:=[two,five];
  603. end;
  604. { TIntegerComponent4 }
  605. constructor TIntegerComponent4.Create(AOwner: TComponent);
  606. begin
  607. inherited;
  608. FIntProp:=6;
  609. end;
  610. { TIntegerComponent5 }
  611. constructor TIntegerComponent5.Create(AOwner: TComponent);
  612. begin
  613. inherited;
  614. FintProp:=5;
  615. end;
  616. { TInt64Component5 }
  617. constructor TInt64Component5.Create(AOwner: TComponent);
  618. begin
  619. inherited;
  620. FIntProp:=7;
  621. end;
  622. { TInt64Component6 }
  623. constructor TInt64Component6.Create(AOwner: TComponent);
  624. begin
  625. inherited;
  626. FintProp:=8;
  627. end;
  628. { TEnumComponent3 }
  629. constructor TEnumComponent3.Create(AOwner: TComponent);
  630. begin
  631. inherited;
  632. F:=Three;
  633. end;
  634. { TEnumComponent4 }
  635. constructor TEnumComponent4.Create(AOwner: TComponent);
  636. begin
  637. inherited;
  638. F:=Two;
  639. end;
  640. { TSetComponent4 }
  641. constructor TSetComponent4.Create(AOwner: TComponent);
  642. begin
  643. inherited;
  644. F:=[Three,Six];
  645. end;
  646. { TSetComponent3 }
  647. constructor TSetComponent3.Create(AOwner: TComponent);
  648. begin
  649. inherited;
  650. F:=[One,Four];
  651. end;
  652. { TMultipleComponent }
  653. constructor TMultipleComponent.Create(AOwner: TComponent);
  654. begin
  655. inherited;
  656. FInt:=1;
  657. FCurrency:=2.3;
  658. FString:='A String';
  659. FDice:=two;
  660. F:=[three,four];
  661. end;
  662. { TTestPersistent1 }
  663. procedure TTestPersistent1.Assign(ASource: TPersistent);
  664. Var
  665. T :TTestPersistent1;
  666. begin
  667. If ASource is TTestPersistent1 then
  668. begin
  669. T:=ASource as TTestPersistent1;
  670. FInt:=T.FInt;
  671. FAString:=T.FAString;
  672. end
  673. else
  674. inherited;
  675. end;
  676. { TPersistentComponent }
  677. constructor TPersistentComponent.Create(AOwner: TComponent);
  678. begin
  679. inherited;
  680. FPers:=TTestPersistent1.Create;
  681. FPers.AInteger:=3;
  682. FPers.AString:='A persistent string';
  683. end;
  684. Destructor TPersistentComponent.Destroy;
  685. begin
  686. FreeAndNil(FPers);
  687. Inherited;
  688. end;
  689. procedure TPersistentComponent.SetPers(const Value: TTestPersistent1);
  690. begin
  691. FPers.Assign(Value);
  692. end;
  693. { TCollectionComponent }
  694. Procedure TCollectionComponent.SetColl(AColl : TCollection);
  695. begin
  696. FColl.Assign(AColl);
  697. end;
  698. Constructor TCollectionComponent.Create(AOwner : TComponent);
  699. begin
  700. Inherited;
  701. FColl:=TCollection.Create(TTestItem);
  702. end;
  703. Destructor TCollectionComponent.Destroy;
  704. begin
  705. FreeAndNil(FColl);
  706. Inherited;
  707. end;
  708. { TCollectionComponent2 }
  709. Constructor TCollectionComponent2.Create(AOwner : TComponent);
  710. begin
  711. Inherited;
  712. (FColl.Add as TTestItem).StrProp:='First';
  713. (FColl.Add as TTestItem).StrProp:='Second';
  714. (FColl.Add as TTestItem).StrProp:='Third';
  715. end;
  716. { TCollectionComponen3 }
  717. Constructor TCollectionComponent3.Create(AOwner : TComponent);
  718. begin
  719. Inherited;
  720. (FColl.Add as TTestItem).StrProp:='First';
  721. (FColl.Add as TTestItem).StrProp:='';
  722. (FColl.Add as TTestItem).StrProp:='Third';
  723. end;
  724. { TCollectionComponent4 }
  725. constructor TCollectionComponent4.Create(AOwner: TComponent);
  726. begin
  727. inherited;
  728. FColl:=TTestCollection.Create;
  729. (FColl.Add as TTestItem).StrProp:='Something'
  730. end;
  731. destructor TCollectionComponent4.Destroy;
  732. begin
  733. FreeAndNil(FColl);
  734. inherited;
  735. end;
  736. procedure TCollectionComponent4.SetColl(AColl: TTestCollection);
  737. begin
  738. FColl.Assign(AColl);
  739. end;
  740. { TCollectionComponent5 }
  741. procedure TCollectionComponent5.SetColl(AColl: TCollection);
  742. begin
  743. FColl.Assign(AColl);
  744. end;
  745. constructor TCollectionComponent5.Create(AOwner: TComponent);
  746. var
  747. Item : TTest2Item;
  748. begin
  749. inherited Create(AOwner);
  750. FColl:=TCollection.Create(TTest2Item);
  751. Item := FColl.Add as TTest2Item;
  752. Item.StrProp1 := 'Something';
  753. Item.StrProp2 := 'Otherthing';
  754. Item := FColl.Add as TTest2Item;
  755. Item.StrProp1 := 'Something 2';
  756. Item.StrProp2 := 'Otherthing 2';
  757. end;
  758. destructor TCollectionComponent5.Destroy;
  759. begin
  760. FreeAndNil(FColl);
  761. inherited Destroy;
  762. end;
  763. { TTestCollection }
  764. Constructor TTestCollection.Create;
  765. begin
  766. Inherited Create(TTestitem);
  767. PropName:='MyCollProp';
  768. end;
  769. { TStreamedOwnedComponent }
  770. Constructor TStreamedOwnedComponent.Create(AOwner : TComponent);
  771. begin
  772. Inherited;
  773. Sub:=TIntegerComponent.Create(Self);
  774. Sub.Name:='Sub';
  775. end;
  776. { TStreamedOwnedComponents }
  777. constructor TStreamedOwnedComponents.Create(AOwner: TComponent);
  778. begin
  779. inherited;
  780. SubA:=TIntegerComponent.Create(Self);
  781. SubA.Name:='SubA';
  782. SubB:=TStringComponent.Create(Self);
  783. SubB.Name:='SubB';
  784. end;
  785. Constructor TOwnedComponent.Create(AOwner : TComponent);
  786. Var
  787. C: TComponent;
  788. begin
  789. Inherited;
  790. C:=TIntegerComponent.Create(Self);
  791. C.Name:='SubComponent';
  792. CompProp:=C;
  793. end;
  794. { TMethodComponent }
  795. Constructor TMethodComponent.Create(AOwner : TComponent);
  796. begin
  797. Inherited;
  798. {$ifdef fpc}
  799. MethodProp:=@MyMethod;
  800. {$else}
  801. MethodProp:=MyMethod;
  802. {$endif}
  803. end;
  804. Procedure TMethodComponent.MyMethod;
  805. begin
  806. // Do nothing.
  807. end;
  808. { TMethodComponent2 }
  809. constructor TMethodComponent2.Create(AOwner: TComponent);
  810. Var
  811. C : TMethodComponent;
  812. begin
  813. inherited;
  814. C:=TMethodComponent.Create(Self);
  815. C.Name:='AComponent';
  816. {$ifdef fpc}
  817. C.MethodProp:=@MyMethod2;
  818. {$else}
  819. C.MethodProp:=MyMethod2;
  820. {$endif}
  821. end;
  822. Procedure TMethodComponent2.MyMethod2;
  823. begin
  824. // Do nothng
  825. end;
  826. end.