Изменена реализация Halt - для ЦЗА uhfabrb gjl Цшт 11 (долго закрывалось окно)

Исправлена ошибка в XLSX.pas
Исправлена ошибка в AnimRotate в WPFObjects
Переупорядочены примеры
This commit is contained in:
Mikhalkovich Stanislav 2022-04-12 16:31:00 +03:00
parent 0380ad1450
commit e5b1dbdb95
46 changed files with 98 additions and 49 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "8";
public const string Build = "3";
public const string Revision = "3093";
public const string Revision = "3101";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=8
%REVISION%=3093
%REVISION%=3101
%COREVERSION%=3
%MAJOR%=3

View file

@ -1 +1 @@
3.8.3.3093
3.8.3.3101

View file

@ -1 +1 @@
!define VERSION '3.8.3.3093'
!define VERSION '3.8.3.3101'

View file

@ -8130,7 +8130,8 @@ end;
procedure Halt;
begin
Halt(ExitCode);
System.Diagnostics.Process.GetCurrentProcess.Kill;
//Halt(ExitCode);
end;
procedure Halt(exitCode: integer);
@ -10418,13 +10419,24 @@ end;
/// Разбивает последовательность на серии длины size
function Batch<T>(Self: sequence of T; size: integer): sequence of sequence of T; extensionmethod;
begin
Result := SeqWhile(Self, v -> v.Skip(size), v -> v.Count > 0).Select(v -> v.Take(size))
var buf := new List<T>;
foreach var elm in Self do begin
buf.Add(elm);
if buf.Count=size then begin
yield buf.ToArray;
buf.Clear
end;
end;
if buf.Count>0 then
yield buf.ToArray;
//Result := SeqWhile(Self, v -> v.Skip(size), v -> v.Count > 0).Select(v -> v.Take(size))
end;
/// Разбивает последовательность на серии длины size и применяет проекцию к каждой серии
function Batch<T, Res>(Self: sequence of T; size: integer; proj: Func<IEnumerable<T>, Res>): sequence of Res; extensionmethod;
begin
Result := SeqWhile(Self, v -> v.Skip(size), v -> v.Count > 0).Select(v -> v.Take(size)).Select(ss -> proj(ss));
//Result := SeqWhile(Self, v -> v.Skip(size), v -> v.Count > 0).Select(v -> v.Take(size)).Select(ss -> proj(ss));
Result := Self.Batch(size).Select(ss -> proj(ss));
end;
///--
@ -12568,7 +12580,7 @@ function NotDivs(Self,d: integer): boolean; extensionmethod := Self mod d <> 0;
function DivsAny(Self: integer; params a: array of integer): boolean; extensionmethod;
begin
Result := False;
for var i:=0 to a.High do
for var i:=0 to a.Length-1 do
if Self mod a[i] = 0 then
begin
Result := True;
@ -12580,7 +12592,7 @@ end;
function DivsAll(Self: integer; params a: array of integer): boolean; extensionmethod;
begin
Result := True;
for var i:=0 to a.High do
for var i:=0 to a.Length-1 do
if Self mod a[i] <> 0 then
begin
Result := False;

View file

@ -360,7 +360,7 @@ type
end;
procedure AnimRotateP(a,sec: real);
begin
var an := new DoubleAnimation(a, System.TimeSpan.FromSeconds(sec));
var an := new DoubleAnimation(a + rot.Angle, System.TimeSpan.FromSeconds(sec));
rot.BeginAnimation(RotateTransform.AngleProperty, an, HandoffBehavior.Compose);
end;
procedure AnimScaleP(a,sec: real);

View file

