testcomps.pp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932
  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. // 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. // Method tests.
  408. THandler = Procedure of Object;
  409. // Method property that points to own method.
  410. TMethodComponent = Class(TComponent)
  411. Private
  412. F : THandler;
  413. Public
  414. Constructor Create(AOwner : TComponent); override;
  415. Published
  416. Procedure MyMethod;
  417. Property MethodProp : THandler Read F Write F;
  418. end;
  419. // Method property of owned component that points to own method.
  420. TMethodComponent2 = Class(TChildrenComponent)
  421. Public
  422. Constructor Create(AOwner : TComponent); override;
  423. Published
  424. Procedure MyMethod2;
  425. end;
  426. Implementation
  427. procedure TChildrenComponent.GetChildren(Proc: TGetChildProc; Root: TComponent);
  428. Var
  429. I : Integer;
  430. begin
  431. For I:=0 to ComponentCount-1 do
  432. Proc(Components[i]);
  433. end;
  434. { TIntegerComponent }
  435. constructor TIntegerComponent.Create(AOwner: TComponent);
  436. begin
  437. inherited;
  438. FIntProp:=3;
  439. end;
  440. { TInt64Component }
  441. constructor TInt64Component.Create(AOwner: TComponent);
  442. begin
  443. inherited;
  444. FIntProp:=4;
  445. end;
  446. { TInt64Component2 }
  447. constructor TInt64Component2.Create(AOwner: TComponent);
  448. begin
  449. inherited;
  450. FIntProp:=2 shl 9;
  451. end;
  452. { TIntegerComponent2 }
  453. constructor TIntegerComponent2.Create(AOwner: TComponent);
  454. begin
  455. inherited;
  456. FintProp:=2 shl 9;
  457. end;
  458. { TIntegerComponent3 }
  459. constructor TIntegerComponent3.Create(AOwner: TComponent);
  460. begin
  461. inherited;
  462. FintProp:=2 shl 17;
  463. end;
  464. { TInt64Component3 }
  465. constructor TInt64Component3.Create(AOwner: TComponent);
  466. begin
  467. inherited;
  468. FintProp:=2 shl 17;
  469. end;
  470. { TInt64Component4 }
  471. constructor TInt64Component4.Create(AOwner: TComponent);
  472. begin
  473. inherited;
  474. FintProp:=Int64(MaxInt)+Int64(2 shl 17);
  475. end;
  476. { TStringComponent }
  477. constructor TStringComponent.Create(AOwner: TComponent);
  478. begin
  479. F:='A string';
  480. end;
  481. { TWideStringComponent }
  482. constructor TWideStringComponent.Create(AOwner: TComponent);
  483. begin
  484. inherited;
  485. F:='Some WideString';
  486. end;
  487. { TSingleComponent }
  488. constructor TSingleComponent.Create(AOwner: TComponent);
  489. begin
  490. inherited;
  491. F:=1.23;
  492. end;
  493. { TDoubleComponent }
  494. constructor TDoubleComponent.Create(AOwner: TComponent);
  495. begin
  496. inherited;
  497. F:=2.34;
  498. end;
  499. { TExtendedComponent }
  500. constructor TExtendedComponent.Create(AOwner: TComponent);
  501. begin
  502. inherited;
  503. F:=3.45;
  504. end;
  505. { TCompComponent }
  506. constructor TCompComponent.Create(AOwner: TComponent);
  507. begin
  508. inherited;
  509. F:=4.56;
  510. end;
  511. { TCurrencyComponent }
  512. constructor TCurrencyComponent.Create(AOwner: TComponent);
  513. begin
  514. inherited;
  515. F:=5.67;
  516. end;
  517. { TDateTimeComponent }
  518. constructor TDateTimeComponent.Create(AOwner: TComponent);
  519. begin
  520. inherited;
  521. F:=EncodeDate(1996,8,1);
  522. end;
  523. { TDateTimeComponent2 }
  524. constructor TDateTimeComponent2.Create(AOwner: TComponent);
  525. begin
  526. inherited;
  527. F:=EncodeTime(23,20,0,0);
  528. end;
  529. { TDateTimeComponent3 }
  530. constructor TDateTimeComponent3.Create(AOwner: TComponent);
  531. begin
  532. inherited;
  533. F:=EncodeDate(1996,8,1)+EncodeTime(23,20,0,0);
  534. end;
  535. { TEnumComponent }
  536. constructor TEnumComponent.Create(AOwner: TComponent);
  537. begin
  538. inherited;
  539. F:=Four;
  540. end;
  541. { TSetComponent }
  542. constructor TSetComponent.Create(AOwner: TComponent);
  543. begin
  544. inherited;
  545. F:=[two,five];
  546. end;
  547. { TIntegerComponent4 }
  548. constructor TIntegerComponent4.Create(AOwner: TComponent);
  549. begin
  550. inherited;
  551. FIntProp:=6;
  552. end;
  553. { TIntegerComponent5 }
  554. constructor TIntegerComponent5.Create(AOwner: TComponent);
  555. begin
  556. inherited;
  557. FintProp:=5;
  558. end;
  559. { TInt64Component5 }
  560. constructor TInt64Component5.Create(AOwner: TComponent);
  561. begin
  562. inherited;
  563. FIntProp:=7;
  564. end;
  565. { TInt64Component6 }
  566. constructor TInt64Component6.Create(AOwner: TComponent);
  567. begin
  568. inherited;
  569. FintProp:=8;
  570. end;
  571. { TEnumComponent3 }
  572. constructor TEnumComponent3.Create(AOwner: TComponent);
  573. begin
  574. inherited;
  575. F:=Three;
  576. end;
  577. { TEnumComponent4 }
  578. constructor TEnumComponent4.Create(AOwner: TComponent);
  579. begin
  580. inherited;
  581. F:=Two;
  582. end;
  583. { TSetComponent4 }
  584. constructor TSetComponent4.Create(AOwner: TComponent);
  585. begin
  586. inherited;
  587. F:=[Three,Six];
  588. end;
  589. { TSetComponent3 }
  590. constructor TSetComponent3.Create(AOwner: TComponent);
  591. begin
  592. inherited;
  593. F:=[One,Four];
  594. end;
  595. { TMultipleComponent }
  596. constructor TMultipleComponent.Create(AOwner: TComponent);
  597. begin
  598. inherited;
  599. FInt:=1;
  600. FCurrency:=2.3;
  601. FString:='A String';
  602. FDice:=two;
  603. F:=[three,four];
  604. end;
  605. { TTestPersistent1 }
  606. procedure TTestPersistent1.Assign(ASource: TPersistent);
  607. Var
  608. T :TTestPersistent1;
  609. begin
  610. If ASource is TTestPersistent1 then
  611. begin
  612. T:=ASource as TTestPersistent1;
  613. FInt:=T.FInt;
  614. FAString:=T.FAString;
  615. end
  616. else
  617. inherited;
  618. end;
  619. { TPersistentComponent }
  620. constructor TPersistentComponent.Create(AOwner: TComponent);
  621. begin
  622. inherited;
  623. FPers:=TTestPersistent1.Create;
  624. FPers.AInteger:=3;
  625. FPers.AString:='A persistent string';
  626. end;
  627. Destructor TPersistentComponent.Destroy;
  628. begin
  629. FreeAndNil(FPers);
  630. Inherited;
  631. end;
  632. procedure TPersistentComponent.SetPers(const Value: TTestPersistent1);
  633. begin
  634. FPers.Assign(Value);
  635. end;
  636. { TCollectionComponent }
  637. Procedure TCollectionComponent.SetColl(AColl : TCollection);
  638. begin
  639. FColl.Assign(AColl);
  640. end;
  641. Constructor TCollectionComponent.Create(AOwner : TComponent);
  642. begin
  643. Inherited;
  644. FColl:=TCollection.Create(TTestItem);
  645. end;
  646. Destructor TCollectionComponent.Destroy;
  647. begin
  648. FreeAndNil(FColl);
  649. Inherited;
  650. end;
  651. { TCollectionComponent2 }
  652. Constructor TCollectionComponent2.Create(AOwner : TComponent);
  653. begin
  654. Inherited;
  655. (FColl.Add as TTestItem).StrProp:='First';
  656. (FColl.Add as TTestItem).StrProp:='Second';
  657. (FColl.Add as TTestItem).StrProp:='Third';
  658. end;
  659. { TCollectionComponen3 }
  660. Constructor TCollectionComponent3.Create(AOwner : TComponent);
  661. begin
  662. Inherited;
  663. (FColl.Add as TTestItem).StrProp:='First';
  664. (FColl.Add as TTestItem).StrProp:='';
  665. (FColl.Add as TTestItem).StrProp:='Third';
  666. end;
  667. { TCollectionComponent4 }
  668. constructor TCollectionComponent4.Create(AOwner: TComponent);
  669. begin
  670. inherited;
  671. FColl:=TTestCollection.Create;
  672. (FColl.Add as TTestItem).StrProp:='Something'
  673. end;
  674. destructor TCollectionComponent4.Destroy;
  675. begin
  676. FreeAndNil(FColl);
  677. inherited;
  678. end;
  679. procedure TCollectionComponent4.SetColl(AColl: TTestCollection);
  680. begin
  681. FColl.Assign(AColl);
  682. end;
  683. { TCollectionComponent5 }
  684. procedure TCollectionComponent5.SetColl(AColl: TCollection);
  685. begin
  686. FColl.Assign(AColl);
  687. end;
  688. constructor TCollectionComponent5.Create(AOwner: TComponent);
  689. var
  690. Item : TTest2Item;
  691. begin
  692. inherited Create(AOwner);
  693. FColl:=TCollection.Create(TTest2Item);
  694. Item := FColl.Add as TTest2Item;
  695. Item.StrProp1 := 'Something';
  696. Item.StrProp2 := 'Otherthing';
  697. Item := FColl.Add as TTest2Item;
  698. Item.StrProp1 := 'Something 2';
  699. Item.StrProp2 := 'Otherthing 2';
  700. end;
  701. destructor TCollectionComponent5.Destroy;
  702. begin
  703. FreeAndNil(FColl);
  704. inherited Destroy;
  705. end;
  706. { TTestCollection }
  707. Constructor TTestCollection.Create;
  708. begin
  709. Inherited Create(TTestitem);
  710. PropName:='MyCollProp';
  711. end;
  712. { TStreamedOwnedComponent }
  713. Constructor TStreamedOwnedComponent.Create(AOwner : TComponent);
  714. begin
  715. Inherited;
  716. Sub:=TIntegerComponent.Create(Self);
  717. Sub.Name:='Sub';
  718. end;
  719. Constructor TOwnedComponent.Create(AOwner : TComponent);
  720. Var
  721. C: TComponent;
  722. begin
  723. Inherited;
  724. C:=TIntegerComponent.Create(Self);
  725. C.Name:='SubComponent';
  726. CompProp:=C;
  727. end;
  728. { TMethodComponent }
  729. Constructor TMethodComponent.Create(AOwner : TComponent);
  730. begin
  731. Inherited;
  732. {$ifdef fpc}
  733. MethodProp:=@MyMethod;
  734. {$else}
  735. MethodProp:=MyMethod;
  736. {$endif}
  737. end;
  738. Procedure TMethodComponent.MyMethod;
  739. begin
  740. // Do nothing.
  741. end;
  742. { TMethodComponent2 }
  743. constructor TMethodComponent2.Create(AOwner: TComponent);
  744. Var
  745. C : TMethodComponent;
  746. begin
  747. inherited;
  748. C:=TMethodComponent.Create(Self);
  749. C.Name:='AComponent';
  750. {$ifdef fpc}
  751. C.MethodProp:=@MyMethod2;
  752. {$else}
  753. C.MethodProp:=MyMethod2;
  754. {$endif}
  755. end;
  756. Procedure TMethodComponent2.MyMethod2;
  757. begin
  758. // Do nothng
  759. end;
  760. end.