testcomps.pp 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113
  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. { TCharComponent2 }
  123. TCharComponent = Class(TComponent)
  124. private
  125. C: Char;
  126. Public
  127. Constructor Create(AOwner : TComponent); override;
  128. Published
  129. Property CharProp : Char Read C Write C;
  130. end;
  131. // String property.
  132. TStringComponent = Class(TComponent)
  133. private
  134. F: String;
  135. Public
  136. Constructor Create(AOwner : TComponent); override;
  137. Published
  138. Property StringProp : String Read F Write F;
  139. end;
  140. // String property, empty
  141. TStringComponent2 = Class(TComponent)
  142. private
  143. F: String;
  144. Published
  145. Property StringProp : String Read F Write F;
  146. end;
  147. // String property, with quote.
  148. { TStringComponent3 }
  149. TStringComponent3 = Class(TComponent)
  150. private
  151. F: String;
  152. Public
  153. Constructor Create(AOwner : TComponent); override;
  154. Published
  155. Property StringProp : String Read F Write F;
  156. end;
  157. // WideString property
  158. TWideStringComponent = Class(TComponent)
  159. private
  160. F: WideString;
  161. Public
  162. Constructor Create(AOwner : TComponent); override;
  163. Published
  164. Property WideStringProp : WideString Read F Write F;
  165. end;
  166. // WideString property, empty
  167. TWideStringComponent2 = Class(TComponent)
  168. private
  169. F: WideString;
  170. Published
  171. Property WideStringProp : WideString Read F Write F;
  172. end;
  173. // Single property
  174. TSingleComponent = Class(TComponent)
  175. private
  176. F: Single;
  177. Public
  178. Constructor Create(AOwner : TComponent); override;
  179. Published
  180. Property SingleProp : Single Read F Write F;
  181. end;
  182. // Double property
  183. TDoubleComponent = Class(TComponent)
  184. private
  185. F: Double;
  186. Public
  187. Constructor Create(AOwner : TComponent); override;
  188. Published
  189. Property DoubleProp : Double Read F Write F;
  190. end;
  191. // Extended property
  192. TExtendedComponent = Class(TComponent)
  193. private
  194. F: Extended;
  195. Public
  196. Constructor Create(AOwner : TComponent); override;
  197. Published
  198. Property ExtendedProp : Extended Read F Write F;
  199. end;
  200. (*
  201. // Comp property
  202. TCompComponent = Class(TComponent)
  203. private
  204. F: Comp;
  205. Public
  206. Constructor Create(AOwner : TComponent); override;
  207. Published
  208. Property ExtendedProp : Comp Read F Write F;
  209. end;
  210. *)
  211. // Currency property
  212. TCurrencyComponent = Class(TComponent)
  213. private
  214. F: Currency;
  215. Public
  216. Constructor Create(AOwner : TComponent); override;
  217. Published
  218. Property CurrencyProp : Currency Read F Write F;
  219. end;
  220. // DateTime property, date only
  221. TDateTimeComponent = 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, time only
  230. TDateTimeComponent2 = 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. // DateTime property, Date and time
  239. TDateTimeComponent3 = Class(TComponent)
  240. private
  241. F: TDateTime;
  242. Public
  243. Constructor Create(AOwner : TComponent); override;
  244. Published
  245. Property DateTimeProp : TDateTime Read F Write F;
  246. end;
  247. TDice = (one,two,three,four,five,six);
  248. // Enum property. No default (i.e. 0)
  249. TEnumComponent = Class(TComponent)
  250. private
  251. F: TDice;
  252. Public
  253. Constructor Create(AOwner : TComponent); override;
  254. Published
  255. Property Dice : TDice Read F Write F;
  256. end;
  257. // Enum property, not set
  258. TEnumComponent2 = Class(TComponent)
  259. private
  260. F: TDice;
  261. Published
  262. Property Dice : TDice Read F Write F;
  263. end;
  264. // Enum property with default, not set
  265. TEnumComponent3 = 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, set
  274. TEnumComponent4 = Class(TComponent)
  275. private
  276. F: TDice;
  277. Public
  278. Constructor Create(AOwner : TComponent); override;
  279. Published
  280. Property Dice : TDice Read F Write F default two;
  281. end;
  282. // Enum property with default, no need to set
  283. TEnumComponent5 = Class(TComponent)
  284. private
  285. F: TDice;
  286. Published
  287. Property Dice : TDice Read F Write F default one;
  288. end;
  289. Throws = Set of TDice;
  290. // Set property, no default.
  291. TSetComponent = Class(TComponent)
  292. private
  293. F: Throws;
  294. Public
  295. Constructor Create(AOwner : TComponent); override;
  296. Published
  297. Property Throw : Throws Read F Write F;
  298. end;
  299. // Set property, no default, not set
  300. TSetComponent2 = Class(TComponent)
  301. private
  302. F: Throws;
  303. Published
  304. Property Throw : Throws Read F Write F;
  305. end;
  306. // Set property, default, not set
  307. TSetComponent3 = 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. // Set property, default, set
  316. TSetComponent4 = Class(TComponent)
  317. private
  318. F: Throws;
  319. Public
  320. Constructor Create(AOwner : TComponent); override;
  321. Published
  322. Property Throw : Throws Read F Write F default [three,six];
  323. end;
  324. // Multiple components.
  325. TMultipleComponent = Class(TComponent)
  326. private
  327. FCurrency: Currency;
  328. FInt: Integer;
  329. FString: String;
  330. FDice: TDice;
  331. F: Throws;
  332. Public
  333. Constructor Create(AOwner : TComponent); override;
  334. Published
  335. Property IntProp : Integer Read FInt Write FInt;
  336. Property StringProp : String Read FString Write FString;
  337. Property CurrencyProp : Currency Read FCurrency Write FCurrency;
  338. Property Dice : TDice Read FDice Write FDice;
  339. Property Throw : Throws Read F Write F;
  340. end;
  341. TTestPersistent1 = Class(TPersistent)
  342. private
  343. FInt: Integer;
  344. FAstring: String;
  345. Public
  346. Procedure Assign(ASource : TPersistent); override;
  347. Published
  348. Property AInteger : Integer Read FInt Write FInt;
  349. Property AString : String Read FAstring Write FAsTring;
  350. end;
  351. // Persistent as a published property.
  352. TPersistentComponent = Class(TComponent)
  353. private
  354. FPers: TTestPersistent1;
  355. procedure SetPers(const Value: TTestPersistent1);
  356. Public
  357. Constructor Create(AOwner : TComponent); override;
  358. Destructor Destroy; override;
  359. Published
  360. Property Persist : TTestPersistent1 Read FPers Write SetPers;
  361. end;
  362. // For use in collection streaming
  363. TTestItem = Class(TCollectionItem)
  364. Private
  365. F : String;
  366. Published
  367. Property StrProp : String Read F Write F;
  368. end;
  369. // For use in collection streaming: items with two properties
  370. { TTest2Item }
  371. TTest2Item = Class(TCollectionItem)
  372. Private
  373. F1, F2 : String;
  374. public
  375. Published
  376. Property StrProp1 : String Read F1 Write F1;
  377. Property StrProp2 : String Read F2 Write F2;
  378. end;
  379. TTestCollection = Class(TCollection)
  380. Public
  381. Constructor Create;
  382. end;
  383. // Empty collection
  384. TCollectionComponent = Class(TComponent)
  385. Private
  386. FColl : TCollection;
  387. Procedure SetColl(AColl : TCollection);
  388. Public
  389. Constructor Create(AOwner : TComponent); override;
  390. Destructor Destroy; override;
  391. Published
  392. Property Coll : TCollection Read FColl Write SetCOll;
  393. end;
  394. // collection with elements.
  395. TCollectionComponent2 = Class(TCollectionComponent)
  396. Public
  397. Constructor Create(AOwner : TComponent); override;
  398. end;
  399. // collection with elements, one has no props
  400. TCollectionComponent3 = Class(TCollectionComponent)
  401. Public
  402. Constructor Create(AOwner : TComponent); override;
  403. end;
  404. // collection with changed propname, one element
  405. TCollectionComponent4 = Class(TComponent)
  406. FColl : TTestCollection;
  407. Procedure SetColl(AColl : TTestCollection);
  408. Public
  409. Constructor Create(AOwner : TComponent); override;
  410. Destructor Destroy; override;
  411. Published
  412. Property Coll : TTestCollection Read FColl Write SetColl;
  413. end;
  414. // collection two elements, items with two properties
  415. TCollectionComponent5 = Class(TComponent)
  416. FColl : TCollection;
  417. Procedure SetColl(AColl : TCollection);
  418. Public
  419. Constructor Create(AOwner : TComponent); override;
  420. Destructor Destroy; override;
  421. Published
  422. Property Coll : TCollection Read FColl Write SetColl;
  423. end;
  424. // Component as published property
  425. TOwnedComponent = Class(TComponent)
  426. F : TComponent;
  427. Public
  428. Constructor Create(AOwner : TComponent); override;
  429. Published
  430. Property CompProp : TComponent Read F Write F;
  431. end;
  432. // Use this if owned components should also be streamed.
  433. TChildrenComponent = Class(TComponent)
  434. // Owned components are children
  435. procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  436. end;
  437. // Stream sub component.
  438. TStreamedOwnedComponent = Class(TChildrenComponent)
  439. Public
  440. Constructor Create(AOwner : TComponent); override;
  441. Published
  442. Sub : TIntegerComponent;
  443. end;
  444. // Stream 2 sub components
  445. TStreamedOwnedComponents = Class(TChildrenComponent)
  446. Public
  447. Constructor Create(AOwner : TComponent); override;
  448. Published
  449. SubA : TIntegerComponent;
  450. SubB : TStringComponent;
  451. end;
  452. // Method tests.
  453. THandler = Procedure of Object;
  454. // Method property that points to own method.
  455. TMethodComponent = Class(TComponent)
  456. Private
  457. F : THandler;
  458. Public
  459. Constructor Create(AOwner : TComponent); override;
  460. Published
  461. Procedure MyMethod;
  462. Property MethodProp : THandler Read F Write F;
  463. end;
  464. // Method property of owned component that points to own method.
  465. TMethodComponent2 = Class(TChildrenComponent)
  466. Public
  467. Constructor Create(AOwner : TComponent); override;
  468. Published
  469. Procedure MyMethod2;
  470. end;
  471. { TMyItem }
  472. TMyItem = Class(TCollectionItem)
  473. private
  474. FNR: Integer;
  475. FStr: String;
  476. Public
  477. Procedure Assign(Source : TPersistent); override;
  478. Published
  479. Property Nr : Integer Read FNR Write FNR;
  480. Property Str: String Read FStr Write FStr;
  481. end;
  482. { TMyColl }
  483. TMyColl = Class(TCollection)
  484. private
  485. function GetIt(index : Integer): TMyItem;
  486. procedure SetIt(index : Integer; const AValue: TMyItem);
  487. Public
  488. Property It[index : Integer] : TMyItem Read GetIt Write SetIt; default;
  489. end;
  490. { TCollComp }
  491. TCollComp = Class(TComponent)
  492. private
  493. FMyColl: TMyColl;
  494. procedure SetMyColl(const AValue: TMyColl);
  495. Public
  496. Constructor Create(AOwner : TComponent); override;
  497. Destructor Destroy; override;
  498. Function ToStream : TStream;
  499. Procedure FromStream(AStream : TStream);
  500. Published
  501. Property MyColl : TMyColl Read FMyColl Write SetMyColl;
  502. end;
  503. Implementation
  504. { TCharComponent2 }
  505. constructor TCharComponent.Create(AOwner: TComponent);
  506. begin
  507. inherited Create(AOwner);
  508. C:=#10;
  509. end;
  510. { TStringComponent3 }
  511. constructor TStringComponent3.Create(AOwner: TComponent);
  512. begin
  513. inherited Create(AOwner);
  514. F:='A ''quoted'' string';
  515. end;
  516. procedure TChildrenComponent.GetChildren(Proc: TGetChildProc; Root: TComponent);
  517. Var
  518. I : Integer;
  519. begin
  520. if (Root=Nil) and (Root<>Nil) then exit;// Silence warning
  521. For I:=0 to ComponentCount-1 do
  522. Proc(Components[i]);
  523. end;
  524. { TIntegerComponent }
  525. constructor TIntegerComponent.Create(AOwner: TComponent);
  526. begin
  527. inherited;
  528. FIntProp:=3;
  529. end;
  530. { TInt64Component }
  531. constructor TInt64Component.Create(AOwner: TComponent);
  532. begin
  533. inherited;
  534. FIntProp:=4;
  535. end;
  536. { TInt64Component2 }
  537. constructor TInt64Component2.Create(AOwner: TComponent);
  538. begin
  539. inherited;
  540. FIntProp:=2 shl 9;
  541. end;
  542. { TIntegerComponent2 }
  543. constructor TIntegerComponent2.Create(AOwner: TComponent);
  544. begin
  545. inherited;
  546. FintProp:=2 shl 9;
  547. end;
  548. { TIntegerComponent3 }
  549. constructor TIntegerComponent3.Create(AOwner: TComponent);
  550. begin
  551. inherited;
  552. FintProp:=2 shl 17;
  553. end;
  554. { TInt64Component3 }
  555. constructor TInt64Component3.Create(AOwner: TComponent);
  556. begin
  557. inherited;
  558. FintProp:=2 shl 17;
  559. end;
  560. { TInt64Component4 }
  561. constructor TInt64Component4.Create(AOwner: TComponent);
  562. begin
  563. inherited;
  564. FintProp:=NativeInt(MaxInt)+NativeInt(2 shl 14);
  565. end;
  566. { TStringComponent }
  567. constructor TStringComponent.Create(AOwner: TComponent);
  568. begin
  569. Inherited;
  570. F:='A string';
  571. end;
  572. { TWideStringComponent }
  573. constructor TWideStringComponent.Create(AOwner: TComponent);
  574. begin
  575. inherited;
  576. F:='Some WideString';
  577. end;
  578. { TSingleComponent }
  579. constructor TSingleComponent.Create(AOwner: TComponent);
  580. begin
  581. inherited;
  582. F:=1.23;
  583. end;
  584. { TDoubleComponent }
  585. constructor TDoubleComponent.Create(AOwner: TComponent);
  586. begin
  587. inherited;
  588. F:=2.34;
  589. end;
  590. { TExtendedComponent }
  591. constructor TExtendedComponent.Create(AOwner: TComponent);
  592. begin
  593. inherited;
  594. F:=3.45;
  595. end;
  596. { TCompComponent }
  597. (*
  598. constructor TCompComponent.Create(AOwner: TComponent);
  599. begin
  600. inherited;
  601. F:=4.56;
  602. end;
  603. *)
  604. { TCurrencyComponent }
  605. constructor TCurrencyComponent.Create(AOwner: TComponent);
  606. begin
  607. inherited;
  608. F:=5.67;
  609. end;
  610. { TDateTimeComponent }
  611. constructor TDateTimeComponent.Create(AOwner: TComponent);
  612. begin
  613. inherited;
  614. F:=EncodeDate(1996,8,1);
  615. end;
  616. { TDateTimeComponent2 }
  617. constructor TDateTimeComponent2.Create(AOwner: TComponent);
  618. begin
  619. inherited;
  620. F:=EncodeTime(23,20,0,0);
  621. end;
  622. { TDateTimeComponent3 }
  623. constructor TDateTimeComponent3.Create(AOwner: TComponent);
  624. begin
  625. inherited;
  626. F:=EncodeDate(1996,8,1)+EncodeTime(23,20,0,0);
  627. end;
  628. { TEnumComponent }
  629. constructor TEnumComponent.Create(AOwner: TComponent);
  630. begin
  631. inherited;
  632. F:=Four;
  633. end;
  634. { TSetComponent }
  635. constructor TSetComponent.Create(AOwner: TComponent);
  636. begin
  637. inherited;
  638. F:=[two,five];
  639. end;
  640. { TIntegerComponent4 }
  641. constructor TIntegerComponent4.Create(AOwner: TComponent);
  642. begin
  643. inherited;
  644. FIntProp:=6;
  645. end;
  646. { TIntegerComponent5 }
  647. constructor TIntegerComponent5.Create(AOwner: TComponent);
  648. begin
  649. inherited;
  650. FintProp:=5;
  651. end;
  652. { TInt64Component5 }
  653. constructor TInt64Component5.Create(AOwner: TComponent);
  654. begin
  655. inherited;
  656. FIntProp:=7;
  657. end;
  658. { TInt64Component6 }
  659. constructor TInt64Component6.Create(AOwner: TComponent);
  660. begin
  661. inherited;
  662. FintProp:=8;
  663. end;
  664. { TEnumComponent3 }
  665. constructor TEnumComponent3.Create(AOwner: TComponent);
  666. begin
  667. inherited;
  668. F:=Three;
  669. end;
  670. { TEnumComponent4 }
  671. constructor TEnumComponent4.Create(AOwner: TComponent);
  672. begin
  673. inherited;
  674. F:=Two;
  675. end;
  676. { TSetComponent4 }
  677. constructor TSetComponent4.Create(AOwner: TComponent);
  678. begin
  679. inherited;
  680. F:=[Three,Six];
  681. end;
  682. { TSetComponent3 }
  683. constructor TSetComponent3.Create(AOwner: TComponent);
  684. begin
  685. inherited;
  686. F:=[One,Four];
  687. end;
  688. { TMultipleComponent }
  689. constructor TMultipleComponent.Create(AOwner: TComponent);
  690. begin
  691. inherited;
  692. FInt:=1;
  693. FCurrency:=2.3;
  694. FString:='A String';
  695. FDice:=two;
  696. F:=[three,four];
  697. end;
  698. { TTestPersistent1 }
  699. procedure TTestPersistent1.Assign(ASource: TPersistent);
  700. Var
  701. T :TTestPersistent1;
  702. begin
  703. If ASource is TTestPersistent1 then
  704. begin
  705. T:=ASource as TTestPersistent1;
  706. FInt:=T.FInt;
  707. FAString:=T.FAString;
  708. end
  709. else
  710. inherited;
  711. end;
  712. { TPersistentComponent }
  713. constructor TPersistentComponent.Create(AOwner: TComponent);
  714. begin
  715. inherited;
  716. FPers:=TTestPersistent1.Create;
  717. FPers.AInteger:=3;
  718. FPers.AString:='A persistent string';
  719. end;
  720. Destructor TPersistentComponent.Destroy;
  721. begin
  722. FreeAndNil(FPers);
  723. Inherited;
  724. end;
  725. procedure TPersistentComponent.SetPers(const Value: TTestPersistent1);
  726. begin
  727. FPers.Assign(Value);
  728. end;
  729. { TCollectionComponent }
  730. Procedure TCollectionComponent.SetColl(AColl : TCollection);
  731. begin
  732. FColl.Assign(AColl);
  733. end;
  734. Constructor TCollectionComponent.Create(AOwner : TComponent);
  735. begin
  736. Inherited;
  737. FColl:=TCollection.Create(TTestItem);
  738. end;
  739. Destructor TCollectionComponent.Destroy;
  740. begin
  741. FreeAndNil(FColl);
  742. Inherited;
  743. end;
  744. { TCollectionComponent2 }
  745. Constructor TCollectionComponent2.Create(AOwner : TComponent);
  746. begin
  747. Inherited;
  748. (FColl.Add as TTestItem).StrProp:='First';
  749. (FColl.Add as TTestItem).StrProp:='Second';
  750. (FColl.Add as TTestItem).StrProp:='Third';
  751. end;
  752. { TCollectionComponen3 }
  753. Constructor TCollectionComponent3.Create(AOwner : TComponent);
  754. begin
  755. Inherited;
  756. (FColl.Add as TTestItem).StrProp:='First';
  757. (FColl.Add as TTestItem).StrProp:='';
  758. (FColl.Add as TTestItem).StrProp:='Third';
  759. end;
  760. { TCollectionComponent4 }
  761. constructor TCollectionComponent4.Create(AOwner: TComponent);
  762. begin
  763. inherited;
  764. FColl:=TTestCollection.Create;
  765. (FColl.Add as TTestItem).StrProp:='Something'
  766. end;
  767. destructor TCollectionComponent4.Destroy;
  768. begin
  769. FreeAndNil(FColl);
  770. inherited;
  771. end;
  772. procedure TCollectionComponent4.SetColl(AColl: TTestCollection);
  773. begin
  774. FColl.Assign(AColl);
  775. end;
  776. { TCollectionComponent5 }
  777. procedure TCollectionComponent5.SetColl(AColl: TCollection);
  778. begin
  779. FColl.Assign(AColl);
  780. end;
  781. constructor TCollectionComponent5.Create(AOwner: TComponent);
  782. var
  783. Item : TTest2Item;
  784. begin
  785. inherited Create(AOwner);
  786. FColl:=TCollection.Create(TTest2Item);
  787. Item := FColl.Add as TTest2Item;
  788. Item.StrProp1 := 'Something';
  789. Item.StrProp2 := 'Otherthing';
  790. Item := FColl.Add as TTest2Item;
  791. Item.StrProp1 := 'Something 2';
  792. Item.StrProp2 := 'Otherthing 2';
  793. end;
  794. destructor TCollectionComponent5.Destroy;
  795. begin
  796. FreeAndNil(FColl);
  797. inherited Destroy;
  798. end;
  799. { TTestCollection }
  800. Constructor TTestCollection.Create;
  801. begin
  802. Inherited Create(TTestitem);
  803. PropName:='MyCollProp';
  804. end;
  805. { TStreamedOwnedComponent }
  806. Constructor TStreamedOwnedComponent.Create(AOwner : TComponent);
  807. begin
  808. Inherited;
  809. Sub:=TIntegerComponent.Create(Self);
  810. Sub.Name:='Sub';
  811. end;
  812. { TStreamedOwnedComponents }
  813. constructor TStreamedOwnedComponents.Create(AOwner: TComponent);
  814. begin
  815. inherited;
  816. SubA:=TIntegerComponent.Create(Self);
  817. SubA.Name:='SubA';
  818. SubB:=TStringComponent.Create(Self);
  819. SubB.Name:='SubB';
  820. end;
  821. Constructor TOwnedComponent.Create(AOwner : TComponent);
  822. Var
  823. C: TComponent;
  824. begin
  825. Inherited;
  826. C:=TIntegerComponent.Create(Self);
  827. C.Name:='SubComponent';
  828. CompProp:=C;
  829. end;
  830. { TMethodComponent }
  831. Constructor TMethodComponent.Create(AOwner : TComponent);
  832. begin
  833. Inherited;
  834. MethodProp:=@MyMethod;
  835. end;
  836. Procedure TMethodComponent.MyMethod;
  837. begin
  838. // Do nothing.
  839. end;
  840. { TMethodComponent2 }
  841. constructor TMethodComponent2.Create(AOwner: TComponent);
  842. Var
  843. C : TMethodComponent;
  844. begin
  845. inherited;
  846. C:=TMethodComponent.Create(Self);
  847. C.Name:='AComponent';
  848. C.MethodProp:=@MyMethod2;
  849. end;
  850. Procedure TMethodComponent2.MyMethod2;
  851. begin
  852. // Do nothng
  853. end;
  854. { TMyColl }
  855. function TMyColl.GetIt(index : Integer): TMyItem;
  856. begin
  857. Result:=Items[Index] as TMyItem;
  858. end;
  859. procedure TMyColl.SetIt(index : Integer; const AValue: TMyItem);
  860. begin
  861. Items[Index]:=AValue;
  862. end;
  863. { TCollComp }
  864. procedure TCollComp.SetMyColl(const AValue: TMyColl);
  865. begin
  866. if (FMyColl=AValue) then
  867. exit;
  868. FMyColl.Assign(AValue);
  869. end;
  870. constructor TCollComp.Create(AOwner: TComponent);
  871. begin
  872. inherited Create(AOwner);
  873. FMyColl:=TMyCOll.Create(TMyItem);
  874. end;
  875. destructor TCollComp.Destroy;
  876. begin
  877. FreeAndNil(FMyColl);
  878. inherited Destroy;
  879. end;
  880. function TCollComp.ToStream: TStream;
  881. begin
  882. Result:=TMemoryStream.Create;
  883. Result.WriteComponent(Self);
  884. Result.Position:=0;
  885. end;
  886. procedure TCollComp.FromStream(AStream: TStream);
  887. begin
  888. AStream.ReadComponent(Self);
  889. Astream.Free;
  890. end;
  891. procedure TMyItem.Assign(Source: TPersistent);
  892. Var
  893. I : TMyItem;
  894. begin
  895. If (Source is TMyItem) then
  896. begin
  897. I:=Source as TMyItem;
  898. FNR:=I.NR;
  899. FStr:=I.Str;
  900. end
  901. else
  902. inherited Assign(Source);
  903. end;
  904. end.