testcomps.pp 20 KB

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