Ir al contenido


Foto

Un tipo enumerado a string


  • Por favor identifícate para responder
5 respuestas en este tema

#1 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 30 abril 2009 - 04:18

Hola!

Estoy empezando de cero una aplicacion que con D7 ya funcionaba bien. Para no empezar con los lios de warnings y errores de cadenas la estoy empezando por completo con d2009 (jaja tampoco soy masoquista: copiar y pegar y evito muchas advertencias que si solo abro el .pas en la version nueva) Ya aparecieron algunas advertencias como el hecho de que pide que se cambie el codigo:



delphi
  1. if (strTemp[i] in ['0'..'9']) then
  2.           strID := strID + strTemp[i];



por algo asi CharIn.. (jeje no lo copie) pero ya se a que se refiere.

Bueno el tema es que los componentes de comunicacion serie que generalmente uso estan en una version Beta para d2009 y generan algunos problemas al momento de instalar y/o usarlos (ComPort y Apro) asi que opte por bajar la version trial de TMS Async32 para probar y tomar la desicion de comprarlo. Un pequeño problema me ha surgido ahi.

Por ejemplo para asignarle la velocidad de comunicacion se usa



delphi
  1. VaComm.Baudrate := br38400;



br38400 es un tipo enumerado llamado TVaBaudRate que consta de 16 posiciones (0..15)

Lo que quiero hacer (era bien facil con los otros componentes) es que en un panel de la barra de estado  (statusbar) se puedan escribir los ajustes que actualmente tiene el puerto VaComm. Algo asi:



delphi
  1. COM1,38400,None,1



para esto generalmente usaba un codigo como este:



delphi
  1. StatusBar.Panels[0].text := Format('COM%s',[IntToStr(ComPort.Port)] + ' ' + ComPort.BaudRate + ' ' + ComPort.Parity + ' ' + ComPort.StopBits;



Mi pregunta es como puedo tomar el indice de el typo enumerado por ejemplo en BaudRate del VaComm es decir algo asi:



delphi
  1. //Considerar que Baudrate es de tipo TVaBaudRate
  2. Velocidad := IntToStr(VaComm.BaudRate);
  3. //Yo esperaria que velocidad guarde un valor entre 0 y 15 o mejor aun el nombre correspondiente a ese indice br38400




Espero haberme explicado o si no, a lo mejor ya tengo el mal del marrano!!!  :p


  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 30 abril 2009 - 04:26

Espero haberme explicado o si no, a lo mejor ya tengo el mal del marrano!!! 



La neta??????? :D :D :D

A ver amigo, vamos por partes. En esta instrucción



delphi
  1. Velocidad := IntToStr(VaComm.BaudRate);



Que es lo que te muestra en Velocidad.

Salud OS


  • 0

#3 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 30 abril 2009 - 05:03

Espero haberme explicado o si no, a lo mejor ya tengo el mal del marrano!!! 



La neta??????? :D :D :D

A ver amigo, vamos por partes. En esta instrucción



delphi
  1. Velocidad := IntToStr(VaComm.BaudRate);



Que es lo que te muestra en Velocidad.

Salud OS


VaComm.BaudRate guarda el valor actual de velocidad en baudios que esta asignado al componente VaComm; para este caso, es un valor de br38400, el cual es un elemento de un tipo enumerado llamado TVaBaudRate.



delphi
  1. type
  2.   TvaBaudrate = (brUser, br110, br300........br256000);



el valor de VaComm.Baudrate se asigna en tiempo diseño (para este ejemplo estoy usando br38400 que es el elemento de indice 10 (0..15)

lo que quiero es leer en tiempo de ejecucion el valor de VaComm.BaudRate y asignalo a la variable Velocidad.



delphi
  1. Velocidad := VaComm.Baudrate;



Esa asignacion genera un error :

"Tipos incompatibles string y TVaBaudRate"

Espero haber sido mas claro... Oink, Oink,Oink


  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 30 abril 2009 - 05:33

Hola

Yo harí­a lo siguiente:

Creo una constante de esta forma



delphi
  1. const
  2.   {Baud Rate strings}
  3.   BaudRateStr : array[TvaBaudrate] of string =
  4.         ('User', '110', '300',....., '25600');



Y mando llamar el valor de esta forma



delphi
  1. Velocidad := BaudRateStr(VaComm.Baudrate);



Salud OS
  • 0

#5 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 30 abril 2009 - 05:53

Hurgando las profundidades de ComPort encontre que ellos estan haciendo lo mismo que posteaste. Solo que en en una funcion:



delphi
  1. function BaudRateToString(Baudrate: TBaudRate): string;
  2. const
  3.   BaudRateStrings: array[TBaudRate] of string = ('Custom', '110', '300', '600',
  4.     '1200', '2400', '4800', '9600', '14400', '19200', '38400', '56000', '57600',
  5.     '115200', '128000', '256000');
  6. begin
  7.   Result := BaudRateStrings[BaudRate];
  8. end;



Algo nuevo aprendi hoy!!
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 30 abril 2009 - 05:58

:D :D :D

Pues que copiones :p

Salud OS
  • 0




IP.Board spam blocked by CleanTalk.