123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- {
- This file is part of the Free Component Library (FCL)
- Copyright (c) 1999-2000 by the Free Pascal development team
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- { Class registration routines }
- procedure RegisterClass(AClass: TPersistentClass);
- var
- aClassname : String;
- begin
- //Classlist is created during initialization.
- with Classlist.Locklist do
- try
- while Indexof(AClass) = -1 do
- begin
- aClassname := AClass.ClassName;
- if GetClass(aClassName) <> nil then //class alread registered!
- Begin
- //raise an error
- exit;
- end;
- Add(AClass);
- if AClass = TPersistent then break;
- AClass := TPersistentClass(AClass.ClassParent);
- end;
- finally
- ClassList.UnlockList;
- end;
- end;
- procedure RegisterClassAlias(AClass: TPersistentClass; const Alias: string);
- var
- I : integer;
- begin
- I:=-1;
- ClassList.LockList;
- try
- if ClassAliasList=nil then
- ClassAliasList := TStringList.Create
- else
- i := ClassAliasList.IndexOf(Alias);
- if I = -1 then
- ClassAliasList.AddObject( Alias, TObject(AClass) );
- finally
- ClassList.UnlockList;
- end;
- end;
- procedure RegisterClasses(AClasses: array of TPersistentClass);
- var
- I : Integer;
- begin
- for I := low(aClasses) to high(aClasses) do
- RegisterClass(aClasses[I]);
- end;
- procedure UnRegisterClass(AClass: TPersistentClass);
- begin
- end;
- procedure UnRegisterClasses(AClasses: array of TPersistentClass);
- begin
- end;
- procedure UnRegisterModuleClasses(Module: HMODULE);
- begin
- end;
- function FindClass(const AClassName: string): TPersistentClass;
- begin
- Result := GetClass(AClassName);
- if not Assigned(Result) then
- raise EClassNotFound.CreateFmt(SClassNotFound, [AClassName]);
- end;
- function GetClass(const AClassName: string): TPersistentClass;
- var
- I : Integer;
- begin
- with ClassList.LockList do
- try
- for I := 0 to Count-1 do
- begin
- Result := TPersistentClass(Items[I]);
- if Result.ClassNameIs(AClassName) then Exit;
- end;
- if Assigned(ClassAliasList) then
- begin
- I := ClassAliasList.Indexof(AClassName);
- if I >= 0 then //found
- Begin
- Result := TPersistentClass(ClassAliasList.Objects[i]);
- exit;
- end;
- end;
- Result := nil;
- finally
- ClassList.Unlocklist;
- end;
- end;
- procedure StartClassGroup(AClass: TPersistentClass);
- begin
- end;
- procedure GroupDescendentsWith(AClass, AClassGroup: TPersistentClass);
- begin
- end;
- function ActivateClassGroup(AClass: TPersistentClass): TPersistentClass;
- begin
- Result:=nil;
- end;
- function ClassGroupOf(AClass: TPersistentClass): TPersistentClass;
- begin
- Result:=nil;
- end;
- function ClassGroupOf(Instance: TPersistent): TPersistentClass;
- begin
- Result:=nil;
- end;
- { Component registration routines }
- type
- TComponentPage = class(TCollectionItem)
- public
- Name: String;
- Classes: TList;
- destructor Destroy; override;
- end;
- { TComponentPage }
- destructor TComponentPage.Destroy;
- begin
- Classes.Free;
- inherited Destroy;
- end;
- var
- ComponentPages: TCollection;
- procedure InitComponentPages;
- begin
- ComponentPages := TCollection.Create(TComponentPage);
- { Add a empty page which will be used for storing the NoIcon components }
- ComponentPages.Add;
- end;
- procedure RegisterComponents(const Page: string;
- ComponentClasses: array of TComponentClass);
- var
- i: Integer;
- pg: TComponentPage;
- begin
- if Page = '' then exit; { prevent caller from doing nonsense }
- pg := nil;
- if not Assigned(ComponentPages) then
- InitComponentPages
- else
- for i := 0 to ComponentPages.Count - 1 do
- if TComponentPage(ComponentPages.Items[i]).Name = Page then begin
- pg := TComponentPage(ComponentPages.Items[i]);
- break;
- end;
- if pg = nil then begin
- pg := TComponentPage(ComponentPages.Add);
- pg.Name := Page;
- end;
- if pg.Classes = nil then
- pg.Classes := TList.Create;
- for i := Low(ComponentClasses) to High(ComponentClasses) do
- pg.Classes.Add(ComponentClasses[i]);
- if Assigned(RegisterComponentsProc) then
- RegisterComponentsProc(Page, ComponentClasses);
- end;
- procedure RegisterNoIcon(ComponentClasses: array of TComponentClass);
- var
- pg: TComponentPage;
- i: Integer;
- begin
- if not Assigned(ComponentPages) then
- InitComponentPages;
- pg := TComponentPage(ComponentPages.Items[0]);
- if pg.Classes = nil then
- pg.Classes := TList.Create;
- for i := Low(ComponentClasses) to High(ComponentClasses) do
- pg.Classes.Add(ComponentClasses[i]);
- if Assigned(RegisterNoIconProc) then
- RegisterNoIconProc(ComponentClasses);
- end;
- procedure RegisterNonActiveX(ComponentClasses: array of TComponentClass;
- AxRegType: TActiveXRegType);
- begin
- end;
|