Może warianty zostaw na razie w spokoju i naucz się dobrze bawić wskaźnikami:
type
TShowAs = (saString, saInteger);
procedure ShowValue(APointer: Pointer; AShowAs: TShowAs);
begin
case AShowAs of
saString: WriteLn('String: ', String(APointer^));
saInteger: WriteLn('Integer: ', Integer(APointer^));
end;
end;
var
strValue: String = 'foo bald bar';
intValue: Integer = 20;
begin
ShowValue(@strValue, saString);
ShowValue(@intValue, saInteger);
end.
Wyjście konsoli będzie wyglądać prawidłowo:
String: foo bald bar
Integer: 20
Jeżeli już chcesz rzutować wartość spod wskaźnika na konkretny typ, to użyj wartości spod tego wskaźnika, czyli użyj operatora ^
np. przy wyświetlaniu.