testcomps.pp 23 KB

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