cregist.inc 4.6 KB

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