From 487afd243e55de56d45be70fbe7c9d7056d6b777 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Mon, 19 Aug 2024 10:53:29 +0200 Subject: [PATCH] * DefineProperties can have dot in name. --- rtl/objpas/classes/reader.inc | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/rtl/objpas/classes/reader.inc b/rtl/objpas/classes/reader.inc index 3e4cd247d9..2c81de34dc 100644 --- a/rtl/objpas/classes/reader.inc +++ b/rtl/objpas/classes/reader.inc @@ -1132,7 +1132,6 @@ begin while not EndOfList do ReadProperty(Instance); ReadListEnd; - { Read children } SavedOwner := Owner; SavedParent := Parent; @@ -1196,13 +1195,29 @@ begin end; function TReader.ReadSingle: Single; +var + vt : TValueType; begin - if FDriver.NextValue = vaSingle then - begin + vt:=FDriver.NextValue; + Case vt of + vaSingle : + begin FDriver.ReadValue; Result := FDriver.ReadSingle; - end else + end; + vaDouble : + begin + FDriver.ReadValue; + Result := FDriver.ReadDouble; + end; + vaExtended : + begin + FDriver.ReadValue; + Result := FDriver.ReadFloat; + end; + else Result := ReadInteger; + end; end; {$endif} @@ -1419,12 +1434,11 @@ begin break; end; DotPos := NextPos + 1; - PropInfo := GetPropInfo(Instance.ClassInfo, FPropName); if not Assigned(PropInfo) then begin - if not HandleMissingProperty(true) then exit; + if not HandleMissingProperty(true) then Exit; if not Assigned(PropInfo) then - PropertyError; + Break; // Defineproperties deserves a shot. end; if PropInfo^.PropType^.Kind = tkClass then @@ -1449,6 +1463,12 @@ begin else begin FCanHandleExcepts := False; + if Instance=aInstance then + begin + // Use case: + // DefineProperty('Size.X',proc1,proc2,True) + FPropName:=Path; + end; Instance.DefineProperties(Self); FCanHandleExcepts := True; if Length(FPropName) > 0 then begin