cregist.inc 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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 ClassName: string): TPersistentClass;
  55. begin
  56. FindClass:=nil;
  57. end;
  58. function GetClass(const ClassName: string): TPersistentClass;
  59. var
  60. I : Integer;
  61. begin
  62. with ClassList.LockList do
  63. try
  64. for I := 0 to Count-1 do
  65. begin
  66. Result := TPersistentClass(Items[I]);
  67. if Result.ClassNameIs(ClassName) then Exit;
  68. end;
  69. I := ClassAliasList.Indexof(ClassName);
  70. if I >= 0 then //found
  71. Begin
  72. Result := TPersistentClass(ClassAliasList.Objects[i]);
  73. exit;
  74. end;
  75. Result := nil;
  76. finally
  77. ClassList.Unlocklist;
  78. end;
  79. end;
  80. { Component registration routines }
  81. type
  82. TComponentPage = class(TCollectionItem)
  83. public
  84. Name: String;
  85. Classes: TList;
  86. end;
  87. var
  88. ComponentPages: TCollection;
  89. procedure InitComponentPages;
  90. begin
  91. ComponentPages := TCollection.Create(TComponentPage);
  92. { Add a empty page which will be used for storing the NoIcon components }
  93. ComponentPages.Add;
  94. end;
  95. procedure RegisterComponents(const Page: string;
  96. ComponentClasses: array of TComponentClass);
  97. var
  98. i: Integer;
  99. pg: TComponentPage;
  100. begin
  101. if Page = '' then exit; { prevent caller from doing nonsense }
  102. pg := nil;
  103. if not Assigned(ComponentPages) then
  104. InitComponentPages
  105. else
  106. for i := 0 to ComponentPages.Count - 1 do
  107. if TComponentPage(ComponentPages.Items[i]).Name = Page then begin
  108. pg := TComponentPage(ComponentPages.Items[i]);
  109. break;
  110. end;
  111. if pg = nil then begin
  112. pg := TComponentPage(ComponentPages.Add);
  113. pg.Name := Page;
  114. end;
  115. if pg.Classes = nil then
  116. pg.Classes := TList.Create;
  117. for i := Low(ComponentClasses) to High(ComponentClasses) do
  118. pg.Classes.Add(ComponentClasses[i]);
  119. if Assigned(RegisterComponentsProc) then
  120. RegisterComponentsProc(Page, ComponentClasses);
  121. end;
  122. procedure RegisterNoIcon(ComponentClasses: array of TComponentClass);
  123. var
  124. pg: TComponentPage;
  125. i: Integer;
  126. begin
  127. if not Assigned(ComponentPages) then
  128. InitComponentPages;
  129. pg := TComponentPage(ComponentPages.Items[0]);
  130. if pg.Classes = nil then
  131. pg.Classes := TList.Create;
  132. for i := Low(ComponentClasses) to High(ComponentClasses) do
  133. pg.Classes.Add(ComponentClasses[i]);
  134. if Assigned(RegisterNoIconProc) then
  135. RegisterNoIconProc(ComponentClasses);
  136. end;
  137. procedure RegisterNonActiveX(ComponentClasses: array of TComponentClass;
  138. AxRegType: TActiveXRegType);
  139. begin
  140. end;
  141. {
  142. $Log$
  143. Revision 1.2 2000-07-13 11:32:59 michael
  144. + removed logs
  145. }