Incompatible Types: ´String´ e ´Enumeration´

Delphi

30/03/2006

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?


Host

Host

Curtidas 0

Respostas

Uhkra

Uhkra

30/03/2006

Uma solução é vc fazer
Str:=TTpCam.TipoCam

case TTpCam.TipoCam of
CCorPrimer:str:=´alguma coisa´;
...
end;


GOSTEI 0
Michael

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:

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

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);


GOSTEI 0
Host

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);


GOSTEI 0
Michael

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


GOSTEI 0
Host

Host

30/03/2006

Poxa foi mal , errei no digitar seu nome..... Michael obrigado!


GOSTEI 0
POSTAR