This commit is contained in:
1 parent
7fb9935770
commit
741a56552e
8 files changed
+397
-1
No files matched your search
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"schema": "kam-android-build/2",
|
||||||
|
"build_id": "20260915T073140Z-ae91dd89",
|
||||||
|
"status": "FAIL",
|
||||||
|
"cpu": "aarch64",
|
||||||
|
"abi": "arm64-v8a",
|
||||||
|
"application": {
|
||||||
|
"name": "kam_mobile",
|
||||||
|
"caption": "KaM Remake Mobile",
|
||||||
|
"package": "org.kammobile.kamremake",
|
||||||
|
"version": "0.4.0",
|
||||||
|
"version_code": 30,
|
||||||
|
"game_unit": "GameInitialize"
|
||||||
|
},
|
||||||
|
"upstream_commit": "962fb850324b79bbe5480e1c2087d98f83a60917",
|
||||||
|
"resource_count": 1,
|
||||||
|
"compile": {
|
||||||
|
"status": "FAIL",
|
||||||
|
"exit_code": 1
|
||||||
|
},
|
||||||
|
"package": {
|
||||||
|
"status": "NOT_RUN",
|
||||||
|
"exit_code": null
|
||||||
|
},
|
||||||
|
"package_metadata": null,
|
||||||
|
"error": "/work/vendor/kam_remake/src/utils/io/KM_IoXML.pas(11,5) Fatal: Can't find unit laz2_DOM used by KM_IoXML"
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
$ adb version
|
||||||
|
Android Debug Bridge version 1.0.41
|
||||||
|
Version 35.0.0-11411520
|
||||||
|
Installed as /usr/lib/android-sdk/platform-tools/adb
|
||||||
|
Running on Linux 6.8.0-139-generic (x86_64)
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
project service: diagnostic_report_export
|
||||||
|
source: /work/build/20260915T073140Z-ae91dd89/application/android_services/diagnostic_report_export
|
||||||
|
castle destination: /usr/local/castle-engine/tools/build-tool/data/android/services/diagnostic_report_export
|
||||||
|
status: staged
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
$ castle-engine --os=android --cpu=aarch64 --compiler=fpc --mode=debug compile
|
||||||
|
Compiling project "kam_mobile" for OS / CPU "android / aarch64" in mode "debug".
|
||||||
|
FPC executing...
|
||||||
|
Free Pascal Compiler version 3.2.2 [2026/08/04] for aarch64
|
||||||
|
Copyright (c) 1993-2021 by Florian Klaempfl and others
|
||||||
|
/work/vendor/kam_remake/src/common/KM_CommonTypes.pas(79,57) Note: Values in enumeration types have to be ascending
|
||||||
|
/work/port-source/kam_remake/src/common/KM_CommonClasses.pas(601,3) Note: Local variable "Encoding" not used
|
||||||
|
/work/port-source/kam_remake/src/common/KM_CommonClasses.pas(1519,22) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
|
||||||
|
/work/port-source/kam_remake/src/common/KM_CommonClasses.pas(1528,42) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
|
||||||
|
/work/port-source/kam_remake/src/common/KM_CommonClasses.pas(1654,49) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
|
||||||
|
/work/port-source/kam_remake/src/common/KM_CommonClasses.pas(1680,33) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
|
||||||
|
/work/port-source/kam_remake/src/common/KM_CommonClasses.pas(1690,18) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
|
||||||
|
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(81,30) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
|
||||||
|
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(131,32) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
|
||||||
|
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(403,3) Note: Local variable "ErrorStr" not used
|
||||||
|
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(447,46) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "RawByteString"
|
||||||
|
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(461,49) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
|
||||||
|
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(462,73) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
|
||||||
|
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(463,52) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
|
||||||
|
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(527,3) Note: Local variable "sl" not used
|
||||||
|
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(556,44) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
|
||||||
|
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(564,10) Warning: Function result does not seem to be set
|
||||||
|
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(594,10) Warning: Function result does not seem to be set
|
||||||
|
/work/vendor/kam_remake/src/KM_Log.pas(146,42) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "RawByteString"
|
||||||
|
/work/vendor/kam_remake/src/KM_Log.pas(148,45) Warning: Implicit string type conversion from "RawByteString" to "UnicodeString"
|
||||||
|
/work/vendor/kam_remake/src/KM_Log.pas(151,45) Warning: Implicit string type conversion from "RawByteString" to "UnicodeString"
|
||||||
|
/work/vendor/kam_remake/src/KM_Log.pas(151,50) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
|
||||||
|
/work/vendor/kam_remake/src/KM_Log.pas(305,30) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
|
||||||
|
/work/vendor/kam_remake/src/KM_Log.pas(305,76) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
|
||||||
|
/work/vendor/kam_remake/src/KM_Log.pas(358,3) Note: Local variable "txt" is assigned but never used
|
||||||
|
/work/vendor/kam_remake/src/KM_Log.pas(480,27) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
|
||||||
|
/work/vendor/kam_remake/src/KM_Log.pas(480,35) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
|
||||||
|
/work/vendor/kam_remake/src/KM_Log.pas(602,66) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
|
||||||
|
/work/vendor/kam_remake/src/common/KM_Lists.pas(87,46) Warning: Implicit string type conversion with potential data loss from "WideString" to "AnsiString"
|
||||||
|
/work/vendor/kam_remake/src/common/KM_Lists.pas(105,22) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
|
||||||
|
/work/vendor/kam_remake/src/utils/io/KM_IoXML.pas(11,5) Fatal: Can't find unit laz2_DOM used by KM_IoXML
|
||||||
|
Fatal: Compilation aborted
|
||||||
|
Error: /usr/local/fpclazarus/3.2.2/fpc/bin/ppcrossa64 returned an error exitcode
|
||||||
|
Exception "Exception":
|
||||||
|
Failed to compile
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
$ java -version
|
||||||
|
openjdk version "21.0.12" 2026-07-21
|
||||||
|
OpenJDK Runtime Environment (build 21.0.12+8-1-24.04-Ubuntu)
|
||||||
|
OpenJDK 64-Bit Server VM (build 21.0.12+8-1-24.04-Ubuntu, mixed mode, sharing)
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"castle": {
|
||||||
|
"status": "NOT_INSTALLED"
|
||||||
|
},
|
||||||
|
"fpc": {
|
||||||
|
"status": "NOT_INSTALLED"
|
||||||
|
},
|
||||||
|
"java": {
|
||||||
|
"status": "PASS",
|
||||||
|
"exit_code": 0,
|
||||||
|
"seconds": 0.065,
|
||||||
|
"command": [
|
||||||
|
"java",
|
||||||
|
"-version"
|
||||||
|
],
|
||||||
|
"log": "build/20260915T073140Z-ae91dd89/logs/java-version.log",
|
||||||
|
"output": "$ java -version\nopenjdk version \"21.0.12\" 2026-07-21\nOpenJDK Runtime Environment (build 21.0.12+8-1-24.04-Ubuntu)\nOpenJDK 64-Bit Server VM (build 21.0.12+8-1-24.04-Ubuntu, mixed mode, sharing)\n"
|
||||||
|
},
|
||||||
|
"adb": {
|
||||||
|
"status": "PASS",
|
||||||
|
"exit_code": 0,
|
||||||
|
"seconds": 0.004,
|
||||||
|
"command": [
|
||||||
|
"adb",
|
||||||
|
"version"
|
||||||
|
],
|
||||||
|
"log": "build/20260915T073140Z-ae91dd89/logs/adb-version.log",
|
||||||
|
"output": "$ adb version\nAndroid Debug Bridge version 1.0.41\nVersion 35.0.0-11411520\nInstalled as /usr/lib/android-sdk/platform-tools/adb\nRunning on Linux 6.8.0-139-generic (x86_64)\n"
|
||||||
|
},
|
||||||
|
"paths": {},
|
||||||
|
"docker_image_lock": {
|
||||||
|
"image": "kambi/castle-engine-cloud-builds-tools@sha256:1a67fad233fe7a2e81ed5f750b548c9ef136ed7d36ec061ff96b2e5eb6eaa218",
|
||||||
|
"image_id": "sha256:1a67fad233fe7a2e81ed5f750b548c9ef136ed7d36ec061ff96b2e5eb6eaa218",
|
||||||
|
"resolved_from": "kambi/castle-engine-cloud-builds-tools:cge-unstable",
|
||||||
|
"locked_at": "20260908T161942Z",
|
||||||
|
"note": "Subsequent runs use this digest, never silently advance the tag."
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,7 +3,8 @@
|
|||||||
"adaptations": [
|
"adaptations": [
|
||||||
"src/utils/io/KM_FileIO.pas",
|
"src/utils/io/KM_FileIO.pas",
|
||||||
"src/common/KM_CommonClasses.pas",
|
"src/common/KM_CommonClasses.pas",
|
||||||
"src/settings/KM_GameSettings.pas"
|
"src/settings/KM_GameSettings.pas",
|
||||||
|
"src/utils/io/KM_IoXML.pas"
|
||||||
],
|
],
|
||||||
"source_paths": [
|
"source_paths": [
|
||||||
"code/resource"
|
"code/resource"
|
||||||
|
|||||||
@@ -0,0 +1,277 @@
|
|||||||
|
unit KM_IoXML;
|
||||||
|
{$I KaM_Remake.inc}
|
||||||
|
interface
|
||||||
|
uses
|
||||||
|
Classes, SysUtils,
|
||||||
|
DOM, XMLRead, XMLWrite;
|
||||||
|
|
||||||
|
type
|
||||||
|
TKMXmlDomDocument = TXMLDocument;
|
||||||
|
|
||||||
|
TKMXmlNode = class;
|
||||||
|
|
||||||
|
TKMSimpleVariant = record
|
||||||
|
private
|
||||||
|
// Internal representation is always a string
|
||||||
|
fValue: string;
|
||||||
|
public
|
||||||
|
class operator Implicit(const A: Boolean): TKMSimpleVariant;
|
||||||
|
class operator Implicit(const A: Cardinal): TKMSimpleVariant;
|
||||||
|
class operator Implicit(const A: Integer): TKMSimpleVariant;
|
||||||
|
class operator Implicit(const A: Single): TKMSimpleVariant;
|
||||||
|
class operator Implicit(const A: string): TKMSimpleVariant;
|
||||||
|
class operator Implicit(const A: TDateTime): TKMSimpleVariant;
|
||||||
|
function AsBoolean: Boolean; overload;
|
||||||
|
function AsBoolean(aDefault: Boolean): Boolean; overload;
|
||||||
|
function AsCardinal: Cardinal; overload;
|
||||||
|
function AsCardinal(aDefault: Cardinal): Cardinal; overload;
|
||||||
|
function AsDateTime: TDateTime;
|
||||||
|
function AsFloat: Single; overload;
|
||||||
|
function AsFloat(aDefault: Single): Single; overload;
|
||||||
|
function AsInteger: Integer; overload;
|
||||||
|
function AsInteger(aDefault: Integer): Integer; overload;
|
||||||
|
function AsString: string; overload;
|
||||||
|
function AsString(aDefault: string): string; overload;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TKMXmlDocument = class
|
||||||
|
private
|
||||||
|
fDocument: TKMXmlDomDocument;
|
||||||
|
fRoot: TKMXmlNode;
|
||||||
|
function GetText: String;
|
||||||
|
procedure SetText(const aText: string);
|
||||||
|
procedure ApplyDefaultSettings;
|
||||||
|
class constructor Create;
|
||||||
|
public
|
||||||
|
class var FDateFormat: TFormatSettings;
|
||||||
|
constructor Create(const aRoot: string = 'Root');
|
||||||
|
destructor Destroy; override;
|
||||||
|
property Root: TKMXmlNode read fRoot;
|
||||||
|
procedure LoadFromFile(const aFilename: string; aRoot: string = 'Root'; aReadOnly: Boolean = True);
|
||||||
|
procedure SaveToFile(const aFilename: string; aCompressed: Boolean = False);
|
||||||
|
property Text: string read GetText write SetText;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TKMXmlNode = class(TDOMElement)
|
||||||
|
protected
|
||||||
|
function GetAttrib(const AttrName: String): TKMSimpleVariant;
|
||||||
|
procedure SetAttrib(const AttrName: String; const AttrValue: TKMSimpleVariant);
|
||||||
|
function GetChildsCount: Integer;
|
||||||
|
function GetChild(const aIndex: Integer): TKMXmlNode;
|
||||||
|
public
|
||||||
|
function AddChild(const Name: String): TKMXmlNode;
|
||||||
|
function FindNode(const Name: String): TKMXmlNode; reintroduce;
|
||||||
|
function AddOrFindChild(const aChildNodeName: string): TKMXmlNode;
|
||||||
|
function HasAttribute(const AttrName: String): Boolean;
|
||||||
|
function HasChild(const Name: String): Boolean;
|
||||||
|
property Attributes[const AttrName: String]: TKMSimpleVariant read GetAttrib write SetAttrib;
|
||||||
|
property ChildsCount: Integer read GetChildsCount;
|
||||||
|
property Childs[const aIndex: Integer]: TKMXmlNode read GetChild;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
uses
|
||||||
|
Variants, DateUtils, StrUtils;
|
||||||
|
|
||||||
|
class constructor TKMXmlDocument.Create;
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TKMXmlDocument.Create(const aRoot: string = 'Root');
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
fDocument := TKMXmlDomDocument.Create;
|
||||||
|
ApplyDefaultSettings;
|
||||||
|
if aRoot <> '' then
|
||||||
|
begin
|
||||||
|
fRoot := TKMXmlNode(fDocument.CreateElement(aRoot));
|
||||||
|
fDocument.AppendChild(fRoot);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TKMXmlDocument.Destroy;
|
||||||
|
begin
|
||||||
|
fDocument.Free;
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TKMXmlDocument.ApplyDefaultSettings;
|
||||||
|
begin
|
||||||
|
fDocument.XMLVersion := '1.0';
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TKMXmlDocument.LoadFromFile(const aFilename: string; aRoot: string = 'Root'; aReadOnly: Boolean = True);
|
||||||
|
begin
|
||||||
|
if FileExists(aFilename) then
|
||||||
|
ReadXMLFile(fDocument, aFilename);
|
||||||
|
|
||||||
|
ApplyDefaultSettings;
|
||||||
|
fRoot := TKMXmlNode(fDocument.DocumentElement.FindNode(aRoot));
|
||||||
|
if fRoot = nil then
|
||||||
|
begin
|
||||||
|
fRoot := TKMXmlNode(fDocument.CreateElement(aRoot));
|
||||||
|
fDocument.AppendChild(fRoot);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TKMXmlDocument.SaveToFile(const aFilename: string; aCompressed: Boolean = False);
|
||||||
|
begin
|
||||||
|
ForceDirectories(ExtractFilePath(ExpandFileName(aFilename)));
|
||||||
|
WriteXMLFile(fDocument, aFilename);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMXmlDocument.GetText: String;
|
||||||
|
begin
|
||||||
|
// Not implemented
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TKMXmlDocument.SetText(const aText: string);
|
||||||
|
begin
|
||||||
|
// Not implemented
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMXmlNode.AddChild(const Name: String): TKMXmlNode;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMXmlNode.FindNode(const Name: String): TKMXmlNode;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMXmlNode.AddOrFindChild(const aChildNodeName: string): TKMXmlNode;
|
||||||
|
begin
|
||||||
|
if not HasChild(aChildNodeName) then
|
||||||
|
Result := AddChild(aChildNodeName)
|
||||||
|
else
|
||||||
|
Result := FindNode(aChildNodeName);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMXmlNode.HasAttribute(const AttrName: String): Boolean;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMXmlNode.HasChild(const Name: String): Boolean;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMXmlNode.GetAttrib(const AttrName: String): TKMSimpleVariant;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TKMXmlNode.SetAttrib(const AttrName: String; const AttrValue: TKMSimpleVariant);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMXmlNode.GetChildsCount: Integer;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMXmlNode.GetChild(const aIndex: Integer): TKMXmlNode;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMSimpleVariant.AsBoolean: Boolean;
|
||||||
|
begin
|
||||||
|
Result := StrToBool(fValue);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMSimpleVariant.AsBoolean(aDefault: Boolean): Boolean;
|
||||||
|
begin
|
||||||
|
Result := StrToBoolDef(fValue, aDefault);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMSimpleVariant.AsCardinal: Cardinal;
|
||||||
|
begin
|
||||||
|
Result := StrToInt64(fValue);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMSimpleVariant.AsCardinal(aDefault: Cardinal): Cardinal;
|
||||||
|
begin
|
||||||
|
Result := StrToInt64Def(fValue, aDefault);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMSimpleVariant.AsDateTime: TDateTime;
|
||||||
|
begin
|
||||||
|
Result := StrToDateTimeDef(fValue, 0, TKMXmlDocument.FDateFormat);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMSimpleVariant.AsFloat: Single;
|
||||||
|
var
|
||||||
|
str: string;
|
||||||
|
begin
|
||||||
|
str := StringReplace(fValue, '.', FormatSettings.DecimalSeparator, [rfReplaceAll]);
|
||||||
|
str := StringReplace(str, ',', FormatSettings.DecimalSeparator, [rfReplaceAll]);
|
||||||
|
Result := StrToFloat(str);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMSimpleVariant.AsFloat(aDefault: Single): Single;
|
||||||
|
var
|
||||||
|
str: string;
|
||||||
|
begin
|
||||||
|
str := StringReplace(fValue, '.', FormatSettings.DecimalSeparator, [rfReplaceAll]);
|
||||||
|
str := StringReplace(str, ',', FormatSettings.DecimalSeparator, [rfReplaceAll]);
|
||||||
|
Result := StrToFloatDef(str, aDefault);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMSimpleVariant.AsInteger: Integer;
|
||||||
|
begin
|
||||||
|
Result := StrToInt(fValue);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMSimpleVariant.AsInteger(aDefault: Integer): Integer;
|
||||||
|
begin
|
||||||
|
Result := StrToIntDef(fValue, aDefault);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMSimpleVariant.AsString: string;
|
||||||
|
begin
|
||||||
|
Result := fValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TKMSimpleVariant.AsString(aDefault: string): string;
|
||||||
|
begin
|
||||||
|
if fValue <> '' then
|
||||||
|
Result := fValue
|
||||||
|
else
|
||||||
|
Result := aDefault;
|
||||||
|
end;
|
||||||
|
|
||||||
|
class operator TKMSimpleVariant.Implicit(const A: Boolean): TKMSimpleVariant;
|
||||||
|
const
|
||||||
|
BOOL_STR: array [Boolean] of string = ('False', 'True');
|
||||||
|
begin
|
||||||
|
Result.fValue := BOOL_STR[A];
|
||||||
|
end;
|
||||||
|
|
||||||
|
class operator TKMSimpleVariant.Implicit(const A: Cardinal): TKMSimpleVariant;
|
||||||
|
begin
|
||||||
|
Result.fValue := '$' + IntToHex(A, 8);
|
||||||
|
end;
|
||||||
|
|
||||||
|
class operator TKMSimpleVariant.Implicit(const A: Integer): TKMSimpleVariant;
|
||||||
|
begin
|
||||||
|
Result.fValue := IntToStr(A);
|
||||||
|
end;
|
||||||
|
|
||||||
|
class operator TKMSimpleVariant.Implicit(const A: Single): TKMSimpleVariant;
|
||||||
|
var
|
||||||
|
str: string;
|
||||||
|
fs: TFormatSettings;
|
||||||
|
begin
|
||||||
|
fs.DecimalSeparator := '.';
|
||||||
|
str := FormatFloat('0.0000', A, fs);
|
||||||
|
Result.fValue := str;
|
||||||
|
end;
|
||||||
|
|
||||||
|
class operator TKMSimpleVariant.Implicit(const A: string): TKMSimpleVariant;
|
||||||
|
begin
|
||||||
|
Result.fValue := A;
|
||||||
|
end;
|
||||||
|
|
||||||
|
class operator TKMSimpleVariant.Implicit(const A: TDateTime): TKMSimpleVariant;
|
||||||
|
begin
|
||||||
|
Result.fValue := DateTimeToStr(A, TKMXmlDocument.FDateFormat);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
Reference in new issue
Block a user