testcomps.pp 19 KB

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