WPFObjects модуль почти готов
Примеры WPFObjects Дополнения в справку - методы файлов Методы типизированных файлов переназваны f.FileSize на f.Size f.FilePos на f.Position Сделаны f.Reset и f.Rewrite Random для вещественных
This commit is contained in:
parent
f685999bf7
commit
85b5ac28d7
|
|
@ -15,7 +15,7 @@ internal static class RevisionClass
|
|||
public const string Major = "3";
|
||||
public const string Minor = "4";
|
||||
public const string Build = "0";
|
||||
public const string Revision = "1754";
|
||||
public const string Revision = "1758";
|
||||
|
||||
public const string MainVersion = Major + "." + Minor;
|
||||
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%MINOR%=4
|
||||
%REVISION%=1754
|
||||
%REVISION%=1758
|
||||
%COREVERSION%=0
|
||||
%MAJOR%=3
|
||||
|
|
|
|||
25
InstallerSamples/Graphics/WPFObjects/gr_IntersectWPF.pas
Normal file
25
InstallerSamples/Graphics/WPFObjects/gr_IntersectWPF.pas
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
uses WPFObjects;
|
||||
|
||||
var Destroyer: CircleWPF;
|
||||
|
||||
procedure CheckPulyaIntersects;
|
||||
begin
|
||||
Destroyer.IntersectionList.ForEach(procedure(o)->o.Destroy);
|
||||
end;
|
||||
|
||||
begin
|
||||
Window.SetSize(640,480);
|
||||
Window.Title := 'Разрушитель: метод Intersect пересечения объектов';
|
||||
for var i:=1 to 500 do
|
||||
new RectangleWPF(Random(Window.Width.Round-200)+100,Random(Window.Height.Round-100),Random(200),Random(200),clRandom);
|
||||
Destroyer := new CircleWPF(10,Window.Height.Round div 2,100,Colors.Black);
|
||||
Destroyer.FontColor := Colors.Yellow;
|
||||
Destroyer.Text := 'Destroyer';
|
||||
|
||||
for var i:=1 to 900 do
|
||||
begin
|
||||
Destroyer.MoveOn(1,0);
|
||||
CheckPulyaIntersects;
|
||||
Sleep(1);
|
||||
end;
|
||||
end.
|
||||
45
InstallerSamples/Graphics/WPFObjects/gr_MovingObjectsWPF.pas
Normal file
45
InstallerSamples/Graphics/WPFObjects/gr_MovingObjectsWPF.pas
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
uses WPFObjects;
|
||||
|
||||
const
|
||||
/// Количество графических объектов
|
||||
Count = 300;
|
||||
|
||||
/// Возвращает случайный графический объект
|
||||
function NewRandomABC: ObjectWPF;
|
||||
begin
|
||||
case Random(3) of
|
||||
0: Result := new CircleWPF(Random(Window.Width.Round-30)+10,Random(Window.Height.Round-30)+10,Random(10)+5,RandomColor);
|
||||
1: Result := new RectangleWPF(Random(Window.Width.Round-30)+10,Random(Window.Height.Round-30)+10,Random(20)+10,Random(20)+10,RandomColor);
|
||||
2: Result := new StarWPF(Random(Window.Width.Round-30)+10,Random(Window.Height.Round-30)+10,Random(20)+10,Random(10)+5,Random(4)+4,RandomColor);
|
||||
end;
|
||||
end;
|
||||
|
||||
/// Передвигает графический объект с отражением его от стенок
|
||||
procedure Move(o: ObjectWPF);
|
||||
begin
|
||||
o.Move;
|
||||
if (o.Left<0) or (o.Left+o.Width>Window.Width) then
|
||||
o.dx := -o.dx;
|
||||
if (o.Top<0) or (o.Top+o.Height>Window.Height) then
|
||||
o.dy := -o.dy;
|
||||
end;
|
||||
|
||||
begin
|
||||
Window.Title := 'Движущиеся объекты';
|
||||
for var i:=1 to Count do
|
||||
begin
|
||||
var m: ObjectWPF := NewRandomABC;
|
||||
repeat
|
||||
m.dx := Random(-3,3);
|
||||
m.dy := Random(-3,3);
|
||||
until (m.dx<>0) and (m.dy<>0);
|
||||
end;
|
||||
var k := 1;
|
||||
while True do
|
||||
begin
|
||||
for var i:=0 to Objects.Count-1 do
|
||||
Move(Objects[i]);
|
||||
k += 1;
|
||||
Window.Title := Format('{0,5:f2}',k/Milliseconds*1000)+' кадров в секунду';
|
||||
end;
|
||||
end.
|
||||
|
|
@ -3,6 +3,8 @@
|
|||
<param name="Keyword" value="Read2">
|
||||
<param name="Keyword" value="Read3">
|
||||
<param name="Keyword" value="ReadElements">
|
||||
<param name="Keyword" value="Reset">
|
||||
<param name="Keyword" value="Rewrite">
|
||||
<param name="Keyword" value="Seek">
|
||||
<param name="Keyword" value="Write"></object>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><link rel="StyleSheet" href="../../../default.css">
|
||||
|
|
@ -17,6 +19,10 @@
|
|||
<br> Âîçâðàùàåò ïîñëåäîâàòåëüíîñòü ýëåìåíòîâ îòêðûòîãî òèïèçèðîâàííîãî ôàéëà îò òåêóùåãî ýëåìåíòà äî êîíå÷íîãî</td></tr>
|
||||
<tr><td><code><b>function</b> ReadElements<T>(fname: string): <b>sequence </b> <b>of</b> T;</code>
|
||||
<br> Îòêðûâàåò òèïèçèðîâàííûé ôàéë, âîçâðàùàåò ïîñëåäîâàòåëüíîñòü åãî ýëåìåíòîâ è çàêðûâàåò åãî</td></tr>
|
||||
<tr><td><code><b>procedure</b> Reset<T>(Self: <b>file</b> <b>of</b> T); </code>
|
||||
<br> Îòêðûâàåò ñóùåñòâóþùèé òèïèçèðîâàííûé ôàéë</td></tr>
|
||||
<tr><td><code><b>procedure</b> Rewrite<T>(Self: <b>file</b> <b>of</b> T); </code>
|
||||
<br> Ñîçäàåò íîâûé èëè îáíóëÿåò ñóùåñòâóþùèé òèïèçèðîâàííûé ôàéë</td></tr>
|
||||
<tr><td><code><b>function</b> Seek<T>(Self: <b>file</b> <b>of</b> T; n: int64): <b>file</b> <b>of</b> T; </code>
|
||||
<br> Óñòàíàâëèâàåò òåêóùóþ ïîçèöèþ ôàéëîâîãî óêàçàòåëÿ â òèïèçèðîâàííîì ôàéëå íà ýëåìåíò ñ íîìåðîì n</td></tr>
|
||||
<tr><td><code><b>procedure</b> Write<T>(Self: <b>file</b> <b>of</b> T; <b>params</b> vals: <b>array</b> <b>of</b> T); </code>
|
||||
|
|
|
|||
|
|
@ -88,20 +88,32 @@
|
|||
<br> Ïåðåâîäèò ðàäèàíû â ãðàäóñû</td></tr>
|
||||
<tr><td><code><b>function</b> Random(maxValue: integer): integer;</code>
|
||||
<br> Âîçâðàùàåò ñëó÷àéíîå öåëîå â äèàïàçîíå îò 0 äî maxValue-1</td></tr>
|
||||
<tr><td><code><b>function</b> Random(maxValue: real): real;</code>
|
||||
<br> Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [0,maxValue)</td></tr>
|
||||
<tr><td><code><b>function</b> Random(a, b: integer): integer;</code>
|
||||
<br> Âîçâðàùàåò ñëó÷àéíîå öåëîå â äèàïàçîíå îò a äî b</td></tr>
|
||||
<tr><td><code><b>function</b> Random(a, b: real): real;</code>
|
||||
<br> Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [a,b)</td></tr>
|
||||
<tr><td><code><b>function</b> Random: real;</code>
|
||||
<br> Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [0..1)</td></tr>
|
||||
<tr><td><code><b>function</b> Random2(maxValue: integer): (integer, integer);</code>
|
||||
<br> Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò 0 äî maxValue-1</td></tr>
|
||||
<tr><td><code><b>function</b> Random2(maxValue: real): (real, real);</code>
|
||||
<br> Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0,maxValue)</td></tr>
|
||||
<tr><td><code><b>function</b> Random2(a, b: integer): (integer, integer);</code>
|
||||
<br> Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò a äî b</td></tr>
|
||||
<tr><td><code><b>function</b> Random2(a, b: real): (real, real);</code>
|
||||
<br> Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [a,b)</td></tr>
|
||||
<tr><td><code><b>function</b> Random2: (real, real);</code>
|
||||
<br> Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0..1)</td></tr>
|
||||
<tr><td><code><b>function</b> Random3(maxValue: integer): (integer, integer, integer);</code>
|
||||
<br> Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò 0 äî maxValue-1</td></tr>
|
||||
<tr><td><code><b>function</b> Random3(maxValue: real): (real, real, real);</code>
|
||||
<br> Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0,maxValue)</td></tr>
|
||||
<tr><td><code><b>function</b> Random3(a, b: integer): (integer, integer, integer);</code>
|
||||
<br> Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò a äî b</td></tr>
|
||||
<tr><td><code><b>function</b> Random3(a, b: real): (real, real, real);</code>
|
||||
<br> Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [a,b)</td></tr>
|
||||
<tr><td><code><b>function</b> Random3: (real, real, real);</code>
|
||||
<br> Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0..1)</td></tr>
|
||||
<tr><td><code><b>procedure</b> Randomize(seed: integer);</code>
|
||||
|
|
|
|||
|
|
@ -67,7 +67,10 @@
|
|||
<ul>
|
||||
<li><a href="stand_common_files_methods.html">Îáùèå ìåòîäû ôàéëîâûõ òèïîâ</a></li>
|
||||
<li><a href="stand_text_files_methods.html">Ìåòîäû òåêñòîâûõ ôàéëîâ</a></li>
|
||||
<li><a href="stand_typed_files_methods.html">Ìåòîäû òèïèçèðîâàííûõ ôàéëîâ</a></li>
|
||||
<li><a href="stand_binary_files_methods.html">Ìåòîäû äâîè÷íûõ ôàéëîâ</a></li>
|
||||
<li><a href="Files/Extension%20methods%20for%20typed%20files.html">Ìåòîäû
|
||||
ðàñøèðåíèÿ òèïèçèðîâàííûõ ôàéëîâ</a></li>
|
||||
</ul>
|
||||
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -11,26 +11,26 @@
|
|||
</head>
|
||||
<body>
|
||||
<H1>Методы двоичных файлов</H1>
|
||||
<p>Äëÿ
|
||||
äâîè÷íûõ ôàéëîâ (òèïû <code><strong>file</strong></code>, <code><strong>file of</strong> T</code>)
|
||||
<p>Äëÿ äâîè÷íûõ ôàéëîâ <code><strong>file</strong></code>
|
||||
определены следующие методы:</p>
|
||||
<table border=0 CELLPADDING=5>
|
||||
<tr>
|
||||
<td>
|
||||
<code><strong>function</strong> FilePos: int64; </code><br>
|
||||
Âîçâðàùàåò òåêóùóþ ïîçèöèþ ôàéëîâîãî óêàçàòåëÿ â äâîè÷íîì ôàéëå
|
||||
<code><strong>function</strong> Position: int64; </code><br>
|
||||
Âîçâðàùàåò èëè
|
||||
óñòàíàâëèâàåò òåêóùóþ ïîçèöèþ ôàéëîâîãî óêàçàòåëÿ â äâîè÷íîì ôàéëå
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code><strong>function</strong> FileSize: int64; </code><br>
|
||||
<code><strong>function</strong> Size: int64; </code><br>
|
||||
Возвращает количество элементов в двоичном файле</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code><strong>procedure</strong> Seek(n: int64); </code><br>
|
||||
Устанавливает текущую позицию файлового указателя в двоичном
|
||||
ôàéëå íà ýëåìåíò ñ íîìåðîì n</td>
|
||||
ôàéëå íà áàéò ñ íîìåðîì n</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
<html><head>
|
||||
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
||||
<param name="Keyword" value="Position">
|
||||
<param name="Keyword" value="Size">
|
||||
<param name="Keyword" value="Seek">
|
||||
<param name="Keyword" value="Truncate">
|
||||
</object>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
||||
<title></title>
|
||||
<link rel="StyleSheet" href="../../default.css">
|
||||
</head>
|
||||
<body>
|
||||
<H1>Ìåòîäû òèïèçèðîâàííûõ ôàéëîâ</H1>
|
||||
<p>Äëÿ
|
||||
òèïèçèðîâàííûõ ôàéëîâ <code><strong>file of</strong> T</code>
|
||||
îïðåäåëåíû ñëåäóþùèå ìåòîäû:</p>
|
||||
<table border=0 CELLPADDING=5>
|
||||
<tr>
|
||||
<td>
|
||||
<code><strong>function</strong> Position: int64; </code><br>
|
||||
Âîçâðàùàåò òåêóùóþ ïîçèöèþ ôàéëîâîãî óêàçàòåëÿ â
|
||||
òèïèçèðîâàííîì ôàéëå
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code><strong>function</strong> Size: int64; </code><br>
|
||||
Âîçâðàùàåò êîëè÷åñòâî ýëåìåíòîâ â
|
||||
òèïèçèðîâàííîì ôàéëå</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code><strong>procedure</strong> Seek(n: int64); </code><br>
|
||||
Óñòàíàâëèâàåò òåêóùóþ ïîçèöèþ ôàéëîâîãî óêàçàòåëÿ â
|
||||
òèïèçèðîâàííîì
|
||||
ôàéëå íà ýëåìåíò ñ íîìåðîì n</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code><strong>procedure</strong> Truncate; </code><br>
|
||||
Óñåêàåò òèïèçèðîâàííûé ôàéë, îòáðàñûâàÿ âñå ýëåìåíòû ñ ïîçèöèè
|
||||
ôàéëîâîãî óêàçàòåëÿ</tr>
|
||||
</table>
|
||||
</body></html>
|
||||
|
|
@ -46,9 +46,21 @@
|
|||
<li>
|
||||
<a href="../PABCSystemUnit/Files/Subroutines%20for%20binary%20files.html">Ïîäïðîãðàììû äëÿ ðàáîòû ñ äâîè÷íûìè ôàéëàìè</a></li>
|
||||
<li><a href="../PABCSystemUnit/Files/Functions%20for%20file%20names.html">Ïîäïðîãðàììû äëÿ ðàáîòû ñ èìåíàìè ôàéëîâ</a></li>
|
||||
<li><a href="../PABCSystemUnit/stand_common_files_methods.html">Îáùèå ìåòîäû
|
||||
ôàéëîâ</a></li>
|
||||
<li><a href="../PABCSystemUnit/stand_text_files_methods.html">Ìåòîäû
|
||||
òåêñòîâûõ ôàéëîâ</a></li>
|
||||
<li><a href="../PABCSystemUnit/stand_typed_files_methods.html">Ìåòîäû
|
||||
òèïèçèðîâàííûõ ôàéëîâ</a></li>
|
||||
<li><a href="../PABCSystemUnit/stand_binary_files_methods.html">Ìåòîäû
|
||||
äâîè÷íûõ ôàéëîâ</a></li>
|
||||
<li>
|
||||
<a href="../PABCSystemUnit/Files/Extension%20methods%20for%20typed%20files.html">
|
||||
Ìåòîäû ðàñøèðåíèÿ òèïèçèðîâàííûõ ôàéëîâ</a></li>
|
||||
</ul>
|
||||
<p>Êðîìå òîãî, â .NET èìååòñÿ ðÿä
|
||||
классов, связанных с работой с файлами.</p>
|
||||
êëàññîâ, ñâÿçàííûõ ñ ðàáîòîé ñ ôàéëàìè. Îíè íàõîäÿòñÿ â ïðîñòðàíñòâàõ èìåí
|
||||
System.Text è System.IO.</p>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -938,20 +938,32 @@ procedure Randomize;
|
|||
procedure Randomize(seed: integer);
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå öåëîå â äèàïàçîíå îò 0 äî maxValue-1
|
||||
function Random(maxValue: integer): integer;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [0,maxValue)
|
||||
function Random(maxValue: real): real;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå öåëîå â äèàïàçîíå îò a äî b
|
||||
function Random(a, b: integer): integer;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [a,b)
|
||||
function Random(a, b: real): real;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [0..1)
|
||||
function Random: real;
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò 0 äî maxValue-1
|
||||
function Random2(maxValue: integer): (integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0,maxValue)
|
||||
function Random2(maxValue: real): (real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò a äî b
|
||||
function Random2(a, b: integer): (integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [a,b)
|
||||
function Random2(a, b: real): (real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0..1)
|
||||
function Random2: (real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò 0 äî maxValue-1
|
||||
function Random3(maxValue: integer): (integer, integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0,maxValue)
|
||||
function Random3(maxValue: real): (real, real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò a äî b
|
||||
function Random3(a, b: integer): (integer, integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [a,b)
|
||||
function Random3(a, b: real): (real, real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0..1)
|
||||
function Random3: (real, real, real);
|
||||
|
||||
|
|
@ -2143,7 +2155,7 @@ end;
|
|||
|
||||
// Äîïîëíåíèÿ èþëü 2016: Incremental
|
||||
///--
|
||||
{function IncrementalSeq(Self: sequence of integer): sequence of integer;
|
||||
function IncrementalSeq(Self: sequence of integer): sequence of integer;
|
||||
begin
|
||||
var iter := Self.GetEnumerator();
|
||||
if iter.MoveNext() then
|
||||
|
|
@ -2220,7 +2232,7 @@ end;
|
|||
function Incremental(Self: LinkedList<real>): sequence of real; extensionmethod;
|
||||
begin
|
||||
Result := IncrementalSeq(Self);
|
||||
end;}
|
||||
end;
|
||||
|
||||
/// Âîçâðàùàåò ïîñëåäîâàòåëüíîñòü ðàçíîñòåé ñîñåäíèõ ýëåìåíòîâ èñõîäíîé ïîñëåäîâàòåëüíîñòè.  êà÷åñòâå ôóíêöèè ðàçíîñòè èñïîëüçóåòñÿ func
|
||||
function Incremental<T, T1>(Self: sequence of T; func: (T,T)->T1): sequence of T1; extensionmethod;
|
||||
|
|
@ -3939,3 +3951,15 @@ begin
|
|||
PABCSystem.Write(Self, x);
|
||||
end;
|
||||
|
||||
/// Îòêðûâàåò ñóùåñòâóþùèé òèïèçèðîâàííûé ôàéë
|
||||
procedure Reset<T>(Self: file of T); extensionmethod;
|
||||
begin
|
||||
PABCSystem.Reset(Self);
|
||||
end;
|
||||
|
||||
/// Ñîçäàåò íîâûé èëè îáíóëÿåò ñóùåñòâóþùèé òèïèçèðîâàííûé ôàéë
|
||||
procedure Rewrite<T>(Self: file of T); extensionmethod;
|
||||
begin
|
||||
PABCSystem.Rewrite(Self);
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -621,20 +621,32 @@ procedure Randomize;
|
|||
procedure Randomize(seed: integer);
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå öåëîå â äèàïàçîíå îò 0 äî maxValue-1
|
||||
function Random(maxValue: integer): integer;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [0,maxValue)
|
||||
function Random(maxValue: real): real;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå öåëîå â äèàïàçîíå îò a äî b
|
||||
function Random(a, b: integer): integer;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [a,b)
|
||||
function Random(a, b: real): real;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [0..1)
|
||||
function Random: real;
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò 0 äî maxValue-1
|
||||
function Random2(maxValue: integer): (integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0,maxValue)
|
||||
function Random2(maxValue: real): (real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò a äî b
|
||||
function Random2(a, b: integer): (integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [a,b)
|
||||
function Random2(a, b: real): (real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0..1)
|
||||
function Random2: (real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò 0 äî maxValue-1
|
||||
function Random3(maxValue: integer): (integer, integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0,maxValue)
|
||||
function Random3(maxValue: real): (real, real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò a äî b
|
||||
function Random3(a, b: integer): (integer, integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [a,b)
|
||||
function Random3(a, b: real): (real, real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0..1)
|
||||
function Random3: (real, real, real);
|
||||
///-function Max(a: ÷èñëî, b: ÷èñëî): ÷èñëî;
|
||||
|
|
@ -1565,3 +1577,7 @@ function ReadElements<T>(Self: file of T): sequence of T; extensionmethod;
|
|||
function ReadElements<T>(fname: string): sequence of T;
|
||||
/// Çàïèñûâàåò äàííûå â òèïèçèðîâàííûé ôàéë
|
||||
procedure Write<T>(Self: file of T; params vals: array of T); extensionmethod;
|
||||
/// Îòêðûâàåò ñóùåñòâóþùèé òèïèçèðîâàííûé ôàéë
|
||||
procedure Reset<T>(Self: file of T); extensionmethod;
|
||||
/// Ñîçäàåò íîâûé èëè îáíóëÿåò ñóùåñòâóþùèé òèïèçèðîâàííûé ôàéë
|
||||
procedure Rewrite<T>(Self: file of T); extensionmethod;
|
||||
|
|
|
|||
|
|
@ -600,20 +600,32 @@ procedure Randomize;
|
|||
procedure Randomize(seed: integer);
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå öåëîå â äèàïàçîíå îò 0 äî maxValue-1
|
||||
function Random(maxValue: integer): integer;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [0,maxValue)
|
||||
function Random(maxValue: real): real;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå öåëîå â äèàïàçîíå îò a äî b
|
||||
function Random(a, b: integer): integer;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [a,b)
|
||||
function Random(a, b: real): real;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [0..1)
|
||||
function Random: real;
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò 0 äî maxValue-1
|
||||
function Random2(maxValue: integer): (integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0,maxValue)
|
||||
function Random2(maxValue: real): (real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò a äî b
|
||||
function Random2(a, b: integer): (integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [a,b)
|
||||
function Random2(a, b: real): (real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0..1)
|
||||
function Random2: (real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò 0 äî maxValue-1
|
||||
function Random3(maxValue: integer): (integer, integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0,maxValue)
|
||||
function Random3(maxValue: real): (real, real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò a äî b
|
||||
function Random3(a, b: integer): (integer, integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [a,b)
|
||||
function Random3(a, b: real): (real, real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0..1)
|
||||
function Random3: (real, real, real);
|
||||
///-function Max(a: ÷èñëî, b: ÷èñëî): ÷èñëî;
|
||||
|
|
@ -1528,3 +1540,7 @@ function ReadElements<T>(Self: file of T): sequence of T; extensionmethod;
|
|||
function ReadElements<T>(fname: string): sequence of T;
|
||||
/// Çàïèñûâàåò äàííûå â òèïèçèðîâàííûé ôàéë
|
||||
procedure Write<T>(Self: file of T; params vals: array of T); extensionmethod;
|
||||
/// Îòêðûâàåò ñóùåñòâóþùèé òèïèçèðîâàííûé ôàéë
|
||||
procedure Reset<T>(Self: file of T); extensionmethod;
|
||||
/// Ñîçäàåò íîâûé èëè îáíóëÿåò ñóùåñòâóþùèé òèïèçèðîâàííûé ôàéë
|
||||
procedure Rewrite<T>(Self: file of T); extensionmethod;
|
||||
|
|
|
|||
|
|
@ -568,20 +568,32 @@ procedure Randomize;
|
|||
procedure Randomize(seed: integer);
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå öåëîå â äèàïàçîíå îò 0 äî maxValue-1
|
||||
function Random(maxValue: integer): integer;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [0,maxValue)
|
||||
function Random(maxValue: real): real;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå öåëîå â äèàïàçîíå îò a äî b
|
||||
function Random(a, b: integer): integer;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [a,b)
|
||||
function Random(a, b: real): real;
|
||||
/// Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå â äèàïàçîíå [0..1)
|
||||
function Random: real;
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò 0 äî maxValue-1
|
||||
function Random2(maxValue: integer): (integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0,maxValue)
|
||||
function Random2(maxValue: real): (real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò a äî b
|
||||
function Random2(a, b: integer): (integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [a,b)
|
||||
function Random2(a, b: real): (real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç äâóõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0..1)
|
||||
function Random2: (real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò 0 äî maxValue-1
|
||||
function Random3(maxValue: integer): (integer, integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0,maxValue)
|
||||
function Random3(maxValue: real): (real, real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ öåëûõ â äèàïàçîíå îò a äî b
|
||||
function Random3(a, b: integer): (integer, integer, integer);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [a,b)
|
||||
function Random3(a, b: real): (real, real, real);
|
||||
/// Âîçâðàùàåò êîðòåæ èç òðåõ ñëó÷àéíûõ âåùåñòâåííûõ â äèàïàçîíå [0..1)
|
||||
function Random3: (real, real, real);
|
||||
/// Âîçâðàùàåò ìàêñèìàëüíîå èç ÷èñåë a,b
|
||||
|
|
@ -1470,3 +1482,7 @@ function ReadElements<T>(Self: file of T): sequence of T; extensionmethod;
|
|||
function ReadElements<T>(fname: string): sequence of T;
|
||||
/// Çàïèñûâàåò äàííûå â òèïèçèðîâàííûé ôàéë
|
||||
procedure Write<T>(Self: file of T; params vals: array of T); extensionmethod;
|
||||
/// Îòêðûâàåò ñóùåñòâóþùèé òèïèçèðîâàííûé ôàéë
|
||||
procedure Reset<T>(Self: file of T); extensionmethod;
|
||||
/// Ñîçäàåò íîâûé èëè îáíóëÿåò ñóùåñòâóþùèé òèïèçèðîâàííûé ôàéë
|
||||
procedure Rewrite<T>(Self: file of T); extensionmethod;
|
||||
|
|
|
|||
|
|
@ -862,6 +862,10 @@
|
|||
<param name="Name" value="Ìåòîäû äâîè÷íûõ ôàéëîâ">
|
||||
<param name="Local" value="LangGuide\PABCSystemUnit\stand_binary_files_methods.html">
|
||||
</OBJECT>
|
||||
<LI> <OBJECT type="text/sitemap">
|
||||
<param name="Name" value="Ìåòîäû òèïèçèðîâàííûõ ôàéëîâ">
|
||||
<param name="Local" value="LangGuide\PABCSystemUnit\stand_typed_files_methods.html">
|
||||
</OBJECT>
|
||||
<LI> <OBJECT type="text/sitemap">
|
||||
<param name="Name" value="Ìåòîäû ðàñøèðåíèÿ òèïèçèðîâàííûõ ôàéëîâ">
|
||||
<param name="Local" value="LangGuide\PABCSystemUnit\Files\Extension methods for typed files.html">
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
!define VERSION '3.4.0.1754'
|
||||
!define VERSION '3.4.0.1758'
|
||||
|
|
|
|||
|
|
@ -500,28 +500,33 @@ type
|
|||
ElementSize: int64;
|
||||
offset: integer;
|
||||
offsets: array of integer;
|
||||
function GetFilePos: int64;
|
||||
public
|
||||
ElementType: System.Type;
|
||||
constructor Create(ElementType: System.Type);
|
||||
constructor Create(ElementType: System.Type; offs: integer; params offsets: array of integer);
|
||||
function ToString: string; override;
|
||||
/// Возвращает текущую позицию файлового указателя в типизированном файле
|
||||
function FilePos: int64;
|
||||
/// Возвращает количество элементов в типизированном файле
|
||||
function FileSize: int64;
|
||||
function Size: int64;
|
||||
/// Устанавливает текущую позицию файлового указателя в типизированном файле на элемент с номером n
|
||||
procedure Seek(n: int64);
|
||||
/// Возвращает или устанавливает текущую позицию файлового указателя в типизированном файле
|
||||
property Position: int64 read GetFilePos write Seek;
|
||||
end;
|
||||
|
||||
// Class for binary files
|
||||
///--
|
||||
BinaryFile = sealed class(AbstractBinaryFile)
|
||||
private
|
||||
function GetFilePos: int64;
|
||||
public
|
||||
function ToString: string; override;
|
||||
/// Возвращает текущую позицию файлового указателя в бестиповом файле
|
||||
function FilePos: int64;
|
||||
/// Возвращает количество байт в бестиповом файле
|
||||
function FileSize: int64;
|
||||
/// Устанавливает текущую позицию файлового указателя в бестиповом файле на байт с номером n
|
||||
function Size: int64;
|
||||
/// Устанавливает текущую позицию файлового указателя в бестиповом файле на элемент с номером n
|
||||
procedure Seek(n: int64);
|
||||
/// Возвращает или устанавливает текущую позицию файлового указателя в бестиповом файле
|
||||
property Position: int64 read GetFilePos write Seek;
|
||||
end;
|
||||
|
||||
//{{{doc: Начало секции интерфейса для документации }}}
|
||||
|
|
@ -1253,20 +1258,32 @@ procedure Randomize;
|
|||
procedure Randomize(seed: integer);
|
||||
/// Возвращает случайное целое в диапазоне от 0 до maxValue-1
|
||||
function Random(maxValue: integer): integer;
|
||||
/// Возвращает случайное вещественное в диапазоне [0,maxValue)
|
||||
function Random(maxValue: real): real;
|
||||
/// Возвращает случайное целое в диапазоне от a до b
|
||||
function Random(a, b: integer): integer;
|
||||
/// Возвращает случайное вещественное в диапазоне [a,b)
|
||||
function Random(a, b: real): real;
|
||||
/// Возвращает случайное вещественное в диапазоне [0..1)
|
||||
function Random: real;
|
||||
/// Возвращает кортеж из двух случайных целых в диапазоне от 0 до maxValue-1
|
||||
function Random2(maxValue: integer): (integer, integer);
|
||||
/// Возвращает кортеж из двух случайных вещественных в диапазоне [0,maxValue)
|
||||
function Random2(maxValue: real): (real, real);
|
||||
/// Возвращает кортеж из двух случайных целых в диапазоне от a до b
|
||||
function Random2(a, b: integer): (integer, integer);
|
||||
/// Возвращает кортеж из двух случайных вещественных в диапазоне [a,b)
|
||||
function Random2(a, b: real): (real, real);
|
||||
/// Возвращает кортеж из двух случайных вещественных в диапазоне [0..1)
|
||||
function Random2: (real, real);
|
||||
/// Возвращает кортеж из трех случайных целых в диапазоне от 0 до maxValue-1
|
||||
function Random3(maxValue: integer): (integer, integer, integer);
|
||||
/// Возвращает кортеж из трех случайных вещественных в диапазоне [0,maxValue)
|
||||
function Random3(maxValue: real): (real, real, real);
|
||||
/// Возвращает кортеж из трех случайных целых в диапазоне от a до b
|
||||
function Random3(a, b: integer): (integer, integer, integer);
|
||||
/// Возвращает кортеж из трех случайных вещественных в диапазоне [a,b)
|
||||
function Random3(a, b: real): (real, real, real);
|
||||
/// Возвращает кортеж из трех случайных вещественных в диапазоне [0..1)
|
||||
function Random3: (real, real, real);
|
||||
|
||||
|
|
@ -5541,30 +5558,17 @@ end;
|
|||
// -----------------------------------------------------
|
||||
// TypedFile & BinaryFile methods
|
||||
// -----------------------------------------------------
|
||||
function TypedFile.FilePos: int64;
|
||||
begin
|
||||
Result := PABCSystem.FilePos(Self);
|
||||
end;
|
||||
function TypedFile.Size: int64 := PABCSystem.FileSize(Self);
|
||||
|
||||
function TypedFile.FileSize: int64;
|
||||
begin
|
||||
Result := PABCSystem.FileSize(Self);
|
||||
end;
|
||||
function TypedFile.GetFilePos: int64 := PABCSystem.FilePos(Self);
|
||||
|
||||
function BinaryFile.FilePos: int64;
|
||||
begin
|
||||
Result := PABCSystem.FilePos(Self);
|
||||
end;
|
||||
procedure TypedFile.Seek(n: int64) := PABCSystem.Seek(Self, n);
|
||||
|
||||
function BinaryFile.FileSize: int64;
|
||||
begin
|
||||
Result := PABCSystem.FileSize(Self);
|
||||
end;
|
||||
function BinaryFile.GetFilePos: int64 := PABCSystem.FilePos(Self);
|
||||
|
||||
procedure BinaryFile.Seek(n: int64);
|
||||
begin
|
||||
PABCSystem.Seek(Self, n);
|
||||
end;
|
||||
function BinaryFile.Size: int64 := PABCSystem.FileSize(Self);
|
||||
|
||||
procedure BinaryFile.Seek(n: int64) := PABCSystem.Seek(Self, n);
|
||||
|
||||
// -----------------------------------------------------
|
||||
// Eoln - Eof
|
||||
|
|
@ -7117,18 +7121,34 @@ begin
|
|||
Result := rnd.Next(a, b + 1);
|
||||
end;
|
||||
|
||||
function Random(a, b: real): real;
|
||||
begin
|
||||
if a > b then Swap(a, b);
|
||||
Result := a + Random()*(b-a);
|
||||
end;
|
||||
|
||||
function Random := rnd.NextDouble;
|
||||
|
||||
function Random(MaxValue: real) := Random()*Abs(MaxValue);
|
||||
|
||||
function Random2(maxValue: integer) := (Random(maxValue), Random(maxValue));
|
||||
|
||||
function Random2(maxValue: real) := (Random(maxValue), Random(maxValue));
|
||||
|
||||
function Random2(a, b: integer) := (Random(a, b), Random(a, b));
|
||||
|
||||
function Random2(a, b: real) := (Random(a, b), Random(a, b));
|
||||
|
||||
function Random2 := (Random, Random);
|
||||
|
||||
function Random3(maxValue: integer) := (Random(maxValue), Random(maxValue), Random(maxValue));
|
||||
|
||||
function Random3(maxValue: Real) := (Random(maxValue), Random(maxValue), Random(maxValue));
|
||||
|
||||
function Random3(a, b: integer) := (Random(a, b), Random(a, b), Random(a, b));
|
||||
|
||||
function Random3(a, b: real) := (Random(a, b), Random(a, b), Random(a, b));
|
||||
|
||||
function Random3 := (Random, Random, Random);
|
||||
|
||||
|
||||
|
|
@ -10724,6 +10744,32 @@ begin
|
|||
Result := (Self[0], Self[1], Self[2], Self[3], Self[4], Self[5], v);
|
||||
end;
|
||||
|
||||
// Выводит кортеж
|
||||
procedure Print<T1, T2>(Self: (T1, T2)); extensionmethod := Print(Self);
|
||||
// Выводит кортеж
|
||||
procedure Print<T1, T2, T3>(Self: (T1, T2, T3)); extensionmethod := Print(Self);
|
||||
// Выводит кортеж
|
||||
procedure Print<T1, T2, T3, T4>(Self: (T1, T2, T3, T4)); extensionmethod := Print(Self);
|
||||
// Выводит кортеж
|
||||
procedure Print<T1, T2, T3, T4, T5>(Self: (T1, T2, T3, T4, T5)); extensionmethod := Print(Self);
|
||||
// Выводит кортеж
|
||||
procedure Print<T1, T2, T3, T4, T5, T6>(Self: (T1, T2, T3, T4, T5, T6)); extensionmethod := Print(Self);
|
||||
// Выводит кортеж
|
||||
procedure Print<T1, T2, T3, T4, T5, T6, T7>(Self: (T1, T2, T3, T4, T5, T6, T7)); extensionmethod := Print(Self);
|
||||
// Выводит кортеж и переходит на новую строку
|
||||
procedure Println<T1, T2>(Self: (T1, T2)); extensionmethod := Println(Self);
|
||||
// Выводит кортеж и переходит на новую строку
|
||||
procedure Println<T1, T2, T3>(Self: (T1, T2, T3)); extensionmethod := Println(Self);
|
||||
// Выводит кортеж и переходит на новую строку
|
||||
procedure Println<T1, T2, T3, T4>(Self: (T1, T2, T3, T4)); extensionmethod := Println(Self);
|
||||
// Выводит кортеж и переходит на новую строку
|
||||
procedure Println<T1, T2, T3, T4, T5>(Self: (T1, T2, T3, T4, T5)); extensionmethod := Println(Self);
|
||||
// Выводит кортеж и переходит на новую строку
|
||||
procedure Println<T1, T2, T3, T4, T5, T6>(Self: (T1, T2, T3, T4, T5, T6)); extensionmethod := Println(Self);
|
||||
// Выводит кортеж и переходит на новую строку
|
||||
procedure Println<T1, T2, T3, T4, T5, T6, T7>(Self: (T1, T2, T3, T4, T5, T6, T7)); extensionmethod := Println(Self);
|
||||
|
||||
|
||||
{// Определяет, есть ли указанный элемент в массиве
|
||||
function Contains<T>(self: array of T; x: T): boolean; extensionmethod;
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -5196,7 +5196,7 @@ namespace PascalABCCompiler.TreeConverter
|
|||
expressions_list ex_list = new expressions_list();
|
||||
ex_list.AddRange(exprs);
|
||||
ex_list.remove_at(0);
|
||||
ffn = convertion_data_and_alghoritms.select_function(ex_list, sil, subloc, syntax_nodes_parameters);
|
||||
ffn = convertion_data_and_alghoritms.select_function(ex_list, sil, subloc, syntax_nodes_parameters,true);
|
||||
if (ffn == null)
|
||||
{
|
||||
ThrowCompilationError = true;
|
||||
|
|
@ -5422,7 +5422,7 @@ namespace PascalABCCompiler.TreeConverter
|
|||
skip_first_parameter = false;
|
||||
sil = tmp_sil;
|
||||
exprs.remove_at(0);
|
||||
fn = convertion_data_and_alghoritms.select_function(exprs, sil, subloc, syntax_nodes_parameters);
|
||||
fn = convertion_data_and_alghoritms.select_function(exprs, sil, subloc, syntax_nodes_parameters,true);
|
||||
if (fn == null)
|
||||
{
|
||||
ThrowCompilationError = true;
|
||||
|
|
@ -5451,7 +5451,7 @@ namespace PascalABCCompiler.TreeConverter
|
|||
{
|
||||
sil = tmp_sil;
|
||||
exprs.remove_at(0);
|
||||
fn = convertion_data_and_alghoritms.select_function(exprs, sil, subloc, syntax_nodes_parameters);
|
||||
fn = convertion_data_and_alghoritms.select_function(exprs, sil, subloc, syntax_nodes_parameters,true);
|
||||
}
|
||||
else
|
||||
throw ex;
|
||||
|
|
|
|||
|
|
@ -144,6 +144,7 @@
|
|||
<KeyWords name = "NonReserved1" bold="false" italic="false" color="Blue">
|
||||
<Key word = "self" />
|
||||
<Key word = "result" />
|
||||
<Key word = "value" />
|
||||
</KeyWords>
|
||||
|
||||
<KeyWords name = "OperatorKeywords" bold="true" italic="false" color="Black">
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@ uses System.Threading;
|
|||
uses System.Windows.Shapes;
|
||||
uses System.Windows.Threading;
|
||||
|
||||
var CountVisuals := 0;
|
||||
var
|
||||
CountVisuals := 0;
|
||||
|
||||
{procedure Invoke(d: System.Delegate; params args: array of object);
|
||||
procedure Invoke(d: ()->());
|
||||
|
|
|
|||
|
|
@ -133,6 +133,18 @@ begin
|
|||
PABCSystem.Write(Self, x);
|
||||
end;
|
||||
|
||||
/// Открывает существующий типизированный файл
|
||||
procedure Reset<T>(Self: file of T); extensionmethod;
|
||||
begin
|
||||
PABCSystem.Reset(Self);
|
||||
end;
|
||||
|
||||
/// Создает новый или обнуляет существующий типизированный файл
|
||||
procedure Rewrite<T>(Self: file of T); extensionmethod;
|
||||
begin
|
||||
PABCSystem.Rewrite(Self);
|
||||
end;
|
||||
|
||||
//{{{--doc: Конец секции подпрограмм для типизированных файлов для документации }}}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -500,28 +500,33 @@ type
|
|||
ElementSize: int64;
|
||||
offset: integer;
|
||||
offsets: array of integer;
|
||||
function GetFilePos: int64;
|
||||
public
|
||||
ElementType: System.Type;
|
||||
constructor Create(ElementType: System.Type);
|
||||
constructor Create(ElementType: System.Type; offs: integer; params offsets: array of integer);
|
||||
function ToString: string; override;
|
||||
/// Возвращает текущую позицию файлового указателя в типизированном файле
|
||||
function FilePos: int64;
|
||||
/// Возвращает количество элементов в типизированном файле
|
||||
function FileSize: int64;
|
||||
function Size: int64;
|
||||
/// Устанавливает текущую позицию файлового указателя в типизированном файле на элемент с номером n
|
||||
procedure Seek(n: int64);
|
||||
/// Возвращает или устанавливает текущую позицию файлового указателя в типизированном файле
|
||||
property Position: int64 read GetFilePos write Seek;
|
||||
end;
|
||||
|
||||
// Class for binary files
|
||||
///--
|
||||
BinaryFile = sealed class(AbstractBinaryFile)
|
||||
private
|
||||
function GetFilePos: int64;
|
||||
public
|
||||
function ToString: string; override;
|
||||
/// Возвращает текущую позицию файлового указателя в бестиповом файле
|
||||
function FilePos: int64;
|
||||
/// Возвращает количество байт в бестиповом файле
|
||||
function FileSize: int64;
|
||||
/// Устанавливает текущую позицию файлового указателя в бестиповом файле на байт с номером n
|
||||
function Size: int64;
|
||||
/// Устанавливает текущую позицию файлового указателя в бестиповом файле на элемент с номером n
|
||||
procedure Seek(n: int64);
|
||||
/// Возвращает или устанавливает текущую позицию файлового указателя в бестиповом файле
|
||||
property Position: int64 read GetFilePos write Seek;
|
||||
end;
|
||||
|
||||
//{{{doc: Начало секции интерфейса для документации }}}
|
||||
|
|
@ -1253,20 +1258,32 @@ procedure Randomize;
|
|||
procedure Randomize(seed: integer);
|
||||
/// Возвращает случайное целое в диапазоне от 0 до maxValue-1
|
||||
function Random(maxValue: integer): integer;
|
||||
/// Возвращает случайное вещественное в диапазоне [0,maxValue)
|
||||
function Random(maxValue: real): real;
|
||||
/// Возвращает случайное целое в диапазоне от a до b
|
||||
function Random(a, b: integer): integer;
|
||||
/// Возвращает случайное вещественное в диапазоне [a,b)
|
||||
function Random(a, b: real): real;
|
||||
/// Возвращает случайное вещественное в диапазоне [0..1)
|
||||
function Random: real;
|
||||
/// Возвращает кортеж из двух случайных целых в диапазоне от 0 до maxValue-1
|
||||
function Random2(maxValue: integer): (integer, integer);
|
||||
/// Возвращает кортеж из двух случайных вещественных в диапазоне [0,maxValue)
|
||||
function Random2(maxValue: real): (real, real);
|
||||
/// Возвращает кортеж из двух случайных целых в диапазоне от a до b
|
||||
function Random2(a, b: integer): (integer, integer);
|
||||
/// Возвращает кортеж из двух случайных вещественных в диапазоне [a,b)
|
||||
function Random2(a, b: real): (real, real);
|
||||
/// Возвращает кортеж из двух случайных вещественных в диапазоне [0..1)
|
||||
function Random2: (real, real);
|
||||
/// Возвращает кортеж из трех случайных целых в диапазоне от 0 до maxValue-1
|
||||
function Random3(maxValue: integer): (integer, integer, integer);
|
||||
/// Возвращает кортеж из трех случайных вещественных в диапазоне [0,maxValue)
|
||||
function Random3(maxValue: real): (real, real, real);
|
||||
/// Возвращает кортеж из трех случайных целых в диапазоне от a до b
|
||||
function Random3(a, b: integer): (integer, integer, integer);
|
||||
/// Возвращает кортеж из трех случайных вещественных в диапазоне [a,b)
|
||||
function Random3(a, b: real): (real, real, real);
|
||||
/// Возвращает кортеж из трех случайных вещественных в диапазоне [0..1)
|
||||
function Random3: (real, real, real);
|
||||
|
||||
|
|
@ -5541,30 +5558,17 @@ end;
|
|||
// -----------------------------------------------------
|
||||
// TypedFile & BinaryFile methods
|
||||
// -----------------------------------------------------
|
||||
function TypedFile.FilePos: int64;
|
||||
begin
|
||||
Result := PABCSystem.FilePos(Self);
|
||||
end;
|
||||
function TypedFile.Size: int64 := PABCSystem.FileSize(Self);
|
||||
|
||||
function TypedFile.FileSize: int64;
|
||||
begin
|
||||
Result := PABCSystem.FileSize(Self);
|
||||
end;
|
||||
function TypedFile.GetFilePos: int64 := PABCSystem.FilePos(Self);
|
||||
|
||||
function BinaryFile.FilePos: int64;
|
||||
begin
|
||||
Result := PABCSystem.FilePos(Self);
|
||||
end;
|
||||
procedure TypedFile.Seek(n: int64) := PABCSystem.Seek(Self, n);
|
||||
|
||||
function BinaryFile.FileSize: int64;
|
||||
begin
|
||||
Result := PABCSystem.FileSize(Self);
|
||||
end;
|
||||
function BinaryFile.GetFilePos: int64 := PABCSystem.FilePos(Self);
|
||||
|
||||
procedure BinaryFile.Seek(n: int64);
|
||||
begin
|
||||
PABCSystem.Seek(Self, n);
|
||||
end;
|
||||
function BinaryFile.Size: int64 := PABCSystem.FileSize(Self);
|
||||
|
||||
procedure BinaryFile.Seek(n: int64) := PABCSystem.Seek(Self, n);
|
||||
|
||||
// -----------------------------------------------------
|
||||
// Eoln - Eof
|
||||
|
|
@ -7117,18 +7121,34 @@ begin
|
|||
Result := rnd.Next(a, b + 1);
|
||||
end;
|
||||
|
||||
function Random(a, b: real): real;
|
||||
begin
|
||||
if a > b then Swap(a, b);
|
||||
Result := a + Random()*(b-a);
|
||||
end;
|
||||
|
||||
function Random := rnd.NextDouble;
|
||||
|
||||
function Random(MaxValue: real) := Random()*Abs(MaxValue);
|
||||
|
||||
function Random2(maxValue: integer) := (Random(maxValue), Random(maxValue));
|
||||
|
||||
function Random2(maxValue: real) := (Random(maxValue), Random(maxValue));
|
||||
|
||||
function Random2(a, b: integer) := (Random(a, b), Random(a, b));
|
||||
|
||||
function Random2(a, b: real) := (Random(a, b), Random(a, b));
|
||||
|
||||
function Random2 := (Random, Random);
|
||||
|
||||
function Random3(maxValue: integer) := (Random(maxValue), Random(maxValue), Random(maxValue));
|
||||
|
||||
function Random3(maxValue: Real) := (Random(maxValue), Random(maxValue), Random(maxValue));
|
||||
|
||||
function Random3(a, b: integer) := (Random(a, b), Random(a, b), Random(a, b));
|
||||
|
||||
function Random3(a, b: real) := (Random(a, b), Random(a, b), Random(a, b));
|
||||
|
||||
function Random3 := (Random, Random, Random);
|
||||
|
||||
|
||||
|
|
@ -10724,6 +10744,32 @@ begin
|
|||
Result := (Self[0], Self[1], Self[2], Self[3], Self[4], Self[5], v);
|
||||
end;
|
||||
|
||||
// Выводит кортеж
|
||||
procedure Print<T1, T2>(Self: (T1, T2)); extensionmethod := Print(Self);
|
||||
// Выводит кортеж
|
||||
procedure Print<T1, T2, T3>(Self: (T1, T2, T3)); extensionmethod := Print(Self);
|
||||
// Выводит кортеж
|
||||
procedure Print<T1, T2, T3, T4>(Self: (T1, T2, T3, T4)); extensionmethod := Print(Self);
|
||||
// Выводит кортеж
|
||||
procedure Print<T1, T2, T3, T4, T5>(Self: (T1, T2, T3, T4, T5)); extensionmethod := Print(Self);
|
||||
// Выводит кортеж
|
||||
procedure Print<T1, T2, T3, T4, T5, T6>(Self: (T1, T2, T3, T4, T5, T6)); extensionmethod := Print(Self);
|
||||
// Выводит кортеж
|
||||
procedure Print<T1, T2, T3, T4, T5, T6, T7>(Self: (T1, T2, T3, T4, T5, T6, T7)); extensionmethod := Print(Self);
|
||||
// Выводит кортеж и переходит на новую строку
|
||||
procedure Println<T1, T2>(Self: (T1, T2)); extensionmethod := Println(Self);
|
||||
// Выводит кортеж и переходит на новую строку
|
||||
procedure Println<T1, T2, T3>(Self: (T1, T2, T3)); extensionmethod := Println(Self);
|
||||
// Выводит кортеж и переходит на новую строку
|
||||
procedure Println<T1, T2, T3, T4>(Self: (T1, T2, T3, T4)); extensionmethod := Println(Self);
|
||||
// Выводит кортеж и переходит на новую строку
|
||||
procedure Println<T1, T2, T3, T4, T5>(Self: (T1, T2, T3, T4, T5)); extensionmethod := Println(Self);
|
||||
// Выводит кортеж и переходит на новую строку
|
||||
procedure Println<T1, T2, T3, T4, T5, T6>(Self: (T1, T2, T3, T4, T5, T6)); extensionmethod := Println(Self);
|
||||
// Выводит кортеж и переходит на новую строку
|
||||
procedure Println<T1, T2, T3, T4, T5, T6, T7>(Self: (T1, T2, T3, T4, T5, T6, T7)); extensionmethod := Println(Self);
|
||||
|
||||
|
||||
{// Определяет, есть ли указанный элемент в массиве
|
||||
function Contains<T>(self: array of T; x: T): boolean; extensionmethod;
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ type
|
|||
ObjectsType = class
|
||||
private
|
||||
l := new List<ObjectWPF>;
|
||||
d := new Dictionary<FrameworkElement,ObjectWPF>;
|
||||
procedure AddP(ob: ObjectWPF);
|
||||
procedure DeleteP(ob: ObjectWPF);
|
||||
procedure ToBackP(ob: ObjectWPF);
|
||||
|
|
@ -112,8 +113,9 @@ type
|
|||
ChildrenWPF := new List<ObjectWPF>;
|
||||
procedure InitOb(x,y,w,h: real; o: FrameworkElement; SetWH: boolean := True);
|
||||
public
|
||||
property X: real read InvokeReal(()->Canvas.GetLeft(can)) write Invoke(procedure->Canvas.SetLeft(can,value));
|
||||
property Y: real read InvokeReal(()->Canvas.GetTop(can)) write Invoke(procedure->Canvas.SetTop(can,value));
|
||||
dx,dy: real;
|
||||
property Left: real read InvokeReal(()->Canvas.GetLeft(can)) write Invoke(procedure->Canvas.SetLeft(can,value));
|
||||
property Top: real read InvokeReal(()->Canvas.GetTop(can)) write Invoke(procedure->Canvas.SetTop(can,value));
|
||||
property Width: real read InvokeReal(()->gr.Width) write Invoke(procedure->begin gr.Width := value; ob.Width := value end); virtual;
|
||||
property Height: real read InvokeReal(()->gr.Height) write Invoke(procedure->begin gr.Height := value; ob.Height := value end); virtual;
|
||||
property Text: string read InvokeString(()->t.Text) write Invoke(procedure->t.Text := value);
|
||||
|
|
@ -135,6 +137,14 @@ type
|
|||
procedure AddChildP(ch: ObjectWPF);
|
||||
procedure DeleteChildP(ch: ObjectWPF);
|
||||
function GetInternalGeometry: Geometry; virtual := nil;
|
||||
function GetGeometry: Geometry; virtual;
|
||||
begin
|
||||
Result := GetInternalGeometry;
|
||||
var g := new TransformGroup();
|
||||
g.Children.Add(r);
|
||||
g.Children.Add(new TranslateTransform(Left,Top));
|
||||
Result.Transform := g; // версия
|
||||
end;
|
||||
public
|
||||
property TextAlignment: Alignment write Invoke(WTA,Value);
|
||||
property FontSize: real read InvokeReal(()->t.FontSize) write Invoke(procedure->t.FontSize := value);
|
||||
|
|
@ -143,12 +153,12 @@ type
|
|||
read Invoke&<GColor>(()->(t.Foreground as SolidColorBrush).Color)
|
||||
write Invoke(procedure->t.Foreground := new SolidColorBrush(value));
|
||||
property Center: Point
|
||||
read Pnt(X + Width/2,Y + Height/2)
|
||||
read Pnt(Left + Width/2, Top + Height/2)
|
||||
write MoveTo(Value.X - Width/2, Value.Y - Height/2);
|
||||
property LeftTop: Point read Pnt(X,Y);
|
||||
property LeftBottom: Point read Pnt(X,Y + Height);
|
||||
property RightTop: Point read Pnt(X + Height,Y);
|
||||
property RightBottom: Point read Pnt(X + Height,Y + Height);
|
||||
property LeftTop: Point read Pnt(Left,Top);
|
||||
property LeftBottom: Point read Pnt(Left,Top + Height);
|
||||
property RightTop: Point read Pnt(Left + Height,Top);
|
||||
property RightBottom: Point read Pnt(Left + Height,Top + Height);
|
||||
|
||||
property RotateAngle: real read InvokeReal(()->r.Angle) write Invoke(procedure->r.Angle := value);
|
||||
property RotateCenter: Point
|
||||
|
|
@ -158,28 +168,21 @@ type
|
|||
read RGB(0,0,0)
|
||||
write begin end; virtual;
|
||||
|
||||
procedure MoveTo(x,y: real) := (Self.X,Self.Y) := (x,y);
|
||||
procedure MoveTo(x,y: real) := (Self.Left,Self.Top) := (x,y);
|
||||
procedure MoveForward(r: real);
|
||||
begin
|
||||
X := X + r*Cos(Pi/180*(90-RotateAngle));
|
||||
Y := Y - r*Sin(Pi/180*(90-RotateAngle));
|
||||
Left := Left + r*Cos(Pi/180*(90-RotateAngle));
|
||||
Top := Top - r*Sin(Pi/180*(90-RotateAngle));
|
||||
end;
|
||||
|
||||
procedure MoveOn(dx,dy: real) := MoveTo(x+dx,y+dy);
|
||||
procedure RotateOn(da: real) := RotateAngle += da;
|
||||
procedure MoveOn(dx,dy: real) := MoveTo(Left+dx,Top+dy);
|
||||
procedure Move := MoveOn(dx,dy);
|
||||
procedure Rotate(da: real) := RotateAngle += da;
|
||||
procedure AddChild(ch: ObjectWPF) := Invoke(AddChildP,ch);
|
||||
procedure DeleteChild(ch: ObjectWPF) := Invoke(DeleteChildP,ch);
|
||||
procedure Destroy;
|
||||
procedure ToFront;
|
||||
procedure ToBack;
|
||||
function GetGeometry: Geometry; virtual;
|
||||
begin
|
||||
Result := GetInternalGeometry;
|
||||
var g := new TransformGroup();
|
||||
g.Children.Add(r);
|
||||
g.Children.Add(new TranslateTransform(X,Y));
|
||||
Result.Transform := g; // версия
|
||||
end;
|
||||
end;
|
||||
|
||||
BoundedObjectWPF = class(ObjectWPF)
|
||||
|
|
@ -212,9 +215,9 @@ type
|
|||
EllipseWPF = class(BoundedObjectWPF)
|
||||
private
|
||||
procedure InitOb2(x,y,w,h: real; c: GColor) := InitOb1(x,y,w,h,c,new Ellipse());
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
public
|
||||
constructor (x,y,w,h: real; c: GColor) := Invoke(InitOb2,x,y,w,h,c);
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
end;
|
||||
|
||||
CircleWPF = class(BoundedObjectWPF)
|
||||
|
|
@ -225,10 +228,11 @@ type
|
|||
procedure Rad(value: real);
|
||||
begin
|
||||
//(ob as Ellipse).RenderedGeometry
|
||||
X -= value - ob.Width/2;
|
||||
Y -= value - ob.Width/2;
|
||||
Left -= value - ob.Width/2;
|
||||
Top -= value - ob.Width/2;
|
||||
(ob.Width,ob.Height) := (value*2,value*2);
|
||||
end;
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
public
|
||||
constructor (x,y,r: real; c: GColor) := Invoke(InitOb2,x,y,r,c);
|
||||
constructor (p: Point; r: real; c: GColor) := Invoke(InitOb2,p.x,p.y,r,c);
|
||||
|
|
@ -241,7 +245,6 @@ type
|
|||
property Radius: real
|
||||
read InvokeReal(()->ob.Height/2)
|
||||
write Invoke(Rad,Value);
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
end;
|
||||
|
||||
RectangleWPF = class(BoundedObjectWPF)
|
||||
|
|
@ -251,17 +254,17 @@ type
|
|||
var rr := new Rectangle();
|
||||
InitOb1(x,y,w,h,c,rr);
|
||||
end;
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
public
|
||||
constructor (x,y,w,h: real; c: GColor) := Invoke(InitOb2,x,y,w,h,c);
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
end;
|
||||
|
||||
SquareWPF = class(CircleWPF)
|
||||
private
|
||||
procedure InitOb2(x,y,w: real; c: GColor) := InitOb1(x,y,w,w,c,new Rectangle());
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
public
|
||||
constructor (x,y,w: real; c: GColor) := Invoke(InitOb2,x,y,w,c);
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
end;
|
||||
|
||||
RoundRectWPF = class(BoundedObjectWPF)
|
||||
|
|
@ -272,9 +275,9 @@ type
|
|||
rr.RadiusY := r;
|
||||
InitOb1(x,y,w,h,c,rr);
|
||||
end;
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
public
|
||||
constructor (x,y,w,h,r: real; c: GColor) := Invoke(InitOb2,x,y,w,h,r,c);
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
end;
|
||||
|
||||
RoundSquareWPF = class(CircleWPF)
|
||||
|
|
@ -285,9 +288,9 @@ type
|
|||
rr.RadiusY := r;
|
||||
InitOb1(x,y,w,w,c,rr);
|
||||
end;
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
public
|
||||
constructor (x,y,w,r: real; c: GColor) := Invoke(InitOb2,x,y,w,r,c);
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
end;
|
||||
|
||||
LineWPF = class(ObjectWPF)
|
||||
|
|
@ -297,14 +300,14 @@ type
|
|||
begin
|
||||
var ll := new Line();
|
||||
InitOb(min(x1,x2),min(y1,y2),abs(x1-x2),abs(y1-y2),ll,False);
|
||||
ll.X1 := x1-X;
|
||||
ll.Y1 := y1-Y;
|
||||
ll.X2 := x2-X;
|
||||
ll.y2 := y2-Y;
|
||||
ll.X1 := x1-Left;
|
||||
ll.Y1 := y1-Top;
|
||||
ll.X2 := x2-Left;
|
||||
ll.y2 := y2-Top;
|
||||
Color := c;
|
||||
end;
|
||||
procedure RecalcXW(x1,x2: real) := (x,Width) := (min(x1,x2),abs(x1-x2));
|
||||
procedure RecalcYH(y1,y2: real) := (y,Height) := (min(y1,y2),abs(y1-y2));
|
||||
procedure RecalcXW(x1,x2: real) := (Left,Width) := (min(x1,x2),abs(x1-x2));
|
||||
procedure RecalcYH(y1,y2: real) := (Top,Height) := (min(y1,y2),abs(y1-y2));
|
||||
procedure ES(value: GColor) := Element.Stroke := new SolidColorBrush(Value);
|
||||
procedure EST(value: real) := Element.StrokeThickness := Value;
|
||||
procedure WX1(value: real) := begin
|
||||
|
|
@ -321,8 +324,9 @@ type
|
|||
(Element.X1,Element.X2) := (0,Width)
|
||||
else (Element.X1,Element.X2) := (Width,0);
|
||||
end;
|
||||
procedure WY1(value: real) := begin Element.Y1 := value - Y; {RecalcWHXY;} end;
|
||||
procedure WY2(value: real) := begin Element.Y2 := value - Y; {RecalcWHXY;} end;
|
||||
procedure WY1(value: real) := begin Element.Y1 := value - Top; {RecalcWHXY;} end;
|
||||
procedure WY2(value: real) := begin Element.Y2 := value - Top; {RecalcWHXY;} end;
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
public
|
||||
constructor (x1,y1,x2,y2: real; c: GColor) := Invoke(InitOb2,x1,y1,x2,y2,c);
|
||||
property Color: GColor
|
||||
|
|
@ -331,12 +335,11 @@ type
|
|||
property LineWidth: real
|
||||
read InvokeReal(()->Element.StrokeThickness)
|
||||
write Invoke(EST,value);
|
||||
property X1: real read InvokeReal(()->Element.X1 + X) write Invoke(WX1,value);
|
||||
property X2: real read InvokeReal(()->Element.X2 + X) write Invoke(WX2,value);
|
||||
property Y1: real read InvokeReal(()->Element.Y1 + Y) write Invoke(WY1,value);
|
||||
property Y2: real read InvokeReal(()->Element.Y2 + Y) write Invoke(WY2,value);
|
||||
property X1: real read InvokeReal(()->Element.X1 + Left) write Invoke(WX1,value);
|
||||
property X2: real read InvokeReal(()->Element.X2 + Left) write Invoke(WX2,value);
|
||||
property Y1: real read InvokeReal(()->Element.Y1 + Top) write Invoke(WY1,value);
|
||||
property Y2: real read InvokeReal(()->Element.Y2 + Top) write Invoke(WY2,value);
|
||||
property P1: Point read Pnt(X1,Y1) write begin X1 := Value.X; Y1 := Value.Y end;
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
end;
|
||||
|
||||
RegularPolygonWPF = class(BoundedObjectWPF)
|
||||
|
|
@ -346,7 +349,7 @@ type
|
|||
procedure InitOb2(x,y,r: real; n: integer; c: GColor);
|
||||
begin
|
||||
InitOb1(x-r,y-r,2*r,2*r,c,CreatePolygon(r,n),false);
|
||||
(Self.x,Self.y,Self.n) := (x-r,y-r,n);
|
||||
(Self.Left,Self.Top,Self.n) := (x-r,y-r,n);
|
||||
end;
|
||||
function ChangePointCollection(r: real; n: integer): PointCollection;
|
||||
begin
|
||||
|
|
@ -362,8 +365,8 @@ type
|
|||
procedure Rad(value: real);
|
||||
begin
|
||||
var delta := value - gr.Width/2;
|
||||
X -= delta;
|
||||
Y -= delta;
|
||||
Left -= delta;
|
||||
Top -= delta;
|
||||
(gr.Width,gr.Height) := (value*2,value*2);
|
||||
Element.Points := ChangePointCollection(value,n);
|
||||
end;
|
||||
|
|
@ -372,6 +375,7 @@ type
|
|||
n := value;
|
||||
Element.Points := ChangePointCollection(Radius,value);
|
||||
end;
|
||||
function GetInternalGeometry: Geometry; override := new EllipseGeometry(Center,Width/2,Height/2);
|
||||
public
|
||||
constructor (x,y,r: real; n: integer; c: GColor) := Invoke(InitOb2,x,y,r,n,c);
|
||||
constructor (p: Point; r: real; n: integer; c: GColor) := Create(p.X,p.Y,r,n,c);
|
||||
|
|
@ -387,7 +391,6 @@ type
|
|||
property Count: integer
|
||||
read InvokeInteger(()->n)
|
||||
write Invoke(Cnt,Value);
|
||||
function GetInternalGeometry: Geometry; override := new EllipseGeometry(Center,Width/2,Height/2);
|
||||
end;
|
||||
|
||||
StarWPF = class(RegularPolygonWPF)
|
||||
|
|
@ -396,7 +399,7 @@ type
|
|||
procedure InitOb2(x,y,r,rint: real; n: integer; c: GColor);
|
||||
begin
|
||||
InitOb1(x-r,y-r,2*r,2*r,c,CreatePolygon(r,rint,n),false);
|
||||
(Self.x,Self.y,Self.rint,Self.n) := (x-r,y-r,rint,n);
|
||||
(Self.Left,Self.Top,Self.rint,Self.n) := (x-r,y-r,rint,n);
|
||||
end;
|
||||
function ChangePointCollection(r,rint: real; n: integer): PointCollection;
|
||||
begin
|
||||
|
|
@ -413,8 +416,8 @@ type
|
|||
procedure Rad(value: real);
|
||||
begin
|
||||
var delta := value - gr.Width/2;
|
||||
X -= delta;
|
||||
Y -= delta;
|
||||
Left -= delta;
|
||||
Top -= delta;
|
||||
(gr.Width,gr.Height) := (value*2,value*2);
|
||||
Element.Points := ChangePointCollection(value,rint,n);
|
||||
end;
|
||||
|
|
@ -454,9 +457,7 @@ type
|
|||
var y1 := pp.Min(p->p.y);
|
||||
var y2 := pp.Max(p->p.y);
|
||||
var a := pp.Select(p->Pnt(p.x-x1,p.y-y1)).ToArray;
|
||||
a.Println;
|
||||
Println(x1,x2,y1,y2);
|
||||
InitOb1(x1,x2,x2-x1,y2-y1,c,CreatePolygon(a));
|
||||
InitOb1(x1,y1,x2-x1,y2-y1,c,CreatePolygon(a));
|
||||
end;
|
||||
function CreatePolygon(pp: array of Point): Polygon;
|
||||
begin
|
||||
|
|
@ -491,10 +492,10 @@ type
|
|||
var b := CreateBitmapImage(fname);
|
||||
Rest(x,y,b.Width,b.Height,b);
|
||||
end;
|
||||
function GetInternalGeometry: Geometry; override := new RectangleGeometry(Rect(Left,Top,Width,Height));
|
||||
public
|
||||
constructor (x,y: real; fname: string) := Invoke(InitOb2,x,y,fname);
|
||||
constructor (x,y,w,h: real; fname: string) := Invoke(InitOb3,x,y,w,h,fname);
|
||||
function GetInternalGeometry: Geometry; override := new RectangleGeometry(Rect(X,Y,Width,Height));
|
||||
end;
|
||||
|
||||
/// Главное окно
|
||||
|
|
@ -564,12 +565,14 @@ procedure ObjectsType.AddP(ob: ObjectWPF);
|
|||
begin
|
||||
l.Add(ob);
|
||||
host.Children.Add(ob.can);
|
||||
d.Add(ob.ob,ob);
|
||||
end;
|
||||
|
||||
procedure ObjectsType.DeleteP(ob: ObjectWPF);
|
||||
begin
|
||||
l.Remove(ob);
|
||||
host.Children.Remove(ob.can);
|
||||
d.Remove(ob.ob);
|
||||
end;
|
||||
|
||||
procedure ObjectsType.ToBackP(ob: ObjectWPF);
|
||||
|
|
@ -687,27 +690,16 @@ function MyHitTestResult2(res: HitTestResult): HitTestResultBehavior;
|
|||
begin
|
||||
var id := (res as GeometryHitTestResult).IntersectionDetail;
|
||||
|
||||
Result := HitTestResultBehavior.Stop;
|
||||
case id of
|
||||
{IntersectionDetail.FullyContains:
|
||||
begin
|
||||
//hitResultsList.Add(res.VisualHit);
|
||||
Result := HitTestResultBehavior.Continue;
|
||||
exit;
|
||||
end; }
|
||||
IntersectionDetail.Intersects:
|
||||
IntersectionDetail.FullyContains,
|
||||
IntersectionDetail.Intersects,
|
||||
IntersectionDetail.FullyInside:
|
||||
begin
|
||||
hitResultsList.Add(res.VisualHit);
|
||||
Result := HitTestResultBehavior.Continue;
|
||||
exit;
|
||||
end;
|
||||
{IntersectionDetail.FullyInside:
|
||||
begin
|
||||
//hitResultsList.Add(res.VisualHit);
|
||||
Result := HitTestResultBehavior.Continue;
|
||||
exit;
|
||||
end;}
|
||||
end;
|
||||
end;
|
||||
Result := HitTestResultBehavior.Stop;
|
||||
end;
|
||||
|
||||
|
||||
|
|
@ -728,13 +720,40 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function ObjectsIntersectPL(o: ObjectWPF): List<ObjectWPF>;
|
||||
begin
|
||||
hitResultsList.Clear();
|
||||
|
||||
VisualTreeHelper.HitTest(host, nil,
|
||||
MyHitTestResult2,
|
||||
new GeometryHitTestParameters(o.GetGeometry));
|
||||
|
||||
Result := new List<ObjectWPF>;
|
||||
foreach var a in hitResultsList do
|
||||
begin
|
||||
var aa := a as FrameworkElement;
|
||||
if (aa<>o.ob) and Objects.d.ContainsKey(aa) then
|
||||
Result.Add(Objects.d[aa])
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
type ObHelper = auto class
|
||||
o1,o2: ObjectWPF;
|
||||
function f: boolean := ObjectsIntersectP(o1,o2);
|
||||
end;
|
||||
|
||||
type OLHelper = auto class
|
||||
o: ObjectWPF;
|
||||
function f: List<ObjectWPF> := ObjectsIntersectPL(o);
|
||||
end;
|
||||
|
||||
|
||||
function ObjectsIntersect(o1,o2: ObjectWPF)
|
||||
:= Invoke&<boolean>(ObHelper.Create(o1,o2).f);
|
||||
|
||||
function IntersectionList(Self: ObjectWPF): List<ObjectWPF>; extensionmethod
|
||||
:= Invoke&<List<ObjectWPF>>(OLHelper.Create(Self).f);
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
function GraphWindowTypeGetLeftP: real;
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Reference in a new issue