BBCMicrobit.pas обновление

This commit is contained in:
Mikhalkovich Stanislav 2019-08-22 22:36:08 +03:00
parent 357d756543
commit 59aeba2096
46 changed files with 335 additions and 35 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "5";
public const string Build = "0";
public const string Revision = "2234";
public const string Revision = "2237";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%COREVERSION%=0
%REVISION%=2234
%MINOR%=5
%REVISION%=2237
%COREVERSION%=0
%MAJOR%=3

View file

@ -40,6 +40,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -23,6 +23,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -43,6 +43,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -23,6 +23,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -34,6 +34,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -48,6 +48,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -33,6 +33,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -40,6 +40,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -15,6 +15,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -33,6 +33,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -40,6 +40,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -1,5 +1,6 @@
<HTML><HEAD><object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="Keyword" value="AddChild">
<param name="Keyword" value="AddChilds">
<param name="Keyword" value="Count">
<param name="Keyword" value="Destroy">
<param name="Keyword" value="Items">
@ -15,6 +16,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -29,6 +29,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -33,6 +33,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -40,6 +40,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -29,6 +29,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -40,6 +40,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -27,6 +27,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -52,6 +52,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -39,6 +39,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -43,6 +43,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -26,6 +26,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -34,6 +34,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -34,6 +34,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -33,6 +33,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -32,6 +32,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -37,6 +37,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -40,6 +40,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -43,6 +43,8 @@
<tr><tr><td><code><b>procedure</b> AddChild(obj: Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> AddChilds(<b>params</b> arr: <b>array</b> <b>of</b> Object3D);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äîáàâèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> Destroy; override;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëèòü äî÷åðíèé ïîäîáúåêò</td></tr>
<tr><td><code><b>procedure</b> RemoveChild(obj: Object3D);</code>

View file

@ -1,5 +1,6 @@
<HTML><HEAD><object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="Keyword" value="OnDrawTime">
<param name="Keyword" value="OnDrawFrame">
<param name="Keyword" value="OnInit">
<param name="Keyword" value="OnKeyDown">
<param name="Keyword" value="OnKeyPress">
<param name="Keyword" value="OnKeyUp">
@ -8,8 +9,10 @@
<param name="Keyword" value="OnMouseUp"></object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><link rel="StyleSheet" href="../../../default.css">
</HEAD><body><H1>Ñîáûòèÿ ìîäóëÿ Graph3D</H1>
<table border=0 cellpadding=5><tr><td><code>OnDrawTime: <b>procedure</b>(dt: real);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ñîáûòèå ïåðåðèñîâêè ãðàôè÷åñêîãî 3D-îêíà</td></tr>
<table border=0 cellpadding=5><tr><td><code>OnDrawFrame: <b>procedure</b>(dt: real);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Событие перерисовки графического 3D-окна.Инициализируется процедурой с вещественным параметром dt - временем, прошедшим с момента последнего обновления экрана</td></tr>
<tr><td><code>OnInit: <b>procedure</b>;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Событие инициализации объектов графического окна. Используется чтобы объекты не прорисовывались до конца инициализации</td></tr>
<tr><td><code>OnKeyDown: <b>procedure</b>(k: Key);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ñîáûòèå íàæàòèÿ êëàâèøè</td></tr>
<tr><td><code>OnKeyPress: <b>procedure</b>(ch: char);</code>

View file

@ -3,7 +3,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><link rel="StyleSheet" href="../../../default.css">
</HEAD><body><H1>Короткие функции модуля Graph3D</H1>
<table border=0 cellpadding=5><tr><td><code>/// Возвращает цвет по красной, зеленой и синей составляющей (в диапазоне 0..255);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cedure Invoke(p: ()-&gt;());</td></tr>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cedure Redraw(p: ()-&gt;());</td></tr>
<tr><td><code>/// Возвращает цвет по красной, зеленой и синей составляющей и параметру прозрачности (в диапазоне 0..255);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ction RGB(r, g, b: byte): Color;</td></tr>
<tr><td><code>/// Возвращает серый цвет с интенсивностью b;</code>

View file

@ -1,4 +1,5 @@
<HTML><HEAD><object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="Keyword" value="OnDrawFrame">
<param name="Keyword" value="OnKeyDown">
<param name="Keyword" value="OnKeyPress">
<param name="Keyword" value="OnKeyUp">
@ -22,5 +23,7 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ñîáûòèå íàæàòèÿ ñèìâîëüíîé êëàâèøè</td></tr>
<tr><td><code>OnResize: <b>procedure</b>;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ñîáûòèå èçìåíåíèÿ ðàçìåðà ãðàôè÷åñêîãî îêíà</td></tr>
<tr><td><code>OnDrawFrame: <b>procedure</b>(dt: real);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ñîáûòèå ïåðåðèñîâêè ãðàôè÷åñêîãî îêíà</td></tr>
</table>
</body></HTML>

View file

@ -1 +1 @@
3.5.0.2234
3.5.0.2237

View file

@ -106,11 +106,12 @@ SectionEnd
LangString DESC_INTERNAL_ERROR_REPORT_Desc ${LANG_RUSSIAN} "Позволяет отправить разработчикам отчет о ошибках в работе компилятора"
LangString DESC_INTERNAL_ERROR_REPORT_Desc ${LANG_ENGLISH} " "
LangString DESC_PT4_Desc ${LANG_RUSSIAN} "Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2017"
LangString DESC_PT4_Desc ${LANG_ENGLISH} "Programming Taskbook Copyright (c) M.E. Abramyan, 1998-2017"
LangString DESC_PT4_Desc ${LANG_ENGLISH} "Programming Taskbook Copyright (c) M.E. Abramyan, 1998-2019"
LangString DESC_Samples_Desc ${LANG_RUSSIAN} "Файлы примеров"
LangString DESC_Samples_Desc ${LANG_ENGLISH} "Samples"
LangString DESC_RusLoc_Desc ${LANG_RUSSIAN} "Поддержка русого языка"
LangString DESC_RusLoc_Desc ${LANG_ENGLISH} " "
LangString DESC_RusLoc_Desc ${LANG_UKR} "Поддержка украинского языка"
LangString DESC_EngLoc_Desc ${LANG_RUSSIAN} "Поддержка английского языка"
LangString DESC_EngLoc_Desc ${LANG_ENGLISH} " "
LangString DESC_Framework_Desc ${LANG_RUSSIAN} "Платформа необходима для работы компилятора и программ, работающих на этой платформе"

View file

@ -1 +1 @@
!define VERSION '3.5.0.2234'
!define VERSION '3.5.0.2237'

View file

@ -14,7 +14,8 @@
Collections, Arrays, Core, FormsABC, MPI, ClientServer, Speech, Sounds, Countries,
ABCDatabases,BlockFileOfT,Controls,
OpenCL, OpenCLABC,
OpenGL, OpenGLABC
OpenGL, OpenGLABC,
BBCMicroBit
;
begin

View file

@ -101,6 +101,7 @@
File ..\bin\Lib\Countries.pcu
File ..\bin\Lib\Graph3D.pcu
File ..\bin\Lib\GraphABCHelper.pcu
File ..\bin\Lib\BBCMicroBit.pcu
File ..\bin\Lib\IniFile.pcu
File ..\bin\Lib\PABCSystem.pcu
File ..\bin\Lib\PABCExtensions.pcu
@ -166,6 +167,7 @@
${AddFile} "Countries.pcu"
${AddFile} "Graph3D.pcu"
${AddFile} "GraphABCHelper.pcu"
${AddFile} "BBCMicroBit.pcu"
${AddFile} "IniFile.pcu"
${AddFile} "PABCSystem.pcu"
${AddFile} "PABCExtensions.pcu"
@ -241,6 +243,7 @@
File ..\bin\Lib\Countries.pas
File ..\bin\Lib\Graph3D.pas
File ..\bin\Lib\GraphABCHelper.pas
File ..\bin\Lib\BBCMicroBit.pas
File ..\bin\Lib\IniFile.pas
File ..\bin\Lib\PABCSystem.pas
File ..\bin\Lib\PABCExtensions.pas
@ -302,6 +305,7 @@
${AddFile} "Countries.pas"
${AddFile} "Graph3D.pas"
${AddFile} "GraphABCHelper.pas"
${AddFile} "BBCMicroBit.pas"
${AddFile} "IniFile.pas"
${AddFile} "PABCSystem.pas"
${AddFile} "PABCExtensions.pas"

View file

@ -1,5 +1,5 @@
 Section "Українська" UkrLoc
SectionIn 1 2 RO
SectionIn 1
SetOutPath "$INSTDIR\Lng\Ukr"
File "..\bin\Lng\Ukr\.LanguageName"
File "..\bin\Lng\Ukr\*.dat"

190
bin/Lib/BBCMicrobit.pas Normal file
View file

@ -0,0 +1,190 @@
// BBC Micro:bit communication module
unit BBCMicrobit;
interface
/// Исключение для информирования об отсутствии подключенного устройства
type
NoUBSComPortsException = class(Exception) end;
NoBBCBoardFoundException = class(Exception) end;
/// Класс для взаимодействия с устройством BBC Micro:bit
type
Microbit = class(System.IDisposable)
protected
/// Порт для связи с устройством
Port: System.IO.Ports.SerialPort;
/// Обработчик данных от платы. Принимает только строки
procedure DataReceivedHandler(sender: object; e: System.IO.Ports.SerialDataReceivedEventArgs);
public
/// Копирование файла прошивки в BBC:Microbit
class procedure CopyFile(filename : string);
public
/// Обработчик события распознавания
OnReadString: procedure(Message: string);
/// Список USB COM-портов с идентификаторами Microbit
class function GetUsbPortNames: List<string>;
begin
// Вот такие параметры у каждой платы (по крайней мере сейчас)
var pattern := '^VID_0D28.PID_0204';
var _rx := new System.Text.RegularExpressions.Regex(pattern, RegexOptions.IgnoreCase);
Result := new List<string>;
var {Microsoft.Win32.RegistryKey} rk1 := Microsoft.Win32.Registry.LocalMachine;
var {Microsoft.Win32.RegistryKey} rk2 := rk1.OpenSubKey('SYSTEM\\CurrentControlSet\\Enum');
foreach s3: string in rk2.GetSubKeyNames do
begin
var rk3 := rk2.OpenSubKey(s3);
foreach s: string in rk3.GetSubKeyNames do
if _rx.Match(s).Success then
begin
var {RegistryKey} rk4 := rk3.OpenSubKey(s);
foreach s2: string in rk4.GetSubKeyNames do
begin
var {RegistryKey} rk5 := rk4.OpenSubKey(s2);
var {RegistryKey} rk6 := rk5.OpenSubKey('Device Parameters');
var {string} portName := string(rk6.GetValue('PortName'));
if not String.IsNullOrEmpty(portName) and System.IO.Ports.SerialPort.GetPortNames.Contains(portName) then
begin
Result.Add(string(rk6.GetValue('PortName')));
end;
end;
end;
end;
end;
/// <summary>
/// Конструктор объекта для взаимодействия с Microbit
/// </summary>
/// <param name="Handler">Процедура-обработчик, вызываемая для каждой принятой строки</param>
/// <param name="PortName">Имя COM-порта, можно не указывать</param>
constructor Create(Handler: procedure(s: string) := nil; PortName: string := '');
begin
OnReadString := Handler;
// Инициализируем виртуальный COM-порт, который связан с USB-устройством.
Port := new System.IO.Ports.SerialPort;
if PortName.Length > 0 then
// Порт указан явно при создании объекта класса, значит его и используем
Port.PortName := PortName
else
begin
// Порт явно не указан, приходится искать самостоятельно
// Получаем список всех похожих COM-портов (по VID и PID)
var portNames := GetUsbPortNames;
// Если подходящих портов нет - выбрасываем исключение
if portNames.Count = 0 then
raise new NoUBSComPortsException('Не найдено устройство Microbit')
else
// Берём первый попавшийся. Если устройств несколько, то надо явно указывать
Port.PortName := portNames[0];
end;
// Эти параметры зашиты явно, рекомендованы руководством по Microbit
Port.BaudRate := 115200; //Указываем скорость.
Port.DataBits := 8;
Port.Parity := System.IO.Ports.Parity.None;
Port.StopBits := System.IO.Ports.StopBits.One;
Port.DataReceived += DataReceivedHandler;
Port.Open; //Открываем порт
end;
/// Отправка строки на устройство Microbit
procedure Send(message: string) := Port.WriteLine(message);
/// Деструктор - закрывает COM-порт
destructor Destroy;
begin
if Port <> nil then
begin
Port.Close;
Port := nil;
end;
end;
procedure Dispose;
begin
Destroy;
end;
procedure Finalize; override;
begin
Destroy
end;
end;
implementation
/// Иногда строки приходят "склеенные" нужно разбить по служебным символам
/// Эта функция возвращает первую группу символов из строки, ограниченную
/// служебными #10 или #13, сама подстрока из строки удаляется.
function ParseStr(var s : string) : string;
begin
var iStart := 1;
var len := s.Length;
while (iStart<=len) and ((s[iStart] = #10) or (s[iStart] = #13)) do
iStart += 1;
var iEnd := iStart + 1;
while (iEnd<=len) and (s[iEnd] <> #10) and (s[iEnd] <> #13) do
iEnd += 1;
// Копируем фрагмент, но с проверкой
if iEnd-iStart > 0 then
Result := copy(s, iStart, iEnd-iStart)
else
Result := '';
while (iEnd<len) and ((s[iEnd+1] = #10) or (s[iEnd+1] = #13)) do
iEnd += 1;
Delete(s,1,iEnd);
end;
procedure Microbit.DataReceivedHandler(sender: object; e: System.IO.Ports.SerialDataReceivedEventArgs);
begin
var sp := sender as System.IO.Ports.SerialPort;
// Читаем строку по ReadLine
var message := sp.ReadLine;
while message.Length > 0 do
begin
// Очередная подстрока
var block := ParseStr(message).TrimEnd(' ');
if (block.Length > 0) and (OnReadString <> nil) then
OnReadString(block);
end;
end;
class procedure MicroBit.CopyFile(filename : string);
begin
var allDrives := System.IO.DriveInfo.GetDrives();
foreach d: System.IO.DriveInfo in allDrives do
begin
if d.IsReady then
if d.VolumeLabel = 'MICROBIT' then
begin
var dest : string := d.RootDirectory.ToString + '\\' + System.IO.Path.GetFileName(filename);
System.IO.File.Copy(filename, dest);
sleep(2000);
exit;
end;
end;
raise new NoBBCBoardFoundException('Не найдено устройство Microbit');
end;
end.

View file

@ -75,8 +75,8 @@ var
//>> Короткие функции модуля Graph3D # Graph3D short functions
// -----------------------------------------------------
procedure Invoke(p: ()->());
/// Процедура ускорения вывода. Обновляет экран после всех изменений
procedure Redraw(p: ()->());
/// Возвращает цвет по красной, зеленой и синей составляющей (в диапазоне 0..255)
function RGB(r, g, b: byte): Color;
/// Возвращает цвет по красной, зеленой и синей составляющей и параметру прозрачности (в диапазоне 0..255)
@ -182,6 +182,13 @@ type
property ShowCameraInfo: boolean read GetSCI write SetSCI;
/// Отображать ли ViewCube
property ShowViewCube: boolean read GetSVC write SetSVC;
/// Не отображать координатную систему, координатную сетку и ViewCube
procedure HideAll;
begin
ShowCoordinateSystem := False;
ShowGridLines := False;
ShowViewCube := False;
end;
/// Заголовок пространства отображения
property Title: string read GetT write SetT;
/// Подзаголовок пространства отображения
@ -410,10 +417,18 @@ type
begin
Result := CreateObject;
Result.CloneChildren(Self);
var ind := (model.Transform as Transform3DGroup).Children.IndexOf(rotatetransform);
(Result.model.Transform as Transform3DGroup).Children[ind] := (model.Transform as Transform3DGroup).Children[ind].Clone;
Result.rotatetransform := (Result.model.Transform as Transform3DGroup).Children[ind] as MatrixTransform3d;
ind := transfgroup.Children.IndexOf(rotatetransform_absolute);
(Result.model.Transform as Transform3DGroup).Children[ind] := (model.Transform as Transform3DGroup).Children[ind].Clone;
Result.rotatetransform_absolute := (Result.model.Transform as Transform3DGroup).Children[ind] as MatrixTransform3d;
ind := transfgroup.Children.IndexOf(transltransform);
(Result.model.Transform as Transform3DGroup).Children[ind] := (model.Transform as Transform3DGroup).Children[ind].Clone;
Result.transltransform := (Result.model.Transform as Transform3DGroup).Children[ind] as TranslateTransform3D;
//(Result.model.Transform as Transform3DGroup).Children[1] := (model.Transform as Transform3DGroup).Children[1].Clone;
//(Result.model.Transform as Transform3DGroup).Children[2] := (model.Transform as Transform3DGroup).Children[2].Clone;
//(Result.model.Transform as Transform3DGroup).Children[3] := (model.Transform as Transform3DGroup).Children[3].Clone; //- почему-то это не нужно!!! с ним не работает!
@ -475,6 +490,24 @@ type
/// Позиция 3D-объекта
property Position: Point3D read GetPos write MoveToProp;
/// Будущая позиция 3D-объекта по прошествии времени dt
function PositionAfterTime(dt: real): Point3D;
begin
var dx := Direction.X;
var dy := Direction.Y;
var dz := Direction.Z;
var len := Sqrt(dx*dx+dy*dy+dz*dz);
if len = 0 then
begin
Result := Position;
exit;
end;
var dvx := dx/len*Velocity;
var dvy := dy/len*Velocity;
var dvz := dz/len*Velocity;
Result := P3D(X + dvx*dt, Y + dvy*dt, Z + dvz*dt);
end;
/// Масштабирует 3D-объект в f раз
function Scale(f: real): Object3D :=
Invoke&<Object3D>(()->begin
@ -707,6 +740,8 @@ type
public
/// Добавить дочерний подобъект
procedure AddChild(obj: Object3D) := Invoke(AddT, obj);
/// Добавить дочерний подобъект
procedure AddChilds(params arr: array of Object3D) := arr.ForEach(obj->AddChild(obj));
/// Удалить дочерний подобъект
procedure RemoveChild(obj: Object3D) := Invoke(RemoveT, obj);
/// i-тый дочерний подобъект
@ -2643,8 +2678,9 @@ var
OnKeyUp: procedure(k: Key);
/// Событие нажатия символьной клавиши
OnKeyPress: procedure(ch: char);
/// Событие перерисовки графического 3D-окна
OnDrawTime: procedure(dt: real);
/// Событие перерисовки графического 3D-окна.
///Инициализируется процедурой с вещественным параметром dt - временем, прошедшим с момента последнего обновления экрана
OnDrawFrame: procedure(dt: real);
var
// -----------------------------------------------------
@ -2668,6 +2704,8 @@ var
OrtY: Vector3D := V3D(0, 1, 0);
/// Орт (единичный вектор) оси OZ
OrtZ: Vector3D := V3D(0, 0, 1);
/// Нулевой вектор
ZeroVector: Vector3D := V3D(0, 0, 0);
/// Точка начала координат
Origin: Point3D := P3D(0, 0, 0);
/// Плоскость OXY
@ -2694,7 +2732,7 @@ procedure __FinalizeModule__;
implementation
procedure Invoke(p: ()->()) := GraphWPFBase.Invoke(p);
procedure Redraw(p: ()->()) := GraphWPFBase.Invoke(p);
function RGB(r, g, b: byte) := Color.Fromrgb(r, g, b);
function ARGB(a, r, g, b: byte) := Color.FromArgb(a, r, g, b);
@ -3435,7 +3473,6 @@ function PointOnPlane(Plane: Plane3D; x, y: real): Point3D := Plane.PointOnPlane
function NearestPointOnLine(Line: Ray3D; x, y: real): Point3D := Line.NearestPointOnLine(x,y);
// Методы расширения для анимаций
function Sec(Self: integer): real; extensionmethod := Self;
@ -3716,25 +3753,25 @@ var LastUpdatedTime := new System.TimeSpan(0);
procedure RenderFrame(o: Object; e: System.EventArgs);
begin
if OnDrawTime<>nil then
if OnDrawFrame<>nil then
begin
var e1 := RenderingEventArgs(e).RenderingTime;
var dt := e1 - LastUpdatedTime;
if LastUpdatedTime.TotalMilliseconds<>0 then
if OnDrawTime<>nil then
OnDrawTime(dt.Milliseconds/1000);
if OnDrawFrame<>nil then
OnDrawFrame(dt.Milliseconds/1000);
LastUpdatedTime := e1;
end;
end;
procedure BeginFrameBasedAnimationTime(Draw: procedure(dt: real));
begin
OnDrawTime := Draw;
OnDrawFrame := Draw;
end;
procedure EndFrameBasedAnimation;
begin
OnDrawTime := nil;
OnDrawFrame := nil;
end;
@ -3788,6 +3825,8 @@ type
/// --- SystemKeyEvents
procedure SystemOnKeyDown(sender: Object; e: System.Windows.Input.KeyEventArgs);
begin
if (e.Key = Key.F4) and (e.KeyboardDevice.Modifiers = ModifierKeys.Control) then
Close;
if Graph3D.OnKeyDown <> nil then
Graph3D.OnKeyDown(e.Key);
e.Handled := True;
@ -3876,8 +3915,7 @@ begin
end;
MainWindow := new Graph3DWindow;
//MainWindow.MainPanel;
mre.Set();
app.Run(MainWindow);

View file

@ -345,7 +345,7 @@ function Rect(x,y,w,h: real): GRect;
function ColorBrush(c: Color): GBrush;
/// Возвращает однотонное цветное перо, заданное цветом
function ColorPen(c: Color): GPen;
/// Процедура ускорения вывода нескольких графических команд
/// Процедура ускорения вывода. Обновляет экран после всех изменений
procedure Redraw(d: ()->());
@ -483,6 +483,9 @@ var OnKeyUp: procedure(k: Key);
var OnKeyPress: procedure(ch: char);
/// Событие изменения размера графического окна
var OnResize: procedure;
/// Событие перерисовки графического окна.
///Инициализируется процедурой с вещественным параметром dt - временем, прошедшим с момента последнего обновления экрана
var OnDrawFrame: procedure(dt: real) := nil;
//{{{--doc: Конец секции 3 }}}
@ -1566,7 +1569,6 @@ procedure SystemOnResize(sender: Object; e: SizeChangedEventArgs) :=
var OnDraw: procedure := nil;
var OnDraw1: procedure(frame: integer) := nil;
var OnDrawTime: procedure(dt: real) := nil;
var FrameRate := 61; // кадров в секунду. Можно меньше!
var LastUpdatedTime := new System.TimeSpan(integer.MinValue);
@ -1575,12 +1577,12 @@ var FrameNum := 0;
procedure RenderFrame(o: Object; e: System.EventArgs);
begin
if (OnDraw<>nil) or (OnDraw1<>nil) or (OnDrawTime<>nil) then
if (OnDraw<>nil) or (OnDraw1<>nil) or (OnDrawFrame<>nil) then
begin
var e1 := RenderingEventArgs(e).RenderingTime;
var dt := e1 - LastUpdatedTime;
var delta := 1000/Framerate; // через какое время обновлять
if OnDrawTime<>nil then
if OnDrawFrame<>nil then
delta := 0; // перерисовывать когда придёт время
if dt.TotalMilliseconds < delta then
exit
@ -1591,8 +1593,8 @@ begin
OnDraw()
else if OnDraw1<>nil then
OnDraw1(FrameNum)
else if OnDrawTime<>nil then
OnDrawTime(dt.Milliseconds/1000);
else if OnDrawFrame<>nil then
OnDrawFrame(dt.Milliseconds/1000);
end;
end;
@ -1614,7 +1616,7 @@ end;
procedure BeginFrameBasedAnimationTime(Draw: procedure(dt: real));
begin
OnDrawTime := Draw;
OnDrawFrame := Draw;
end;
procedure EndFrameBasedAnimation;

View file

@ -27,7 +27,6 @@ type
g.LastChildFill := True;
Result := g;
end;
procedure InitMainGraphControl; virtual;
begin
end;

View file

@ -80,7 +80,7 @@ function Rect(x,y,w,h: real): GRect;
function ColorBrush(c: Color): SolidColorBrush;
/// Возвращает случайную точку графического окна. Необязательный параметр z задаёт отступ от края
function RandomWindowPoint(z: real := 0): GPoint;
/// Процедура ускорения вывода нескольких графических команд
/// Процедура ускорения вывода. Обновляет экран после всех изменений
procedure Redraw(p: ()->());
//{{{--doc: Конец секции 1 }}}

Binary file not shown.