testcomps.pp 20 KB

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