Incompatible Types: ´String´ e ´Enumeration´
Tenho a seguinte estrutura:
type TTipoCam=Record
TipoCam: (CCorPrimer, CCorBase, CCorFaixa);
end;
depois no seção public:
TTpCam: TTipoCam;
Para declarar defino :
TTpCam.TipoCam:=CCorPrimer
Mas se eu quizer jogar em uma variavel do tipo String
Str:=TTpCam.TipoCam
ñ da certo ele da a mensagem de erro:
Incompatible Types: ´String´ e ´Enumeration´
Alguem ja passou por isto, ou ñ tem como converter?
type TTipoCam=Record
TipoCam: (CCorPrimer, CCorBase, CCorFaixa);
end;
depois no seção public:
TTpCam: TTipoCam;
Para declarar defino :
TTpCam.TipoCam:=CCorPrimer
Mas se eu quizer jogar em uma variavel do tipo String
Str:=TTpCam.TipoCam
ñ da certo ele da a mensagem de erro:
Incompatible Types: ´String´ e ´Enumeration´
Alguem ja passou por isto, ou ñ tem como converter?
Host
Curtidas 0
Respostas
Uhkra
30/03/2006
Uma solução é vc fazer
Str:=TTpCam.TipoCam
case TTpCam.TipoCam of
CCorPrimer:str:=´alguma coisa´;
...
end;
Str:=TTpCam.TipoCam
case TTpCam.TipoCam of
CCorPrimer:str:=´alguma coisa´;
...
end;
GOSTEI 0
Michael
30/03/2006
Colega,
Até onde eu sei o Delphi só faz conversão implícita de dados do tipo [b:cafcf17be3]Variant[/b:cafcf17be3], mesmo assim apenas de alguns. O resto vc tem que converter manualmente. Não é possível passar um número para uma string e esperar que funcione.
Para converter um tipo enumerado para sua representação string, vc precisa usar [b:cafcf17be3]RTTI[/b:cafcf17be3], mais precisamente a função [b:cafcf17be3]GetEnumName[/b:cafcf17be3]. Mas para isso vc vai precisar criar o tipo enumerado fora do record. Veja abaixo:
A recíproca tbm é verdadeira, basta usar [b:cafcf17be3]GetEnumValue[/b:cafcf17be3].
[]´s
Até onde eu sei o Delphi só faz conversão implícita de dados do tipo [b:cafcf17be3]Variant[/b:cafcf17be3], mesmo assim apenas de alguns. O resto vc tem que converter manualmente. Não é possível passar um número para uma string e esperar que funcione.
Para converter um tipo enumerado para sua representação string, vc precisa usar [b:cafcf17be3]RTTI[/b:cafcf17be3], mais precisamente a função [b:cafcf17be3]GetEnumName[/b:cafcf17be3]. Mas para isso vc vai precisar criar o tipo enumerado fora do record. Veja abaixo:
uses TypInfo; type TTipoEnumerado = (teUm, teDois, teTres); ... var S: string; T: TTipoEnumerado; begin S := GetEnumName(TypeInfo(TTipoEnumerado), Ord(teDois)); ShowMessage(S); // S é igual a ´teDois´ end;
A recíproca tbm é verdadeira, basta usar [b:cafcf17be3]GetEnumValue[/b:cafcf17be3].
[]´s
GOSTEI 0
Host
30/03/2006
Type
TTipoCam: (CCorPrimer, CCorBase, CCorFaixa);
procedure TForm.LeTipoCamada(var CamName: String);
var
TpCam: TTipoCam;
begin
TpCam:=TTipoCam(GetEnumValue(TypeInfo(TTipoCam),CamName));
end;
Var
CorCamada: String;
Chamada da procedure
LeTipoCamada(CorCamada);
TTipoCam: (CCorPrimer, CCorBase, CCorFaixa);
procedure TForm.LeTipoCamada(var CamName: String);
var
TpCam: TTipoCam;
begin
TpCam:=TTipoCam(GetEnumValue(TypeInfo(TTipoCam),CamName));
end;
Var
CorCamada: String;
Chamada da procedure
LeTipoCamada(CorCamada);
GOSTEI 0
Host
30/03/2006
Michel seguindo seus passos ficou assim...
Type
TTipoCam: (CCorPrimer, CCorBase, CCorFaixa);
procedure TForm.LeTipoCamada(var CamName: String);
var
TpCam: TTipoCam;
begin
TpCam:=TTipoCam(GetEnumValue(TypeInfo(TTipoCam),CamName));
end;
Var
CorCamada: String;
Chamada da procedure
LeTipoCamada(CorCamada);
Type
TTipoCam: (CCorPrimer, CCorBase, CCorFaixa);
procedure TForm.LeTipoCamada(var CamName: String);
var
TpCam: TTipoCam;
begin
TpCam:=TTipoCam(GetEnumValue(TypeInfo(TTipoCam),CamName));
end;
Var
CorCamada: String;
Chamada da procedure
LeTipoCamada(CorCamada);
GOSTEI 0
Michael
30/03/2006
Michel não, [b:c10506aa28]Michael[/b:c10506aa28]. ;-)
É isso aí, só que vc não precisa passar [b:c10506aa28]CorCamada [/b:c10506aa28]com [b:c10506aa28]var[/b:c10506aa28].
[]´s
É isso aí, só que vc não precisa passar [b:c10506aa28]CorCamada [/b:c10506aa28]com [b:c10506aa28]var[/b:c10506aa28].
[]´s
GOSTEI 0
Host
30/03/2006
Poxa foi mal , errei no digitar seu nome..... Michael obrigado!
GOSTEI 0