2
0

cregist.inc 5.1 KB

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