Fórum Verificar tipo de variaveis #443586
21/05/2013
0
gostaria de saber se alguém sabe como eu posso verificar se uma variável é do tipo String, Integer, TDateTime, TTime, Double..
o porque disso, é q quero ter uma função que eu passe um parametro, sendo ele String, integer, TDateTime, TTime, Double.., e ele me retorne uma string..
teria como fazer essa verificação?
desde já agradeço
Marcos Stiborski
Curtir tópico
+ 0Posts
21/05/2013
Tiago Soares
function Tform3.GetVariantType(const v: variant): string;
begin
case TVarData(v).vType of
varEmpty: result := 'Empty';
varNull: result := 'Null';
varSmallInt: result := 'SmallInt';
varInteger: result := 'Integer';
varSingle: result := 'Single';
varDouble: result := 'Double';
varCurrency: result := 'Currency';
varDate: result := 'Date';
varOleStr: result := 'OleStr';
varDispatch: result := 'Dispatch';
varError: result := 'Error';
varBoolean: result := 'Boolean';
varVariant: result := 'Variant';
varUnknown: result := 'Unknown';
varByte: result := 'Byte';
varString: result := 'String';
varTypeMask: result := 'TypeMask';
varArray: result := 'Array';
varByRef: result := 'ByRef';
end;
end;
procedure TForm3.btn1Click(Sender: TObject);
var
teste : TDateTime;
begin
ShowMessage(GetVariantType(teste));
end;
Gostei + 0
21/05/2013
Marcos Stiborski
como vou verificar se é TDateTime ou TTime?
Gostei + 0
21/05/2013
Tiago Soares
como vou verificar se é TDateTime ou TTime?
Fiz o teste com TTime ele entende como Double
Gostei + 0
22/05/2013
Alex Constâncio
No seu lugar eu abordaria o problema de outra forma. Faria uma série de métodos overload, um para cada tipo que precisa de suporte, e em cada um faria uma implementação específica. Desta forma não haveria a necessidade de testes de tipagem, pois o compilador faria a seleção com base no tipo do parâmetro.
Em não sendo possível assim, então eu usaria a mesma estratégia usada pelo método Format, que recebe parâmetros sem tipagem específica e os avalia em tempo de execução. Dê uma olhada no fonte do Format para entender como funciona.
Alex
Gostei + 0
22/05/2013
Marcos Stiborski
como vou verificar se é TDateTime ou TTime?
Fiz o teste com TTime ele entende como Double
o meu problema eh esse, TDateTime e TTime são reconhecidos como double. e eu preciso diferenciar os dois..
No seu lugar eu abordaria o problema de outra forma. Faria uma série de métodos overload, um para cada tipo que precisa de suporte, e em cada um faria uma implementação específica. Desta forma não haveria a necessidade de testes de tipagem, pois o compilador faria a seleção com base no tipo do parâmetro.
Em não sendo possível assim, então eu usaria a mesma estratégia usada pelo método Format, que recebe parâmetros sem tipagem específica e os avalia em tempo de execução. Dê uma olhada no fonte do Format para entender como funciona.
Alex
Referente aos métodos overload, cai no caso do TDateTime, TTime e Double, o compilador manda sempre para o double.
pois esses tipos são tudo double.
vou dar uma olhada no format e ver se consigo achar uma solução..
muito obrigado.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)