FormFactory.pas 990 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. unit formfactory;
  2. interface
  3. uses classes;
  4. Type
  5. TFormClass = Class of TComponent;
  6. procedure RegisterForm(aClass: TFormClass);
  7. Function GetFormClassByName(const aName : String) : TFormClass;
  8. implementation
  9. uses sysutils, js;
  10. Type
  11. TFormDef = Record
  12. aClass : TFormClass;
  13. aName : string;
  14. end;
  15. TFormDefArray = Array of TFormDef;
  16. Var
  17. List : TFormDefArray;
  18. procedure RegisterForm(aClass: TFormClass);
  19. Var
  20. Def : TFormDef;
  21. begin
  22. Def.aClass:=aClass;
  23. Def.aName:=aClass.ClassName;
  24. TJSArray(List).Push(JSValue(Def));
  25. end;
  26. Function IndexOfFormClassByName(const aName : String) : Integer;
  27. begin
  28. Result:=Length(List)-1;
  29. While (Result>=0) and Not SameText(aName,List[Result].aName) do
  30. Dec(Result);
  31. end;
  32. Function GetFormClassByName(const aName : String) : TFormClass;
  33. Var
  34. Idx: Integer;
  35. begin
  36. Idx:=IndexOfFormClassByName(aName);
  37. if Idx=-1 then
  38. Result:=Nil
  39. else
  40. Result:=List[Idx].aClass;
  41. end;
  42. initialization
  43. SetLength(List,0);
  44. end.