Kaynağa Gözat

Merge branch 'develop'

Unknown 6 yıl önce
ebeveyn
işleme
c0327b6bba

+ 25 - 62
Quick.Config.Provider.Json.pas

@@ -5,9 +5,9 @@
   Unit        : Quick.Config.Provider.Json
   Description : Save config to JSON file
   Author      : Kike Pérez
-  Version     : 1.2
+  Version     : 1.4
   Created     : 21/10/2017
-  Modified    : 07/04/2018
+  Modified    : 10/12/2018
 
   This file is part of QuickLib: https://github.com/exilon/QuickLib
 
@@ -41,18 +41,13 @@ uses
   Quick.Files,
   {$ENDIF}
   Rtti,
-  {$IF DEFINED(DELPHIRX102_UP) AND DEFINED(MSWINDOWS)}
-    System.JSON.Types,
-    System.JSON.Serializers,
+  Quick.Json.Serializer,
+  {$IFDEF FPC}
+  fpjson,
+  fpjsonrtti,
   {$ELSE}
-    Quick.Json.Serializer,
-    {$IFDEF FPC}
-    fpjson,
-    fpjsonrtti,
-    {$ELSE}
-    Rest.Json.Types,
-    System.JSON,
-    {$ENDIF}
+  Rest.Json.Types,
+  System.JSON,
   {$ENDIF}
   Quick.Config;
 
@@ -71,7 +66,6 @@ type
 
 implementation
 
-
 constructor TAppConfigJsonProvider<T>.Create(var cConfig : T);
 begin
   inherited Create(cConfig);
@@ -97,30 +91,15 @@ begin
     json := TStringList.Create;
     try
       json.LoadFromFile(fFilename);
-      {$IF DEFINED(DELPHIRX102_UP) AND DEFINED(MSWINDOWS)}
-        Serializer := TJsonSerializer.Create;
-        try
-          if TAppConfig(cConfig).DateTimeZone = TDateTimeZone.tzLocal then
-          begin
-            Serializer.DateTimeZoneHandling := TJsonDateTimeZoneHandling.Local;
-            Serializer.DateFormatHandling := TJsonDateFormatHandling.FormatSettings;
-          end
-          else Serializer.DateTimeZoneHandling := TJsonDateTimeZoneHandling.Utc;
-          NewObj := Serializer.Deserialize<T>(json.Text);
-        finally
-          Serializer.Free;
-        end;
-      {$ELSE}
-        serializer := TJsonSerializer.Create(slPublishedProperty);
-        try
-          //Streamer.Options := Streamer.Options + [jsoDateTimeAsString ,jsoUseFormatString];
-          //Streamer.DateTimeFormat := 'yyyy-mm-dd"T"hh:mm:ss.zz';
-          serializer.JsonToObject(cConfig,json.Text);
-          Exit;
-        finally
-          serializer.Free;
-        end;
-      {$ENDIF}
+      serializer := TJsonSerializer.Create(slPublishedProperty);
+      try
+        //Streamer.Options := Streamer.Options + [jsoDateTimeAsString ,jsoUseFormatString];
+        //Streamer.DateTimeFormat := 'yyyy-mm-dd"T"hh:mm:ss.zz';
+        serializer.JsonToObject(cConfig,json.Text);
+        Exit;
+      finally
+        serializer.Free;
+      end;
       if Assigned(cConfig) then cConfig.Free;
       cConfig := NewObj;
     finally
@@ -144,30 +123,14 @@ begin
   try
     json := TStringList.Create;
     try
-      {$IF DEFINED(DELPHIRX102_UP) AND DEFINED(MSWINDOWS)}
-        Serializer := TJsonSerializer.Create;
-        try
-          if TAppConfig(cConfig).JsonIndent then Serializer.Formatting := TJsonFormatting.Indented;
-          if TAppConfig(cConfig).DateTimeZone = TDateTimeZone.tzLocal then
-          begin
-            Serializer.DateTimeZoneHandling := TJsonDateTimeZoneHandling.Local;
-            Serializer.DateFormatHandling := TJsonDateFormatHandling.FormatSettings;
-          end
-          else Serializer.DateTimeZoneHandling := TJsonDateTimeZoneHandling.Utc;
-          json.Text := Serializer.Serialize<T>(cConfig);
-        finally
-          Serializer.Free;
-        end;
-      {$ELSE}
-        serializer := TJsonSerializer.Create(TSerializeLevel.slPublishedProperty);
-        try
-          //Streamer.Options := Streamer.Options + [jsoDateTimeAsString ,jsoUseFormatString];
-          //Streamer.DateTimeFormat := 'yyyy-mm-dd"T"hh:mm:ss.zz';
-          json.Text := serializer.ObjectToJson(cConfig);
-        finally
-          serializer.Free;
-        end;
-      {$ENDIF}
+      serializer := TJsonSerializer.Create(TSerializeLevel.slPublishedProperty);
+      try
+        //Streamer.Options := Streamer.Options + [jsoDateTimeAsString ,jsoUseFormatString];
+        //Streamer.DateTimeFormat := 'yyyy-mm-dd"T"hh:mm:ss.zz';
+        json.Text := serializer.ObjectToJson(cConfig,True);
+      finally
+        serializer.Free;
+      end;
       json.SaveToFile(fFilename);
       {$IFDEF FPC}
       //TAppConfig(cConfig).LastSaved := Now;

+ 47 - 48
Quick.Config.Provider.Registry.pas

@@ -7,7 +7,7 @@
   Author      : Kike Pérez
   Version     : 1.2
   Created     : 21/10/2017
-  Modified    : 07/04/2018
+  Modified    : 12/09/2018
 
   This file is part of QuickLib: https://github.com/exilon/QuickLib
 
@@ -37,14 +37,16 @@ uses
   Windows,
   SysUtils,
   Registry,
+  Quick.Json.Serializer,
   {$IFDEF DELPHIRX102_UP}
     System.Json,
     System.JSON.Types,
-    System.JSON.Serializers,
   {$ELSE}
     {$IFDEF FPC}
