cregist.inc 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  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 := ClassAliasList.IndexOf(Alias);
  39. if I = -1 then
  40. ClassAliasList.AddObject( Alias, TObject(AClass) );
  41. end;
  42. procedure RegisterClasses(AClasses: array of TPersistentClass);
  43. var
  44. I : Integer;
  45. begin
  46. for I := low(aClasses) to high(aClasses) do
  47. RegisterClass(aClasses[I]);
  48. end;
  49. procedure UnRegisterClass(AClass: TPersistentClass);
  50. begin
  51. end;
  52. procedure UnRegisterClasses(AClasses: array of TPersistentClass);
  53. begin
  54. end;
  55. procedure UnRegisterModuleClasses(Module: HMODULE);
  56. begin
  57. end;
  58. function FindClass(const AClassName: string): TPersistentClass;
  59. begin
  60. Result := GetClass(AClassName);
  61. if not Assigned(Result) then
  62. raise EClassNotFound.CreateFmt(SClassNotFound, [AClassName]);
  63. end;
  64. function GetClass(const AClassName: string): TPersistentClass;
  65. var
  66. I : Integer;
  67. begin
  68. with ClassList.LockList do
  69. try
  70. for I := 0 to Count-1 do
  71. begin
  72. Result := TPersistentClass(Items[I]);
  73. if Result.ClassNameIs(AClassName) then Exit;
  74. end;
  75. I := ClassAliasList.Indexof(AClassName);
  76. if I >= 0 then //found
  77. Begin
  78. Result := TPersistentClass(ClassAliasList.Objects[i]);
  79. exit;
  80. end;
  81. Result := nil;
  82. finally
  83. ClassList.Unlocklist;
  84. end;
  85. end;
  86. procedure StartClassGroup(AClass: TPersistentClass);
  87. begin
  88. end;
  89. procedure GroupDescendentsWith(AClass, AClassGroup: TPersistentClass);
  90. begin
  91. end;
  92. function ActivateClassGroup(AClass: TPersistentClass): TPersistentClass;
  93. begin
  94. end;
  95. function ClassGroupOf(AClass: TPersistentClass): TPersistentClass;
  96. begin
  97. end;
  98. function ClassGroupOf(Instance: TPersistent): TPersistentClass;
  99. begin
  100. end;
  101. { Component registration routines }
  102. type
  103. TComponentPage = class(TCollectionItem)
  104. public
  105. Name: String;
  106. Classes: TList;
  107. destructor Destroy; override;
  108. end;
  109. { TComponentPage }
  110. destructor TComponentPage.Destroy;
  111. begin
  112. Classes.Free;
  113. inherited Destroy;
  114. end;
  115. var
  116. ComponentPages: TCollection;
  117. procedure InitComponentPages;
  118. begin
  119. ComponentPages := TCollection.Create(TComponentPage);
  120. { Add a empty page which will be used for storing the NoIcon components }
  121. ComponentPages.Add;
  122. end;
  123. procedure RegisterComponents(const Page: string;
  124. ComponentClasses: array of TComponentClass);
  125. var
  126. i: Integer;
  127. pg: TComponentPage;
  128. begin
  129. if Page = '' then exit; { prevent caller from doing nonsense }
  130. pg := nil;
  131. if not Assigned(ComponentPages) then
  132. InitComponentPages
  133. else
  134. for i := 0 to ComponentPages.Count - 1 do
  135. if TComponentPage(ComponentPages.Items[i]).Name = Page then begin
  136. pg := TComponentPage(ComponentPages.Items[i]);
  137. break;
  138. end;
  139. if pg = nil then begin
  140. pg := TComponentPage(ComponentPages.Add);
  141. pg.Name := Page;
  142. end;
  143. if pg.Classes = nil then
  144. pg.Classes := TList.Create;
  145. for i := Low(ComponentClasses) to High(ComponentClasses) do
  146. pg.Classes.Add(ComponentClasses[i]);
  147. if Assigned(RegisterComponentsProc) then
  148. RegisterComponentsProc(Page, ComponentClasses);
  149. end;
  150. procedure RegisterNoIcon(ComponentClasses: array of TComponentClass);
  151. var
  152. pg: TComponentPage;
  153. i: Integer;
  154. begin
  155. if not Assigned(ComponentPages) then
  156. InitComponentPages;
  157. pg := TComponentPage(ComponentPages.Items[0]);
  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(RegisterNoIconProc) then
  163. RegisterNoIconProc(ComponentClasses);
  164. end;
  165. procedure RegisterNonActiveX(ComponentClasses: array of TComponentClass;
  166. AxRegType: TActiveXRegType);
  167. begin
  168. end;