Преглед изворни кода

[flexValue] better dispatch type conversion

Exilon пре 5 година
родитељ
комит
342392cd0b
1 измењених фајлова са 10 додато и 5 уклоњено
  1. 10 5
      Quick.Value.pas

+ 10 - 5
Quick.Value.pas

@@ -1,13 +1,13 @@
 { ***************************************************************************
 { ***************************************************************************
 
 
-  Copyright (c) 2016-2019 Kike Pérez
+  Copyright (c) 2016-2020 Kike Pérez
 
 
   Unit        : Quick.Value
   Unit        : Quick.Value
   Description : Autofree value record
   Description : Autofree value record
   Author      : Kike Pérez
   Author      : Kike Pérez
   Version     : 1.5
   Version     : 1.5
   Created     : 07/01/2019
   Created     : 07/01/2019
-  Modified    : 27/08/2019
+  Modified    : 20/04/2020
 
 
   This file is part of QuickLib: https://github.com/exilon/QuickLib
   This file is part of QuickLib: https://github.com/exilon/QuickLib
 
 
@@ -1058,6 +1058,11 @@ begin
 end;
 end;
 
 
 procedure TFlexValue.SetAsVariant(const Value: Variant);
 procedure TFlexValue.SetAsVariant(const Value: Variant);
+var
+  dispatch : IDispatch;
+  i : Int64;
+  b : Boolean;
+  f : Extended;
 begin
 begin
   Clear;
   Clear;
   case VarType(Value) and varTypeMask of
   case VarType(Value) and varTypeMask of
@@ -1076,9 +1081,9 @@ begin
     varDate      : SetAsDateTime(Value);
     varDate      : SetAsDateTime(Value);
     varOleStr    : SetAsString(Value);
     varOleStr    : SetAsString(Value);
     varDispatch  : begin
     varDispatch  : begin
-                     if TryVarAsType(Value,varInt64) then SetAsInt64(Value)
-                     else if TryVarAsType(Value,varDouble) then SetAsExtended(Value)
-                     else if TryVarAsType(Value,varBoolean) then SetAsBoolean(Value)
+                     if TryStrToInt64(Value,i) then SetAsInt64(i)
+                     else if TryStrToFloat(Value,f) then SetAsExtended(f)
+                     else if TryStrToBool(Value,b) then SetAsBoolean(b)
                      else if TryVarAsType(Value,varString) then SetAsString(Value)
                      else if TryVarAsType(Value,varString) then SetAsString(Value)
                      else
                      else
                      begin
                      begin