-    fpjson,   jsonparser,
-    fpjsonrtti,
+    fpjson,
+    //jsonparser,
+    //fpjsonrtti,
+    Quick.Json.fpc.Compatibility,
     {$ELSE}
     Rest.Json.Types,
     System.JSON,
@@ -56,8 +58,6 @@ uses
 
 type
 
-  TJSONValue = TJSONData;
-
   TAppConfigRegistryProvider<T : class> = class(TAppConfigProviderBase<T>)
   private
     fRootKey : HKEY;
@@ -108,51 +108,31 @@ end;
 
 procedure TAppConfigRegistryProvider<T>.Load(var cConfig : T);
 var
-  {$IFDEF DELPHIRX102_UP}
-    Serializer: TJsonSerializer;
-  {$ENDIF}
-  {$IFDEF FPC}
-    streamer : TJSONDeStreamer;
-  {$ENDIF}
+  Serializer: TJsonSerializer;
   json : string;
   newObj : T;
 begin
   fRegConfig.Access := KEY_READ;
   fRegConfig.RootKey := fRootKey;
-  if (not fRegConfig.KeyExists('\Software\' + fMainKey))
-      and (CreateIfNotExists) then
+  if not fRegConfig.KeyExists('\Software\' + fMainKey) then
   begin
-    Save(cConfig);
+    if CreateIfNotExists then Save(cConfig)
+    else
+    begin
+      cConfig := InitObject;
+      Exit;
+    end;
   end;
   RegistryToJson(json);
-  {$IFDEF DELPHIRX102_UP}
-    Serializer := TJsonSerializer.Create;
-    try
-      Serializer.Formatting := TJsonFormatting.Indented;
-      if TAppConfig(cConfig).DateTimeZone = TDateTimeZone.tzLocal then
-      begin
-        Serializer.DateTimeZoneHandling := TJsonDateTimeZoneHandling.Local;
-        Serializer.DateFormatHandling := TJsonDateFormatHandling.FormatSettings;
-      end
-      else Serializer.DateTimeZoneHandling := TJsonDateTimeZoneHandling.Utc;
-      newObj := Serializer.Deserialize<T>(json);
-    finally
-      Serializer.Free;
-    end;
-  {$ELSE}
-    {$IFDEF FPC}
-    streamer := TJSONDeStreamer.Create(nil);
-    try
-      //Streamer.Options := Streamer. .Options + [jsoDateTimeAsString ,jsoUseFormatString];
-      Streamer.DateTimeFormat := 'yyyy-mm-dd"T"hh:mm:ss.zz';
-      Streamer.JsonToObject(json,NewObj);
-    finally
-      Streamer.Free;
-    end;
-    {$ELSE}
-    TJson.JsonToObject(newObj,TJSONObject(TJSONObject.ParseJSONValue(json)));
-    {$ENDIF}
-  {$ENDIF}
+  serializer := TJsonSerializer.Create(slPublishedProperty);
+  try
+    //Streamer.Options := Streamer.Options + [jsoDateTimeAsString ,jsoUseFormatString];
+    //Streamer.DateTimeFormat := 'yyyy-mm-dd"T"hh:mm:ss.zz';
+    serializer.JsonToObject(cConfig,json);
+    Exit;
+  finally
+    serializer.Free;
+  end;
   if Assigned(cConfig) then cConfig.Free;
   cConfig := newObj;
 end;
@@ -193,26 +173,41 @@ begin
       raise EAppConfig.Create('Can''t create key');
     end;
 
+    {$IFNDEF FPC}
     jValue := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StrJson),0) as TJSONValue;
+    {$ELSE}
+    jValue := TJSONObject.ParseJSONValue(StrJson) as TJSONValue;
+    {$ENDIF}
     try
       if IsSimpleJsonValue(jValue) then
       begin
+        {$IFNDEF FPC}
         AddRegValue(aCurrentKey,TJSONPair(jValue).JsonString.ToString.DeQuotedString('"'),TJSONPair(jValue).JsonValue);
+        {$ELSE}
+        AddRegValue(aCurrentKey,TJSONPair(jValue).JsonString.DeQuotedString('"'),TJSONPair(jValue).JsonValue);
+        {$ENDIF}
       end
+      {$IFNDEF FPC}
       else if jValue is TJSONObject then
+      {$ELSE}
+      else if jvalue.JSONType = jtObject then
+      {$ENDIF}
       begin
         aCount := TJSONObject(jValue).Count;
         for i := 0 to aCount - 1 do
           ProcessPairWrite(aCurrentKey,TJSONObject(jValue),i);
       end
+      {$IFNDEF FPC}
       else if jValue is TJSONArray then
+      {$ELSE}
+      else if jValue.JSONType = jtArray then
+      {$ENDIF}
       begin
         aCount := TJSONArray(jValue).Count;
         for i := 0 to aCount - 1 do
           ProcessElementWrite(aCurrentKey,TJSONArray(jValue),i,aCount);
       end
-      else
-        raise EAppConfig.Create('Error Saving config to Registry');
+      else raise EAppConfig.Create('Error Saving config to Registry');
       Result := True;
     finally
        jValue.Free;
@@ -341,8 +336,12 @@ class function TAppConfigRegistryProvider<T>.IsSimpleJsonValue(v: TJSONValue): B
 begin
   Result := (v is TJSONNumber)
     or (v is TJSONString)
+    {$IFNDEF FPC}
     or (v is TJSONTrue)
     or (v is TJSONFalse)
+    {$ELSE}
+    or (v is TJsonBool)
+    {$ENDIF}
     or (v is TJSONNull);
 end;
 
@@ -491,7 +490,7 @@ begin
 
   if IsSimpleJsonValue(jPair.JsonValue) then
   begin
-    AddRegValue(cCurrentKey,jPair.JsonString.ToString,jPair.JsonValue);
+    AddRegValue(cCurrentKey,jPair.JsonString{$IFNDEF FPC}.ToString{$ENDIF},jPair.JsonValue);
     Exit;
   end;
 
@@ -499,13 +498,13 @@ begin
   begin
     aCount := TJSONObject(jPair.JsonValue).Count;
     for i := 0 to aCount - 1 do
-      ProcessPairWrite(cCurrentKey + '\' + jPair.JsonString.ToString.DeQuotedString('"'), TJSONObject(jPair.JsonValue),i);
+      ProcessPairWrite(cCurrentKey + '\' + jPair.JsonString{$IFNDEF FPC}.ToString{$ENDIF}.DeQuotedString('"'), TJSONObject(jPair.JsonValue),i);
   end
   else if jPair.JsonValue is TJSONArray then
   begin
     aCount := TJSONArray(jPair.JsonValue).Count;
     for i := 0 to aCount - 1 do
-      ProcessElementWrite(cCurrentKey + '\' + jPair.JsonString.ToString.DeQuotedString('"'), TJSONArray(jPair.JsonValue),i,aCount);
+      ProcessElementWrite(cCurrentKey + '\' + jPair.JsonString{$IFNDEF FPC}.ToString{$ENDIF}.DeQuotedString('"'), TJSONArray(jPair.JsonValue),i,aCount);
   end
   else raise EAppConfig.Create('Error Saving config to Registry');
 end;

+ 28 - 72
Quick.Config.pas

@@ -5,9 +5,9 @@
   Unit        : Quick.Config
   Description : Load/Save config from/to JSON file
   Author      : Kike Pérez
-  Version     : 1.4
+  Version     : 1.5
   Created     : 26/01/2017
-  Modified    : 07/04/2018
+  Modified    : 10/12/2018
 
   This file is part of QuickLib: https://github.com/exilon/QuickLib
 
@@ -37,23 +37,17 @@ uses
   Classes,
   SysUtils,
   Rtti,
-  {$IF DEFINED(DELPHIRX102_UP) AND DEFINED(MSWINDOWS)}
-    DBXJSON,
-    JSON.Types,
-    JSON.Serializers;
+  {$IFDEF FPC}
+  fpjson,
+  jsonparser,
+  fpjsonrtti,
+  Quick.Json.Serializer;
   {$ELSE}
-    {$IFDEF FPC}
-    fpjson,
-    jsonparser,
-    fpjsonrtti,
-    Quick.Json.Serializer;
-    {$ELSE}
-    Quick.Json.Serializer,
-    DBXJSON,
-    System.JSON,
-    Rest.Json.Types,
-    Rest.Json;
-    {$ENDIF}
+  Quick.Json.Serializer,
+  DBXJSON,
+  System.JSON,
+  Rest.Json.Types,
+  Rest.Json;
   {$ENDIF}
 
 type
@@ -202,31 +196,12 @@ var
 begin
   Result := '';
   try
-    {$IF DEFINED(DELPHIRX102_UP) AND DEFINED(MSWINDOWS)}
-      Serializer := TJsonSerializer.Create;
-      try
-        Serializer.Formatting := TJsonFormatting.Indented;
-        if JsonIndent then Serializer.Formatting := TJsonFormatting.Indented;
-        if DateTimeZone = TDateTimeZone.tzLocal then
-        begin
-          Serializer.DateTimeZoneHandling := TJsonDateTimeZoneHandling.Local;
-          Serializer.DateFormatHandling := TJsonDateFormatHandling.FormatSettings;
-        end
-        else Serializer.DateTimeZoneHandling := TJsonDateTimeZoneHandling.Utc;
-        Result := Serializer.Serialize<TObject>(Self);
-      finally
-        Serializer.Free;
-      end;
-    {$ELSE}
-      serializer := TJsonSerializer.Create(slPublishedProperty);
-      try
-        //Streamer.Options := Streamer.Options + [jsoDateTimeAsString ,jsoUseFormatString];
-        //Streamer.DateTimeFormat := 'yyyy-mm-dd"T"hh:mm:ss.zz';
-        Result := serializer.ObjectToJSON(Self);
-      finally
-        serializer.Free;
-      end;
-    {$ENDIF}
+    serializer := TJsonSerializer.Create(slPublishedProperty);
+    try
+      Result := serializer.ObjectToJSON(Self,True);
+    finally
+      serializer.Free;
+    end;
   except
     on e : Exception do raise Exception.Create(e.Message);
   end;
@@ -237,35 +212,16 @@ var
   Serializer : TJsonSerializer;
 begin
   try
-    {$IF DEFINED(DELPHIRX102_UP) AND DEFINED(MSWINDOWS)}
-      Serializer := TJsonSerializer.Create;
-      try
-        Serializer.Formatting := TJsonFormatting.Indented;
-        if JsonIndent then Serializer.Formatting := TJsonFormatting.Indented;
-        if DateTimeZone = TDateTimeZone.tzLocal then
-        begin
-          Serializer.DateTimeZoneHandling := TJsonDateTimeZoneHandling.Local;
-          Serializer.DateFormatHandling := TJsonDateFormatHandling.FormatSettings;
-        end
-        else Serializer.DateTimeZoneHandling := TJsonDateTimeZoneHandling.Utc;
-        Self := Serializer.Deserialize<TAppConfig>(json);
-      finally
-        Serializer.Free;
-      end;
-    {$ELSE}
-      serializer := TJsonSerializer.Create(slPublishedProperty);
-      try
-        //Streamer.Options := Streamer. .Options + [jsoDateTimeAsString ,jsoUseFormatString];
-        //Streamer.DateTimeFormat := 'yyyy-mm-dd"T"hh:mm:ss.zz';
-        {$IF NOT DEFINED(FPC) AND DEFINED(ANDROID)}
-        serializer.JsonToObject(Self,json);
-        {$ELSE}
-        Self := TAppConfig(serializer.JsonToObject(Self,json));
-        {$ENDIF}
-      finally
-        serializer.Free;
-      end;
-    {$ENDIF}
+    serializer := TJsonSerializer.Create(slPublishedProperty);
+    try
+      {$IF NOT DEFINED(FPC) AND DEFINED(ANDROID)}
+      serializer.JsonToObject(Self,json);
+      {$ELSE}
+      Self := TAppConfig(serializer.JsonToObject(Self,json));
+      {$ENDIF}
+    finally
+      serializer.Free;
+    end;
   except
     on e : Exception do raise Exception.Create(e.Message);
   end;

+ 20 - 12
Quick.Json.Serializer.pas

@@ -520,7 +520,11 @@ begin
       case aProperty.PropertyType.TypeKind of
         tkDynArray :
           begin
+            {$IFNDEF FPC}
             jArray := TJSONObject.ParseJSONValue(member.ToJSON) as TJSONArray;
+            {$ELSE}
+            jArray := TJSONArray(TJSONObject.ParseJSONValue(member.ToJSON));
+            {$ENDIF}
             try
               {$IFNDEF FPC}
               aProperty.SetValue(aObject,DeserializeDynArray(aProperty.PropertyType.Handle,Result,jArray));
@@ -1172,21 +1176,25 @@ begin
           try
             pArr := GetDynArrayProp(aObject,aPropertyName);
             TValue.Make(@pArr,propinfo.PropType, rValue);
-            if rValue.IsArray then len := rValue.GetArrayLength;
-            for i := 0 to len - 1 do
+            if rValue.IsArray then
             begin
-              rItemValue := rValue.GetArrayElement(i);
-              jPair := Serialize(aPropertyName,rItemValue);
-              try
-                //jValue := TJsonValue(jPair.JsonValue.Clone);
-                jValue := jPair.JsonValue;
-                jArray.Add(jValue);
-                //jPair.JsonValue.Owned := False;
-              finally
-                jPair.Free;
-                //jValue.Owned := True;
+              len := rValue.GetArrayLength;
+              for i := 0 to len - 1 do
+              begin
+                rItemValue := rValue.GetArrayElement(i);
+                jPair := Serialize(aPropertyName,rItemValue);
+                try
+                  //jValue := TJsonValue(jPair.JsonValue.Clone);
+                  jValue := jPair.JsonValue;
+                  jArray.Add(jValue);
+                  //jPair.JsonValue.Owned := False;
+                finally
+                  jPair.Free;
+                  //jValue.Owned := True;
+                end;
               end;
             end;
+
             Result.JsonValue := jArray;
           finally
             DynArrayClear(pArr,propinfo.PropType);

+ 2 - 8
quicklib.lpk

@@ -96,16 +96,10 @@
         <UnitName Value="Quick.JSONRecord"/>
       </Item19>
     </Files>
-    <RequiredPkgs Count="3">
+    <RequiredPkgs Count="1">
       <Item1>
-        <PackageName Value="jcl"/>
-      </Item1>
-      <Item2>
         <PackageName Value="indylaz"/>
-      </Item2>
-      <Item3>
-        <PackageName Value="FCL"/>
-      </Item3>
+      </Item1>
     </RequiredPkgs>
     <UsageOptions>
       <UnitPath Value="$(PkgOutDir)"/>

+ 20 - 12
samples/delphi/QuickConfig/ConfigToFileAndRegistry/Main.dfm

@@ -3,8 +3,8 @@ object MainForm: TMainForm
   Left = 0
   Top = 0
   Caption = 'Quick Config Demo'
-  ClientHeight = 347
-  ClientWidth = 523
+  ClientHeight = 493
+  ClientWidth = 720
   Color = clBtnFace
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
@@ -14,49 +14,57 @@ object MainForm: TMainForm
   OldCreateOrder = False
   OnClose = FormClose
   OnCreate = FormCreate
+  DesignSize = (
+    720
+    493)
   PixelsPerInch = 96
   TextHeight = 13
   object meInfo: TMemo
     Left = 8
     Top = 8
-    Width = 507
-    Height = 273
+    Width = 704
+    Height = 419
+    Anchors = [akLeft, akTop, akRight, akBottom]
     ReadOnly = True
     ScrollBars = ssBoth
     TabOrder = 0
   end
   object btnLoadJson: TButton
-    Left = 208
-    Top = 287
+    Left = 407
+    Top = 433
     Width = 145
     Height = 25
+    Anchors = [akRight, akBottom]
     Caption = 'Load From Json'
     TabOrder = 1
     OnClick = btnLoadJsonClick
   end
   object btnSaveJson: TButton
-    Left = 359
-    Top = 287
+    Left = 558
+    Top = 433
     Width = 154
     Height = 25
+    Anchors = [akRight, akBottom]
     Caption = 'Save To Json'
     TabOrder = 2
     OnClick = btnSaveJsonClick
   end
   object btnLoadRegistry: TButton
-    Left = 208
-    Top = 318
+    Left = 407
+    Top = 464
     Width = 145
     Height = 25
+    Anchors = [akRight, akBottom]
     Caption = 'Load From Registry'
     TabOrder = 3
     OnClick = btnLoadRegistryClick
   end
   object SaveRegistry: TButton
-    Left = 359
-    Top = 318
+    Left = 558
+    Top = 464
     Width = 154
     Height = 25
+    Anchors = [akRight, akBottom]
     Caption = 'Save To Registry'
     TabOrder = 4
     OnClick = SaveRegistryClick

+ 9 - 4
samples/delphi/QuickConfig/ConfigToFileAndRegistry/Main.pas

@@ -35,8 +35,12 @@ type
   end;
 
   TWorker = class
-    Name : string;
-    Active : Boolean;
+  private
+    fName : string;
+    fActive : Boolean;
+  published
+    property Name : string read fName write fName;
+    property Active : Boolean read fActive write fActive;
   end;
 
   TMyConfig = class(TAppConfig)
@@ -60,11 +64,11 @@ type
     property ModifyDate : TDateTime read fModifyDate write fModifyDate;
     property Title : string read fTitle write fTitle;
     property SessionName : string read fSessionName write fSessionName;
-  public
     property WorkList : TObjectList<TWorker> read fWorkList write fWorkList;
+  public
     constructor Create; override;
     destructor Destroy; override;
-    procedure DefaultValues;
+    procedure DefaultValues; override;
   end;
 
   TMainForm = class(TForm)
@@ -163,6 +167,7 @@ function  TMainForm.TestConfig(cConfig1, cConfig2 : TMyConfig) : Boolean;
 var
   i : Integer;
 begin
+  Result := False;
   try
     Assert(cConfig1.LastFilename = cConfig2.LastFilename);
     for i := Low(cConfig1.Sizes) to High(cConfig1.Sizes) do

+ 59 - 6
samples/delphi/QuickConfig/ConfigToFileAndRegistry/QuickConfigDemo.dproj

@@ -1,7 +1,7 @@
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
     <PropertyGroup>
         <ProjectGuid>{CDEBAD41-A241-457F-96FD-E367D8E3B0AE}</ProjectGuid>
-        <ProjectVersion>18.3</ProjectVersion>
+        <ProjectVersion>18.5</ProjectVersion>
         <FrameworkType>VCL</FrameworkType>
         <MainSource>QuickConfigDemo.dpr</MainSource>
         <Base>True</Base>
@@ -101,11 +101,11 @@
     <PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
         <DCC_RemoteDebug>false</DCC_RemoteDebug>
         <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
-        <AppEnableHighDPI>true</AppEnableHighDPI>
+        <AppDPIAwarenessMode>PerMonitor</AppDPIAwarenessMode>
     </PropertyGroup>
     <PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
         <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
-        <AppEnableHighDPI>true</AppEnableHighDPI>
+        <AppDPIAwarenessMode>PerMonitor</AppDPIAwarenessMode>
     </PropertyGroup>
     <PropertyGroup Condition="'$(Cfg_2)'!=''">
         <DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
@@ -115,11 +115,11 @@
     </PropertyGroup>
     <PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
         <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
-        <AppEnableHighDPI>true</AppEnableHighDPI>
+        <AppDPIAwarenessMode>PerMonitor</AppDPIAwarenessMode>
     </PropertyGroup>
     <PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
         <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
-        <AppEnableHighDPI>true</AppEnableHighDPI>
+        <AppDPIAwarenessMode>PerMonitor</AppDPIAwarenessMode>
     </PropertyGroup>
     <ItemGroup>
         <DelphiCompile Include="$(MainSource)">
@@ -178,7 +178,6 @@
                         <Operation>1</Operation>
                     </Platform>
                     <Platform Name="Win32">
-                        <RemoteDir>Contents\MacOS</RemoteDir>
                         <Operation>0</Operation>
                     </Platform>
                 </DeployClass>
@@ -188,6 +187,12 @@
                         <Operation>1</Operation>
                     </Platform>
                 </DeployClass>
+                <DeployClass Name="AndroidFileProvider">
+                    <Platform Name="Android">
+                        <RemoteDir>res\xml</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
                 <DeployClass Name="AndroidGDBServer">
                     <Platform Name="Android">
                         <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
@@ -224,6 +229,12 @@
                         <Operation>1</Operation>
                     </Platform>
                 </DeployClass>
+                <DeployClass Name="AndroidSplashStylesV21">
+                    <Platform Name="Android">
+                        <RemoteDir>res\values-v21</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
                 <DeployClass Name="Android_DefaultAppIcon">
                     <Platform Name="Android">
                         <RemoteDir>res\drawable</RemoteDir>
@@ -302,6 +313,11 @@
                         <Operation>1</Operation>
                         <Extensions>.framework</Extensions>
                     </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                        <Extensions>.framework</Extensions>
+                    </Platform>
                     <Platform Name="Win32">
                         <Operation>0</Operation>
                     </Platform>
@@ -324,6 +340,11 @@
                         <Operation>1</Operation>
                         <Extensions>.dylib</Extensions>
                     </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                        <Extensions>.dylib</Extensions>
+                    </Platform>
                     <Platform Name="Win32">
                         <Operation>0</Operation>
                         <Extensions>.dll;.bpl</Extensions>
@@ -347,6 +368,11 @@
                         <Operation>1</Operation>
                         <Extensions>.dylib</Extensions>
                     </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                        <Extensions>.dylib</Extensions>
+                    </Platform>
                     <Platform Name="Win32">
                         <Operation>0</Operation>
                         <Extensions>.bpl</Extensions>
@@ -369,6 +395,10 @@
                         <RemoteDir>Contents\Resources\StartUp\</RemoteDir>
                         <Operation>0</Operation>
                     </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>Contents\Resources\StartUp\</RemoteDir>
+                        <Operation>0</Operation>
+                    </Platform>
                     <Platform Name="Win32">
                         <Operation>0</Operation>
                     </Platform>
@@ -505,23 +535,41 @@
                         <Operation>1</Operation>
                     </Platform>
                 </DeployClass>
+                <DeployClass Name="ProjectOSXDebug">
+                    <Platform Name="OSX64">
+                        <RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
                 <DeployClass Name="ProjectOSXEntitlements">
                     <Platform Name="OSX32">
                         <RemoteDir>..\</RemoteDir>
                         <Operation>1</Operation>
                     </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>..\</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
                 </DeployClass>
                 <DeployClass Name="ProjectOSXInfoPList">
                     <Platform Name="OSX32">
                         <RemoteDir>Contents</RemoteDir>
                         <Operation>1</Operation>
                     </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>Contents</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
                 </DeployClass>
                 <DeployClass Name="ProjectOSXResource">
                     <Platform Name="OSX32">
                         <RemoteDir>Contents\Resources</RemoteDir>
                         <Operation>1</Operation>
                     </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>Contents\Resources</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
                 </DeployClass>
                 <DeployClass Required="true" Name="ProjectOutput">
                     <Platform Name="Android">
@@ -544,6 +592,10 @@
                         <RemoteDir>Contents\MacOS</RemoteDir>
                         <Operation>1</Operation>
                     </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
                     <Platform Name="Win32">
                         <Operation>0</Operation>
                     </Platform>
@@ -583,6 +635,7 @@
                 <ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
                 <ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/>
                 <ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
+                <ProjectRoot Platform="OSX64" Name="$(PROJECTNAME).app"/>
                 <ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
             </Deployment>
             <Platforms>

BIN
samples/delphi/QuickConfig/ConfigToFileAndRegistry/QuickConfigDemo.res


+ 384 - 226
samples/delphi/QuickConfig/ConfigToFileAndRegistry/Win64/Debug/Config.json

@@ -1,231 +1,389 @@
 {
-  "Sizes": [
-    23,
-    11,
-    554,
-    12,
-    34,
-    29,
-    77,
-    30,
-    48,
-    59,
-    773,
-    221,
-    98,
-    3,
-    22,
-    983,
-    122,
-    231,
-    433,
-    12,
-    31,
-    987
-  ],
-  "LastFilename": "library.txt",
-  "WindowPos": {
-    "PosX": 480,
-    "PosY": 0
-  },
-  "History": [
-    {
-      "Id": 0,
-      "Priority": 0,
-      "Redundant": true
-    },
-    {
-      "Id": 1,
-      "Priority": 0,
-      "Redundant": true
-    },
-    {
-      "Id": 2,
-      "Priority": 0,
-      "Redundant": true
-    },
-    {
-      "Id": 3,
-      "Priority": 0,
-      "Redundant": true
-    },
-    {
-      "Id": 4,
-      "Priority": 0,
-      "Redundant": true
-    },
-    {
-      "Id": 5,
-      "Priority": 0,
-      "Redundant": true
-    },
-    {
-      "Id": 6,
-      "Priority": 0,
-      "Redundant": true
-    },
-    {
-      "Id": 7,
-      "Priority": 0,
-      "Redundant": true
-    },
-    {
-      "Id": 8,
-      "Priority": 0,
-      "Redundant": true
-    },
-    {
-      "Id": 9,
-      "Priority": 0,
-      "Redundant": true
-    },
-    {
-      "Id": 10,
-      "Priority": 0,
-      "Redundant": true
-    },
-    {
-      "Id": 11,
-      "Priority": 0,
-      "Redundant": true
-    },
-    {
-      "Id": 12,
-      "Priority": 0,
-      "Redundant": true
-    },
-    {
-      "Id": 13,
-      "Priority": 0,
-      "Redundant": true
+    "Sizes": [
+        23,
+        11,
+        554,
+        12,
+        34,
+        29,
+        77,
+        30,
+        48,
+        59,
+        773,
+        221,
+        98,
+        3,
+        22,
+        983,
+        122,
+        231,
+        433,
+        12,
+        31,
+        987
+    ],
+    "LastFilename": "library.txt",
+    "WindowPos": {
+        "PosX": 480,
+        "PosY": 0
     },
-    {
-      "Id": 14,
-      "Priority": 0,
-      "Redundant": true
+    "History": [
+        {
+            "Id": 0,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 1,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 2,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 3,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 4,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 5,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 6,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 7,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 8,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 9,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 10,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 11,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 12,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 13,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 14,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 15,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 0,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 1,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 2,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 3,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 4,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 5,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 6,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 7,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 8,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 9,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 10,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 11,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 12,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 13,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 14,
+            "Priority": "msLow",
+            "Redundant": true
+        },
+        {
+            "Id": 15,
+            "Priority": "msLow",
+            "Redundant": true
+        }
+    ],
+    "Complex": {
+        "Id": 1371232,
+        "Priority": "msHigh",
+        "Redundant": false
     },
-    {
-      "Id": 15,
-      "Priority": 0,
-      "Redundant": true
+    "ModifyDate": "2018-12-10T14:09:02.245Z",
+    "Title": "a fresh title",
+    "SessionName": "First Session",
+    "WorkList": {
+        "List": [
+            {
+                "Name": "Process 0",
+                "Active": false
+            },
+            {
+                "Name": "Process 1",
+                "Active": false
+            },
+            {
+                "Name": "Process 2",
+                "Active": false
+            },
+            {
+                "Name": "Process 3",
+                "Active": false
+            },
+            {
+                "Name": "Process 4",
+                "Active": false
+            },
+            {
+                "Name": "Process 5",
+                "Active": false
+            },
+            {
+                "Name": "Process 6",
+                "Active": false
+            },
+            {
+                "Name": "Process 7",
+                "Active": false
+            },
+            {
+                "Name": "Process 8",
+                "Active": false
+            },
+            {
+                "Name": "Process 9",
+                "Active": false
+            },
+            {
+                "Name": "Process 10",
+                "Active": false
+            },
+            {
+                "Name": "Process 11",
+                "Active": false
+            },
+            {
+                "Name": "Process 12",
+                "Active": false
+            },
+            {
+                "Name": "Process 13",
+                "Active": false
+            },
+            {
+                "Name": "Process 14",
+                "Active": false
+            },
+            {
+                "Name": "Process 15",
+                "Active": false
+            },
+            {
+                "Name": "Process 16",
+                "Active": false
+            },
+            {
+                "Name": "Process 17",
+                "Active": false
+            },
+            {
+                "Name": "Process 18",
+                "Active": false
+            },
+            {
+                "Name": "Process 19",
+                "Active": false
+            },
+            {
+                "Name": "Process 20",
+                "Active": false
+            },
+            {
+                "Name": "Process 21",
+                "Active": false
+            },
+            {
+                "Name": "Process 22",
+                "Active": false
+            },
+            {
+                "Name": "Process 0",
+                "Active": false
+            },
+            {
+                "Name": "Process 1",
+                "Active": false
+            },
+            {
+                "Name": "Process 2",
+                "Active": false
+            },
+            {
+                "Name": "Process 3",
+                "Active": false
+            },
+            {
+                "Name": "Process 4",
+                "Active": false
+            },
+            {
+                "Name": "Process 5",
+                "Active": false
+            },
+            {
+                "Name": "Process 6",
+                "Active": false
+            },
+            {
+                "Name": "Process 7",
+                "Active": false
+            },
+            {
+                "Name": "Process 8",
+                "Active": false
+            },
+            {
+                "Name": "Process 9",
+                "Active": false
+            },
+            {
+                "Name": "Process 10",
+                "Active": false
+            },
+            {
+                "Name": "Process 11",
+                "Active": false
+            },
+            {
+                "Name": "Process 12",
+                "Active": false
+            },
+            {
+                "Name": "Process 13",
+                "Active": false
+            },
+            {
+                "Name": "Process 14",
+                "Active": false
+            },
+            {
+                "Name": "Process 15",
+                "Active": false
+            },
+            {
+                "Name": "Process 16",
+                "Active": false
+            },
+            {
+                "Name": "Process 17",
+                "Active": false
+            },
+            {
+                "Name": "Process 18",
+                "Active": false
+            },
+            {
+                "Name": "Process 19",
+                "Active": false
+            },
+            {
+                "Name": "Process 20",
+                "Active": false
+            },
+            {
+                "Name": "Process 21",
+                "Active": false
+            },
+            {
+                "Name": "Process 22",
+                "Active": false
+            }
+        ]
     }
-  ],
-  "Complex": {
-    "Id": 35907504,
-    "Priority": 2,
-    "Redundant": false
-  },
-  "ModifyDate": "08/14/2018 00:45:53",
-  "Title": "a fresh title",
-  "SessionName": "First Session",
-  "WorkList": {
-    "FOwnsObjects": true,
-    "FListHelper": {
-      "FCount": 23
-    },
-    "FItems": [
-      {
-        "Name": "Process 0",
-        "Active": false
-      },
-      {
-        "Name": "Process 1",
-        "Active": false
-      },
-      {
-        "Name": "Process 2",
-        "Active": false
-      },
-      {
-        "Name": "Process 3",
-        "Active": false
-      },
-      {
-        "Name": "Process 4",
-        "Active": false
-      },
-      {
-        "Name": "Process 5",
-        "Active": false
-      },
-      {
-        "Name": "Process 6",
-        "Active": false
-      },
-      {
-        "Name": "Process 7",
-        "Active": false
-      },
-      {
-        "Name": "Process 8",
-        "Active": false
-      },
-      {
-        "Name": "Process 9",
-        "Active": false
-      },
-      {
-        "Name": "Process 10",
-        "Active": false
-      },
-      {
-        "Name": "Process 11",
-        "Active": false
-      },
-      {
-        "Name": "Process 12",
-        "Active": false
-      },
-      {
-        "Name": "Process 13",
-        "Active": false
-      },
-      {
-        "Name": "Process 14",
-        "Active": false
-      },
-      {
-        "Name": "Process 15",
-        "Active": false
-      },
-      {
-        "Name": "Process 16",
-        "Active": false
-      },
-      {
-        "Name": "Process 17",
-        "Active": false
-      },
-      {
-        "Name": "Process 18",
-        "Active": false
-      },
-      {
-        "Name": "Process 19",
-        "Active": false
-      },
-      {
-        "Name": "Process 20",
-        "Active": false
-      },
-      {
-        "Name": "Process 21",
-        "Active": false
-      },
-      {
-        "Name": "Process 22",
-        "Active": false
-      },
-      null,
-      null,
-      null,
-      null,
-      null,
-      null,
-      null,
-      null,
-      null
-    ],
-    "FComparer": {}
-  }
 }

+ 32 - 5
samples/delphi/QuickJsonSerializer/JsonSerializer.dproj

@@ -4,10 +4,10 @@
         <MainSource>JsonSerializer.dpr</MainSource>
         <Base>True</Base>
         <Config Condition="'$(Config)'==''">Debug</Config>
-        <TargetedPlatforms>1025</TargetedPlatforms>
+        <TargetedPlatforms>1027</TargetedPlatforms>
         <AppType>Application</AppType>
         <FrameworkType>FMX</FrameworkType>
-        <ProjectVersion>18.4</ProjectVersion>
+        <ProjectVersion>18.5</ProjectVersion>
         <Platform Condition="'$(Platform)'==''">Win32</Platform>
     </PropertyGroup>
     <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
@@ -59,6 +59,12 @@
         <Cfg_1>true</Cfg_1>
         <Base>true</Base>
     </PropertyGroup>
+    <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win64)'!=''">
+        <Cfg_1_Win64>true</Cfg_1_Win64>
+        <CfgParent>Cfg_1</CfgParent>
+        <Cfg_1>true</Cfg_1>
+        <Base>true</Base>
+    </PropertyGroup>
     <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
         <Cfg_2>true</Cfg_2>
         <CfgParent>Base</CfgParent>
@@ -94,6 +100,12 @@
         <Cfg_2>true</Cfg_2>
         <Base>true</Base>
     </PropertyGroup>
+    <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win64)'!=''">
+        <Cfg_2_Win64>true</Cfg_2_Win64>
+        <CfgParent>Cfg_2</CfgParent>
+        <Cfg_2>true</Cfg_2>
+        <Base>true</Base>
+    </PropertyGroup>
     <PropertyGroup Condition="'$(Base)'!=''">
         <DCC_E>false</DCC_E>
         <DCC_F>false</DCC_F>
@@ -209,6 +221,12 @@
     <PropertyGroup Condition="'$(Base_Win64)'!=''">
         <UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
         <UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150>
+        <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace>
+        <BT_BuildType>Debug</BT_BuildType>
+        <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
+        <VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
+        <VerInfo_Locale>1033</VerInfo_Locale>
+        <Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
     </PropertyGroup>
     <PropertyGroup Condition="'$(Cfg_1)'!=''">
         <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
@@ -218,7 +236,11 @@
     </PropertyGroup>
     <PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
         <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
-        <AppEnableHighDPI>true</AppEnableHighDPI>
+        <AppDPIAwarenessMode>PerMonitor</AppDPIAwarenessMode>
+    </PropertyGroup>
+    <PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
+        <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
+        <AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
     </PropertyGroup>
     <PropertyGroup Condition="'$(Cfg_2)'!=''">
         <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
@@ -239,8 +261,13 @@
     </PropertyGroup>
     <PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
         <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
-        <AppEnableHighDPI>true</AppEnableHighDPI>
         <VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
+        <AppDPIAwarenessMode>PerMonitor</AppDPIAwarenessMode>
+    </PropertyGroup>
+    <PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
+        <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
+        <AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
+        <VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
     </PropertyGroup>
     <ItemGroup>
         <DelphiCompile Include="$(MainSource)">
@@ -277,7 +304,7 @@
                 <Platform value="iOSSimulator">False</Platform>
                 <Platform value="OSX32">False</Platform>
                 <Platform value="Win32">True</Platform>
-                <Platform value="Win64">False</Platform>
+                <Platform value="Win64">True</Platform>
             </Platforms>
         </BorlandProject>
         <ProjectFileVersion>12</ProjectFileVersion>

BIN
samples/delphi/QuickJsonSerializer/JsonSerializer.res


+ 21 - 1
samples/fpc/QuickConfig/ConfigToFileAndRegistry/Config.json

@@ -1 +1,21 @@
-{ "Title" : "hola", "SessionName" : "", "Sizes" : [], "LastFilename" : "", "History" : [], "Complex" : { "Id" : 1, "Priority" : "msMed", "Redundant" : true }, "ModifyDate" : "2018-07-19T00:40:06.764Z " }
+{
+     "Title" :  "hola",
+     "SessionName" :  "Session01",
+     "Sizes" :  [
+        1,
+         2,
+         3,
+         4,
+         5,
+         6,
+         7
+    ],
+     "LastFilename" :  "C:\\library.txt",
+     "History" :  [    ],
+     "Complex" :  {
+         "Id" :  1,
+         "Priority" :  "msMed",
+         "Redundant" :  true 
+    },
+     "ModifyDate" :  "2018-12-11T22:25:29.250Z " 
+}

+ 1 - 1
samples/fpc/QuickConfig/ConfigToFileAndRegistry/backup/umain.lfm

@@ -1,7 +1,7 @@
 object Form1: TForm1
   Left = 379
   Height = 457
-  Top = 229
+  Top = 254
   Width = 592
   Caption = 'Form1'
   ClientHeight = 457

+ 10 - 3
samples/fpc/QuickConfig/ConfigToFileAndRegistry/backup/umain.pas

@@ -9,7 +9,9 @@ uses
   Quick.Config,
   Quick.Config.Provider.Registry,
   Generics.Collections,
+  {$IFDEF FPC}
   registry,
+  {$ENDIF}
   Quick.Config.Provider.Json;
 
 type
@@ -52,12 +54,14 @@ type
     property hola : Integer read fhola write fhola;
   end;
 
+  TArraySizes = array of Integer;
+
   TMyConfig = class(TAppConfig)
   private
     fTitle : string;
     fHidden : Boolean;
     fSessionName: string;
-    fSizes : TArray<Integer>;
+    fSizes : TArraySizes;
     fLastFilename : string;
     fWindowPos : TWinPos;
     fHistory : TArray<TProcessType>;
@@ -67,12 +71,12 @@ type
   public
     constructor Create; override;
     destructor Destroy; override;
-    procedure DefaultValues;
+    procedure DefaultValues; override;
     property Hidden : Boolean read fHidden write fHidden;
   published
     property Title : string read fTitle write fTitle;
     property SessionName : string read fSessionName write fSessionName;
-    property Sizes : TArray<Integer> read fSizes write fSizes;
+    property Sizes : TArraySizes read fSizes write fSizes;
     property LastFilename : string read fLastFilename write fLastFilename;
     //property WindowPos : TWinPos read fWindowPos write fWindowPos;
     property History : TArray<TProcessType> read fHistory write fHistory;
@@ -211,6 +215,9 @@ var
   processtype : TProcessType;
 begin
   cConfig.Title := 'hola';
+  cConfig.SessionName := 'Session01';
+  cConfig.LastFileName := 'C:\library.txt';
+  cConfig.Sizes := [1,2,3,4,5,6,7];
   cConfig.Complex := TProcessType.Create;
   cConfig.Complex.Id := 1;
   cConfig.Complex.Redundant := True;

BIN
samples/fpc/QuickConfig/ConfigToFileAndRegistry/lib/i386-win32/QuickConfig.or


+ 1 - 1
samples/fpc/QuickConfig/ConfigToFileAndRegistry/lib/i386-win32/umain.lfm

@@ -1,7 +1,7 @@
 object Form1: TForm1
   Left = 379
   Height = 457
-  Top = 229
+  Top = 230
   Width = 592
   Caption = 'Form1'
   ClientHeight = 457

+ 1 - 1
samples/fpc/QuickConfig/ConfigToFileAndRegistry/umain.lfm

@@ -1,7 +1,7 @@
 object Form1: TForm1
   Left = 379
   Height = 457
-  Top = 229
+  Top = 230
   Width = 592
   Caption = 'Form1'
   ClientHeight = 457

+ 8 - 3
samples/fpc/QuickConfig/ConfigToFileAndRegistry/umain.pas

@@ -54,12 +54,14 @@ type
     property hola : Integer read fhola write fhola;
   end;
 
+  TArraySizes = array of Integer;
+
   TMyConfig = class(TAppConfig)
   private
     fTitle : string;
     fHidden : Boolean;
     fSessionName: string;
-    fSizes : TArray<Integer>;
+    fSizes : TArraySizes;
     fLastFilename : string;
     fWindowPos : TWinPos;
     fHistory : TArray<TProcessType>;
@@ -69,12 +71,12 @@ type
   public
     constructor Create; override;
     destructor Destroy; override;
-    procedure DefaultValues;
+    procedure DefaultValues; override;
     property Hidden : Boolean read fHidden write fHidden;
   published
     property Title : string read fTitle write fTitle;
     property SessionName : string read fSessionName write fSessionName;
-    property Sizes : TArray<Integer> read fSizes write fSizes;
+    property Sizes : TArraySizes read fSizes write fSizes;
     property LastFilename : string read fLastFilename write fLastFilename;
     //property WindowPos : TWinPos read fWindowPos write fWindowPos;
     property History : TArray<TProcessType> read fHistory write fHistory;
@@ -213,6 +215,9 @@ var
   processtype : TProcessType;
 begin
   cConfig.Title := 'hola';
+  cConfig.SessionName := 'Session01';
+  cConfig.LastFileName := 'C:\library.txt';
+  cConfig.Sizes := [1,2,3,4,5,6,7];
   cConfig.Complex := TProcessType.Create;
   cConfig.Complex.Id := 1;
   cConfig.Complex.Redundant := True;

+ 1 - 0
samples/fpc/QuickJsonSerializer/JsonSerializer.lpi

@@ -39,6 +39,7 @@
         <Filename Value="main.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="Form1"/>
+        <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
       </Unit1>
       <Unit2>

+ 1 - 1
samples/fpc/QuickJsonSerializer/main.pas

@@ -154,7 +154,7 @@ implementation
 
 procedure TForm1.btnToJsonClick(Sender: TObject);
 begin
-  Memo1.Text := serializer.ObjectToJson(User);
+  Memo1.Text := serializer.ObjectToJson(User,True);
   btnFromJson.Enabled := True;
 end;