testcomps.pp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872
  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 ExtendedProp : 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. Throws = Set of TDice;
  246. // Set property, no default.
  247. TSetComponent = Class(TComponent)
  248. private
  249. F: Throws;
  250. Public
  251. Constructor Create(AOwner : TComponent); override;
  252. Published
  253. Property Throw : Throws Read F Write F;
  254. end;
  255. // Set property, no default, not set
  256. TSetComponent2 = Class(TComponent)
  257. private
  258. F: Throws;
  259. Published
  260. Property Throw : Throws Read F Write F;
  261. end;
  262. // Set property, default, not set
  263. TSetComponent3 = Class(TComponent)
  264. private
  265. F: Throws;
  266. Public
  267. Constructor Create(AOwner : TComponent); override;
  268. Published
  269. Property Throw : Throws Read F Write F default [three,six];
  270. end;
  271. // Set property, default, set
  272. TSetComponent4 = Class(TComponent)
  273. private
  274. F: Throws;
  275. Public
  276. Constructor Create(AOwner : TComponent); override;
  277. Published
  278. Property Throw : Throws Read F Write F default [three,six];
  279. end;
  280. // Multiple components.
  281. TMultipleComponent = Class(TComponent)
  282. private
  283. FCurrency: Currency;
  284. FInt: Integer;
  285. FString: String;
  286. FDice: TDice;
  287. F: Throws;
  288. Public
  289. Constructor Create(AOwner : TComponent); override;
  290. Published
  291. Property IntProp : Integer Read FInt Write FInt;
  292. Property StringProp : String Read FString Write FString;
  293. Property CurrencyProp : Currency Read FCurrency Write FCurrency;
  294. Property Dice : TDice Read FDice Write FDice;
  295. Property Throw : Throws Read F Write F;
  296. end;
  297. TTestPersistent1 = Class(TPersistent)
  298. private
  299. FInt: Integer;
  300. FAstring: String;
  301. Public
  302. Procedure Assign(ASource : TPersistent); override;
  303. Published
  304. Property AInteger : Integer Read FInt Write FInt;
  305. Property AString : String Read FAstring Write FAsTring;
  306. end;
  307. // Persistent as a published property.
  308. TPersistentComponent = Class(TComponent)
  309. private
  310. FPers: TTestPersistent1;
  311. procedure SetPers(const Value: TTestPersistent1);
  312. Public
  313. Constructor Create(AOwner : TComponent); override;
  314. Destructor Destroy; override;
  315. Published
  316. Property Persist : TTestPersistent1 Read FPers Write SetPers;
  317. end;
  318. // For use in collection streaming
  319. TTestItem = Class(TCollectionItem)
  320. Private
  321. F : String;
  322. Published
  323. Property StrProp : String Read F Write F;
  324. end;
  325. TTestCollection = Class(TCollection)
  326. Public
  327. Constructor Create;
  328. end;
  329. // Empty collection
  330. TCollectionComponent = Class(TComponent)
  331. Private
  332. FColl : TCollection;
  333. Procedure SetColl(AColl : TCollection);
  334. Public
  335. Constructor Create(AOwner : TComponent); override;
  336. Destructor Destroy; override;
  337. Published
  338. Property Coll : TCollection Read FColl Write SetCOll;
  339. end;
  340. // collection with elements.
  341. TCollectionComponent2 = Class(TCollectionComponent)
  342. Public
  343. Constructor Create(AOwner : TComponent); override;
  344. end;
  345. // collection with elements, one has no props
  346. TCollectionComponent3 = Class(TCollectionComponent)
  347. Public
  348. Constructor Create(AOwner : TComponent); override;
  349. end;
  350. // collection with changed propname, one element
  351. TCollectionComponent4 = Class(TComponent)
  352. FColl : TTestCollection;
  353. Procedure SetColl(AColl : TTestCollection);
  354. Public
  355. Constructor Create(AOwner : TComponent); override;
  356. Destructor Destroy; override;
  357. Published
  358. Property Coll : TTestCollection Read FColl Write SetCOll;
  359. end;
  360. // Component as published property
  361. TOwnedComponent = Class(TComponent)
  362. F : TComponent;
  363. Public
  364. Constructor Create(AOwner : TComponent); override;
  365. Published
  366. Property CompProp : TComponent Read F Write F;
  367. end;
  368. // Use this if owned components should also be streamed.
  369. TChildrenComponent = Class(TComponent)
  370. // Owned components are children
  371. procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  372. end;
  373. // Stream sub component.
  374. TStreamedOwnedComponent = Class(TChildrenComponent)
  375. Public
  376. Constructor Create(AOwner : TComponent); override;
  377. Published
  378. Sub : TIntegerComponent;
  379. end;
  380. // Method tests.
  381. THandler = Procedure of Object;
  382. // Method property that points to own method.
  383. TMethodComponent = Class(TComponent)
  384. Private
  385. F : THandler;
  386. Public
  387. Constructor Create(AOwner : TComponent); override;
  388. Published
  389. Procedure MyMethod;
  390. Property MethodProp : THandler Read F Write F;
  391. end;
  392. // Method property of owned component that points to own method.
  393. TMethodComponent2 = Class(TChildrenComponent)
  394. Public
  395. Constructor Create(AOwner : TComponent); override;
  396. Published
  397. Procedure MyMethod2;
  398. end;
  399. Implementation
  400. procedure TChildrenComponent.GetChildren(Proc: TGetChildProc; Root: TComponent);
  401. Var
  402. I : Integer;
  403. begin
  404. For I:=0 to ComponentCount-1 do
  405. Proc(Components[i]);
  406. end;
  407. { TIntegerComponent }
  408. constructor TIntegerComponent.Create(AOwner: TComponent);
  409. begin
  410. inherited;
  411. FIntProp:=3;
  412. end;
  413. { TInt64Component }
  414. constructor TInt64Component.Create(AOwner: TComponent);
  415. begin
  416. inherited;
  417. FIntProp:=4;
  418. end;
  419. { TInt64Component2 }
  420. constructor TInt64Component2.Create(AOwner: TComponent);
  421. begin
  422. inherited;
  423. FIntProp:=2 shl 9;
  424. end;
  425. { TIntegerComponent2 }
  426. constructor TIntegerComponent2.Create(AOwner: TComponent);
  427. begin
  428. inherited;
  429. FintProp:=2 shl 9;
  430. end;
  431. { TIntegerComponent3 }
  432. constructor TIntegerComponent3.Create(AOwner: TComponent);
  433. begin
  434. inherited;
  435. FintProp:=2 shl 17;
  436. end;
  437. { TInt64Component3 }
  438. constructor TInt64Component3.Create(AOwner: TComponent);
  439. begin
  440. inherited;
  441. FintProp:=2 shl 17;
  442. end;
  443. { TInt64Component4 }
  444. constructor TInt64Component4.Create(AOwner: TComponent);
  445. begin
  446. inherited;
  447. FintProp:=Int64(MaxInt)+Int64(2 shl 17);
  448. end;
  449. { TStringComponent }
  450. constructor TStringComponent.Create(AOwner: TComponent);
  451. begin
  452. F:='A string';
  453. end;
  454. { TWideStringComponent }
  455. constructor TWideStringComponent.Create(AOwner: TComponent);
  456. begin
  457. inherited;
  458. F:='Some WideString';
  459. end;
  460. { TSingleComponent }
  461. constructor TSingleComponent.Create(AOwner: TComponent);
  462. begin
  463. inherited;
  464. F:=1.23;
  465. end;
  466. { TDoubleComponent }
  467. constructor TDoubleComponent.Create(AOwner: TComponent);
  468. begin
  469. inherited;
  470. F:=2.34;
  471. end;
  472. { TExtendedComponent }
  473. constructor TExtendedComponent.Create(AOwner: TComponent);
  474. begin
  475. inherited;
  476. F:=3.45;
  477. end;
  478. { TCompComponent }
  479. constructor TCompComponent.Create(AOwner: TComponent);
  480. begin
  481. inherited;
  482. F:=4.56;
  483. end;
  484. { TCurrencyComponent }
  485. constructor TCurrencyComponent.Create(AOwner: TComponent);
  486. begin
  487. inherited;
  488. F:=5.67;
  489. end;
  490. { TDateTimeComponent }
  491. constructor TDateTimeComponent.Create(AOwner: TComponent);
  492. begin
  493. inherited;
  494. F:=EncodeDate(1996,8,1);
  495. end;
  496. { TDateTimeComponent2 }
  497. constructor TDateTimeComponent2.Create(AOwner: TComponent);
  498. begin
  499. inherited;
  500. F:=EncodeTime(23,20,0,0);
  501. end;
  502. { TDateTimeComponent3 }
  503. constructor TDateTimeComponent3.Create(AOwner: TComponent);
  504. begin
  505. inherited;
  506. F:=EncodeDate(1996,8,1)+EncodeTime(23,20,0,0);
  507. end;
  508. { TEnumComponent }
  509. constructor TEnumComponent.Create(AOwner: TComponent);
  510. begin
  511. inherited;
  512. F:=Four;
  513. end;
  514. { TSetComponent }
  515. constructor TSetComponent.Create(AOwner: TComponent);
  516. begin
  517. inherited;
  518. F:=[two,five];
  519. end;
  520. { TIntegerComponent4 }
  521. constructor TIntegerComponent4.Create(AOwner: TComponent);
  522. begin
  523. inherited;
  524. FIntProp:=6;
  525. end;
  526. { TIntegerComponent5 }
  527. constructor TIntegerComponent5.Create(AOwner: TComponent);
  528. begin
  529. inherited;
  530. FintProp:=5;
  531. end;
  532. { TInt64Component5 }
  533. constructor TInt64Component5.Create(AOwner: TComponent);
  534. begin
  535. inherited;
  536. FIntProp:=7;
  537. end;
  538. { TInt64Component6 }
  539. constructor TInt64Component6.Create(AOwner: TComponent);
  540. begin
  541. inherited;
  542. FintProp:=8;
  543. end;
  544. { TEnumComponent3 }
  545. constructor TEnumComponent3.Create(AOwner: TComponent);
  546. begin
  547. inherited;
  548. F:=Three;
  549. end;
  550. { TEnumComponent4 }
  551. constructor TEnumComponent4.Create(AOwner: TComponent);
  552. begin
  553. inherited;
  554. F:=Two;
  555. end;
  556. { TSetComponent4 }
  557. constructor TSetComponent4.Create(AOwner: TComponent);
  558. begin
  559. inherited;
  560. F:=[Three,Six];
  561. end;
  562. { TSetComponent3 }
  563. constructor TSetComponent3.Create(AOwner: TComponent);
  564. begin
  565. inherited;
  566. F:=[One,Four];
  567. end;
  568. { TMultipleComponent }
  569. constructor TMultipleComponent.Create(AOwner: TComponent);
  570. begin
  571. inherited;
  572. FInt:=1;
  573. FCurrency:=2.3;
  574. FString:='A String';
  575. FDice:=two;
  576. F:=[three,four];
  577. end;
  578. { TTestPersistent1 }
  579. procedure TTestPersistent1.Assign(ASource: TPersistent);
  580. Var
  581. T :TTestPersistent1;
  582. begin
  583. If ASource is TTestPersistent1 then
  584. begin
  585. T:=ASource as TTestPersistent1;
  586. FInt:=T.FInt;
  587. FAString:=T.FAString;
  588. end
  589. else
  590. inherited;
  591. end;
  592. { TPersistentComponent }
  593. constructor TPersistentComponent.Create(AOwner: TComponent);
  594. begin
  595. inherited;
  596. FPers:=TTestPersistent1.Create;
  597. FPers.AInteger:=3;
  598. FPers.AString:='A persistent string';
  599. end;
  600. Destructor TPersistentComponent.Destroy;
  601. begin
  602. FreeAndNil(FPers);
  603. Inherited;
  604. end;
  605. procedure TPersistentComponent.SetPers(const Value: TTestPersistent1);
  606. begin
  607. FPers.Assign(Value);
  608. end;
  609. { TCollectionComponent }
  610. Procedure TCollectionComponent.SetColl(AColl : TCollection);
  611. begin
  612. FColl.Assign(AColl);
  613. end;
  614. Constructor TCollectionComponent.Create(AOwner : TComponent);
  615. begin
  616. Inherited;
  617. FColl:=TCollection.Create(TTestItem);
  618. end;
  619. Destructor TCollectionComponent.Destroy;
  620. begin
  621. FreeAndNil(FColl);
  622. Inherited;
  623. end;
  624. { TCollectionComponent2 }
  625. Constructor TCollectionComponent2.Create(AOwner : TComponent);
  626. begin
  627. Inherited;
  628. (FColl.Add as TTestItem).StrProp:='First';
  629. (FColl.Add as TTestItem).StrProp:='Second';
  630. (FColl.Add as TTestItem).StrProp:='Third';
  631. end;
  632. { TCollectionComponen3 }
  633. Constructor TCollectionComponent3.Create(AOwner : TComponent);
  634. begin
  635. Inherited;
  636. (FColl.Add as TTestItem).StrProp:='First';
  637. (FColl.Add as TTestItem).StrProp:='';
  638. (FColl.Add as TTestItem).StrProp:='Third';
  639. end;
  640. { TStreamedOwnedComponent }
  641. Constructor TStreamedOwnedComponent.Create(AOwner : TComponent);
  642. begin
  643. Inherited;
  644. Sub:=TIntegerComponent.Create(Self);
  645. Sub.Name:='Sub';
  646. end;
  647. Constructor TOwnedComponent.Create(AOwner : TComponent);
  648. Var
  649. C: TComponent;
  650. begin
  651. Inherited;
  652. C:=TIntegerComponent.Create(Self);
  653. C.Name:='SubComponent';
  654. CompProp:=C;
  655. end;
  656. { TMethodComponent }
  657. Constructor TMethodComponent.Create(AOwner : TComponent);
  658. begin
  659. Inherited;
  660. {$ifdef fpc}
  661. MethodProp:=@MyMethod;
  662. {$else}
  663. MethodProp:=MyMethod;
  664. {$endif}
  665. end;
  666. Procedure TMethodComponent.MyMethod;
  667. begin
  668. // Do nothing.
  669. end;
  670. { TMethodComponent2 }
  671. constructor TMethodComponent2.Create(AOwner: TComponent);
  672. Var
  673. C : TMethodComponent;
  674. begin
  675. inherited;
  676. C:=TMethodComponent.Create(Self);
  677. C.Name:='AComponent';
  678. {$ifdef fpc}
  679. C.MethodProp:=@MyMethod2;
  680. {$else}
  681. C.MethodProp:=MyMethod2;
  682. {$endif}
  683. end;
  684. Procedure TMethodComponent2.MyMethod2;
  685. begin
  686. // Do nothng
  687. end;
  688. { TCollectionComponent4 }
  689. constructor TCollectionComponent4.Create(AOwner: TComponent);
  690. begin
  691. inherited;
  692. FColl:=TTestCollection.Create;
  693. (FColl.Add as TTestItem).StrProp:='Something'
  694. end;
  695. destructor TCollectionComponent4.Destroy;
  696. begin
  697. FreeAndNil(FColl);
  698. inherited;
  699. end;
  700. procedure TCollectionComponent4.SetColl(AColl: TTestCollection);
  701. begin
  702. end;
  703. { TTestCollection }
  704. Constructor TTestCollection.Create;
  705. begin
  706. Inherited Create(TTestitem);
  707. PropName:='MyCollProp';
  708. end;
  709. end.