Lua_Controls.pas 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. //******************************************************************************
  2. //*** LUA SCRIPT FUNCTIONS ***
  3. //*** ***
  4. //*** (c) Massimo Magnano 2006 ***
  5. //*** ***
  6. //*** ***
  7. //******************************************************************************
  8. // File : Lua_Controls.pas (rev. 1.0)
  9. //
  10. // Description : Access from Lua scripts to Class declared in "Controls.pas"
  11. //
  12. //******************************************************************************
  13. // TO-DO : Record like TRect, TPoint property how can i return in variant(lua)
  14. unit Lua_Controls;
  15. interface
  16. uses TypInfo, Variants, Lua_Object, Lua_Classes;
  17. type
  18. TLuaControl = class(TLuaComponent)
  19. protected
  20. class function GetPublicPropertyAccessClass :TClass; override;
  21. end;
  22. TLuaWinControl = class(TLuaControl)
  23. protected
  24. class function GetPublicPropertyAccessClass :TClass; override;
  25. public
  26. function GetArrayPropType(Name :String; index :Variant) :PTypeInfo; override;
  27. function GetArrayProp(Name :String; index :Variant) :Variant; override;
  28. function GetElementType(Name :String) :PTypeInfo; override;
  29. end;
  30. implementation
  31. uses Classes, Controls, SysUtils;
  32. type
  33. TControlAccess = class(TControl)
  34. published
  35. property Enabled;
  36. property Action;
  37. property Align;
  38. property Anchors;
  39. property BiDiMode;
  40. property BoundsRect;
  41. property ClientHeight;
  42. property ClientOrigin;
  43. property ClientRect;
  44. property ClientWidth;
  45. property Constraints;
  46. property ControlState;
  47. property ControlStyle;
  48. property DockOrientation;
  49. property Floating;
  50. property FloatingDockSiteClass;
  51. property HostDockSite;
  52. property LRDockWidth;
  53. property Parent;
  54. property ShowHint;
  55. property TBDockHeight;
  56. property UndockHeight;
  57. property UndockWidth;
  58. property Visible;
  59. //property WindowProc; pericolosa.
  60. end;
  61. TWinControlAccess = class(TWinControl)
  62. published
  63. // See Comment on TLuaObject.GetPublicPropInfo, it explain why i have no need
  64. // to redeclare also the public property of TControl
  65. property DockClientCount;
  66. property DockSite;
  67. property DockManager;
  68. property DoubleBuffered;
  69. property AlignDisabled;
  70. property VisibleDockClientCount;
  71. property Brush;
  72. property ControlCount;
  73. property Handle;
  74. property ParentWindow;
  75. property Showing;
  76. property TabOrder;
  77. property TabStop;
  78. property UseDockManager;
  79. end;
  80. class function TLuaControl.GetPublicPropertyAccessClass :TClass;
  81. begin
  82. Result :=TControlAccess;
  83. end;
  84. //==============================================================================
  85. //
  86. class function TLuaWinControl.GetPublicPropertyAccessClass :TClass;
  87. begin
  88. Result :=TWinControlAccess;
  89. end;
  90. function TLuaWinControl.GetArrayPropType(Name :String; index :Variant) :PTypeInfo;
  91. begin
  92. Name :=Uppercase(Name);
  93. Result :=nil;
  94. if (Name='CONTROLS')
  95. then begin
  96. if (TWinControl(InstanceObj).Controls[index]<>nil)
  97. then Result :=TypeInfo(TControl);
  98. end
  99. else
  100. if (Name='DOCKCLIENTS')
  101. then begin
  102. if (TWinControl(InstanceObj).DockClients[index]<>nil)
  103. then Result :=TypeInfo(TControl);
  104. end
  105. else
  106. Result :=inherited GetArrayPropType(Name, index);
  107. end;
  108. function TLuaWinControl.GetArrayProp(Name :String; index :Variant) :Variant;
  109. begin
  110. Name :=Uppercase(Name);
  111. if (Name='CONTROLS')
  112. then begin
  113. if (TWinControl(InstanceObj).Controls[index]<>nil)
  114. then Result :=Integer(TWinControl(InstanceObj).Controls[index])
  115. else Result :=NULL;
  116. end
  117. else
  118. if (Name='DOCKCLIENTS')
  119. then begin
  120. if (TWinControl(InstanceObj).DockClients[index]<>nil)
  121. then Result :=Integer(TWinControl(InstanceObj).DockClients[index])
  122. else Result :=NULL;
  123. end
  124. else
  125. Result := inherited GetArrayProp(name, index)
  126. end;
  127. function TLuaWinControl.GetElementType(Name :String) :PTypeInfo;
  128. Var
  129. upName :String;
  130. begin
  131. upName :=Uppercase(Name);
  132. if (upName='CONTROLS') or (upName='DOCKCLIENTS')
  133. then Result :=@TypeInfoArray
  134. else Result :=inherited GetElementType(Name);
  135. end;
  136. initialization
  137. Lua_Object.RegisterClass(TControl, TLuaControl);
  138. Lua_Object.RegisterClass(TWinControl, TLuaWinControl);
  139. end.