@ -8130,7 +8130,8 @@ end;
procedure Halt;
begin
Halt(ExitCode);
System.Diagnostics.Process.GetCurrentProcess.Kill;
//Halt(ExitCode);
end;
procedure Halt(exitCode: integer);
@ -10418,13 +10419,24 @@ end;
/// Разбивает последовательность на серии длины size
function Batch<T>(Self: sequence of T; size: integer): sequence of sequence of T; extensionmethod;
begin
Result := SeqWhile(Self, v -> v.Skip(size), v -> v.Count > 0).Select(v -> v.Take(size))
var buf := new List<T>;
foreach var elm in Self do begin
buf.Add(elm);
if buf.Count=size then begin
yield buf.ToArray;
buf.Clear
end;
end;
if buf.Count>0 then
yield buf.ToArray;
//Result := SeqWhile(Self, v -> v.Skip(size), v -> v.Count > 0).Select(v -> v.Take(size))
end;
/// Разбивает последовательность на серии длины size и применяет проекцию к каждой серии
function Batch<T, Res>(Self: sequence of T; size: integer; proj: Func<IEnumerable<T>, Res>): sequence of Res; extensionmethod;
begin
Result := SeqWhile(Self, v -> v.Skip(size), v -> v.Count > 0).Select(v -> v.Take(size)).Select(ss -> proj(ss));
//Result := SeqWhile(Self, v -> v.Skip(size), v -> v.Count > 0).Select(v -> v.Take(size)).Select(ss -> proj(ss));
Result := Self.Batch(size).Select(ss -> proj(ss));
end;
///--

View file

@ -360,7 +360,7 @@ type
end;
procedure AnimRotateP(a,sec: real);
begin
var an := new DoubleAnimation(a, System.TimeSpan.FromSeconds(sec));
var an := new DoubleAnimation(a + rot.Angle, System.TimeSpan.FromSeconds(sec));
rot.BeginAnimation(RotateTransform.AngleProperty, an, HandoffBehavior.Compose);
end;
procedure AnimScaleP(a,sec: real);

View file

@ -41,15 +41,39 @@ end;
function LoadSheet(path: string): array of array of string;
begin
var elms := Load(path);
var (LU,RD) := elms.Item['dimension'].GetAttribute('ref').Split(':').Sel(s->s.ToCR);
var dim := elms.Item['dimension'];
var LU, RD: (int, int);
if dim = nil then begin // собираем габариты таблицы
var (l, u) := (maxint, maxint);
var (r, d) := (-1, -1);
foreach var node: XmlNode in elms.Item['sheetData'].ChildNodes do
begin
foreach var cell: XmlNode in node.ChildNodes do
begin
var (i, j) := cell.Attributes.GetNamedItem('r').Value.ToCR;
l := min(l, i);
u := min(u, j);
r := max(r, i);
d := max(d, j);
end
end;
LU := (l, u);
RD := (r, d);
end else // готовые габариты из таблицы
(LU, RD) := dim.GetAttribute('ref').Split(':').Sel(s -> s.ToCR);
var (w, h) := (RD[1] - LU[1] + 1, RD[0] - LU[0] + 1);
var sheet: array of array of string;
setLength(sheet, h);
for var i := 0 to h - 1 do sheet[i] := new string[w];
foreach var node:XmlNode in elms.Item['sheetData'].ChildNodes do begin
foreach var cell:XmlNode in node.ChildNodes do begin
foreach var node: XmlNode in elms.Item['sheetData'].ChildNodes do
begin
foreach var cell: XmlNode in node.ChildNodes do
begin
var (i, j) := cell.Attributes.GetNamedItem('r').Value.ToCR;
i -= LU[0];
j -= LU[1];
var typ := cell.Attributes.GetNamedItem('t');
var st := cell.Attributes.GetNamedItem('s');
var shared := false;
@ -87,7 +111,8 @@ begin
elms := Load('xl/workbook.xml');
Result := new Dictionary<string, array of array of string>;
foreach var node:XmlNode in elms.Item['sheets'].ChildNodes do begin
foreach var node: XmlNode in elms.Item['sheets'].ChildNodes do
begin
var name := node.Attributes.GetNamedItem('name').Value;
var attrs := new List<string>;
foreach var attr: XmlAttribute in node.Attributes do