[fpc-pascal] How do I take the float type of a field from a record?
silvioprog
silvioprog at gmail.com
Fri Dec 14 07:35:07 CET 2018
Hi.
Please consider the following code:
uses TypInfo;
type
TTestRecord = record
Member1: LongInt;
Member2: Double;
Member3: string;
Member4: Extended;
end;
var
F: PManagedField;
R: TTestRecord;
T, T2: PTypeData;
I: Integer;
begin
R := Default(TTestRecord);
T := GetTypeData(TypeInfo(R));
F := PManagedField(PByte(@T^.TotalFieldCount) + 4);
T2 := GetTypeData(F^.TypeRef);
for I := 0 to Pred(T^.TotalFieldCount) do
begin
if F^.TypeRef^.Kind = tkFloat then
WriteLn(F^.TypeRef^.Kind, ':', T2^.FloatType);
Inc(F);
end;
end.
it prints:
tkFloat:ftCurr
tkFloat:ftCurr
is there any chance to print it as below using FloatType?:
tkFloat:ftDouble
tkFloat:ftExtended
I solved it temporally using the following workaround (removing the last
four chars when the floating type is "Currency"):
WriteLn(F^.TypeRef^.Kind, ':tk', F^.TypeRef^.Name);
but I really would like to get the ordinal item instead of its name,
avoiding string handling.
Thank you!
--
Silvio Clécio
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20181214/3dbd77e3/attachment.html>
More information about the fpc-pascal
mailing list