cregist.inc 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. {
  2. $Id$
  3. This file is part of the Free Component Library (FCL)
  4. Copyright (c) 1999-2000 by the Free Pascal development team
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. { Class registration routines }
  12. procedure RegisterClass(AClass: TPersistentClass);
  13. var
  14. aClassname : String;
  15. begin
  16. //Classlist is created during initialization.
  17. with Classlist.Locklist do
  18. try
  19. while Indexof(AClass) = -1 do
  20. begin
  21. aClassname := AClass.ClassName;
  22. if GetClass(aClassName) <> nil then //class alread registered!
  23. Begin
  24. //raise an error
  25. exit;
  26. end;
  27. Add(AClass);
  28. if AClass = TPersistent then break;
  29. AClass := TPersistentClass(AClass.ClassParent);
  30. end;
  31. finally
  32. ClassList.UnlockList;
  33. end;
  34. end;
  35. procedure RegisterClasses(AClasses: array of TPersistentClass);
  36. var
  37. I : Integer;
  38. begin
  39. for I := low(aClasses) to high(aClasses) do
  40. RegisterClass(aClasses[I]);
  41. end;
  42. procedure RegisterClassAlias(AClass: TPersistentClass; const Alias: string);
  43. begin
  44. end;
  45. procedure UnRegisterClass(AClass: TPersistentClass);
  46. begin
  47. end;
  48. procedure UnRegisterClasses(AClasses: array of TPersistentClass);
  49. begin
  50. end;
  51. procedure UnRegisterModuleClasses(Module: HMODULE);
  52. begin
  53. end;
  54. function FindClass(const AClassName: string): TPersistentClass;
  55. begin
  56. Result := GetClass(AClassName);
  57. if not Assigned(Result) then
  58. raise EClassNotFound.CreateFmt(SClassNotFound, [AClassName]);
  59. end;
  60. function GetClass(const AClassName: string): TPersistentClass;
  61. var
  62. I : Integer;
  63. begin
  64. with ClassList.LockList do
  65. try
  66. for I := 0 to Count-1 do
  67. begin
  68. Result := TPersistentClass(Items[I]);
  69. if Result.ClassNameIs(AClassName) then Exit;
  70. end;
  71. I := ClassAliasList.Indexof(AClassName);
  72. if I >= 0 then //found
  73. Begin
  74. Result := TPersistentClass(ClassAliasList.Objects[i]);
  75. exit;
  76. end;
  77. Result := nil;
  78. finally
  79. ClassList.Unlocklist;
  80. end;
  81. end;
  82. procedure StartClassGroup(AClass: TPersistentClass);
  83. begin
  84. end;
  85. procedure GroupDescendentsWith(AClass, AClassGroup: TPersistentClass);
  86. begin
  87. end;
  88. function ActivateClassGroup(AClass: TPersistentClass): TPersistentClass;
  89. begin
  90. end;
  91. function ClassGroupOf(AClass: TPersistentClass): TPersistentClass;
  92. begin
  93. end;
  94. function ClassGroupOf(Instance: TPersistent): TPersistentClass;
  95. begin
  96. end;
  97. { Component registration routines }
  98. type
  99. TComponentPage = class(TCollectionItem)
  100. public
  101. Name: String;
  102. Classes: TList;
  103. destructor Destroy; override;
  104. end;
  105. { TComponentPage }
  106. destructor TComponentPage.Destroy;
  107. begin
  108. Classes.Free;
  109. inherited Destroy;
  110. end;
  111. var
  112. ComponentPages: TCollection;
  113. procedure InitComponentPages;
  114. begin
  115. ComponentPages := TCollection.Create(TComponentPage);
  116. { Add a empty page which will be used for storing the NoIcon components }
  117. ComponentPages.Add;
  118. end;
  119. procedure RegisterComponents(const Page: string;
  120. ComponentClasses: array of TComponentClass);
  121. var
  122. i: Integer;
  123. pg: TComponentPage;
  124. begin
  125. if Page = '' then exit; { prevent caller from doing nonsense }
  126. pg := nil;
  127. if not Assigned(ComponentPages) then
  128. InitComponentPages
  129. else
  130. for i := 0 to ComponentPages.Count - 1 do
  131. if TComponentPage(ComponentPages.Items[i]).Name = Page then begin
  132. pg := TComponentPage(ComponentPages.Items[i]);
  133. break;
  134. end;
  135. if pg = nil then begin
  136. pg := TComponentPage(ComponentPages.Add);
  137. pg.Name := Page;
  138. end;
  139. if pg.Classes = nil then
  140. pg.Classes := TList.Create;
  141. for i := Low(ComponentClasses) to High(ComponentClasses) do
  142. pg.Classes.Add(ComponentClasses[i]);
  143. if Assigned(RegisterComponentsProc) then
  144. RegisterComponentsProc(Page, ComponentClasses);
  145. end;
  146. procedure RegisterNoIcon(ComponentClasses: array of TComponentClass);
  147. var
  148. pg: TComponentPage;
  149. i: Integer;
  150. begin
  151. if not Assigned(ComponentPages) then
  152. InitComponentPages;
  153. pg := TComponentPage(ComponentPages.Items[0]);
  154. if pg.Classes = nil then
  155. pg.Classes := TList.Create;
  156. for i := Low(ComponentClasses) to High(ComponentClasses) do
  157. pg.Classes.Add(ComponentClasses[i]);
  158. if Assigned(RegisterNoIconProc) then
  159. RegisterNoIconProc(ComponentClasses);
  160. end;
  161. procedure RegisterNonActiveX(ComponentClasses: array of TComponentClass;
  162. AxRegType: TActiveXRegType);
  163. begin
  164. end;
  165. {
  166. $Log$
  167. Revision 1.2 2005-02-02 19:39:59 florian
  168. * empty class grouping functions
  169. Revision 1.1 2003/10/06 21:01:06 peter
  170. * moved classes unit to rtl
  171. Revision 1.5 2003/04/19 14:29:25 michael
  172. + Fix from Mattias Gaertner, closes memory leak
  173. Revision 1.4 2002/09/07 15:15:24 peter
  174. * old logs removed and tabs fixed
  175. }