Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Crear Tipos de Datos Propios? (https://www.clubdelphi.com/foros/showthread.php?t=62824)

jbautista 16-01-2009 01:26:16

Crear Tipos de Datos Propios?
 
Hola que tal, pues lo que quisiera saber (si se puede) es como definir tipos de datos proios... bueno, por ejemplo hace tiempo compre un componente (un Grid) que tiene un metodo:

AddButton(ACol, ARow, bw, bh: Integer; Caption: string; hal: TCellHalign; val: TCellValign);

En este metodo los primero parametros ACol, ARow, bw, bh: Integer; Caption: string; son de tipo predefinidos en Delphi, pero los siguientes son de la Clase del Componente (TCellHalign; val: TCellValign)

Al invocar al metodo lo tengo que hacer de la sig, manera:

grid1.AddButton(0,0,10,10,'Boton',haCenter,vaCenter)

En los dos ultimos parametros le tengo mandar forzosamente los tipos que me pide (haCenter,haLeft,vaCenter,etc)

Pues bueno yo quisiera hacer algo parecido en mi programa:

Tengo una Clase x, con un metodo llamado MueveRenglon
MueveRenglon(posicion:Boolean);
begin
if posicion = true then ...(Mueve
else if posicion = false then...(Mueve abajo)
end;
pero no quiero que al invocar al metodo de la clase desde el un Form le pasen directamente el valor boolean

p.e. Form.objetoDeClaseX.MueveRenglon(True)

me gustaria definir un tipo de dato pripio (como el caso que les puse arriba)
y que al invocar mi metodo de clase desde un form se haga de la sig. manera:

Form.objetoDeClaseX.MueveRenglon(cArriba)

y que mi metodo quedara definido
MueveRenglon(posicion:TPosicion);
begin
if posicion=cArriba then ...(Mueve arriba)
else
if
posicion=cAbajo then...(Mueve abajo)
end;

Como se declaran y usan lo tipos de datos propios (cArriba y cAbajo).

De antemano muchas gracias.

Buen Dia.

roman 16-01-2009 01:42:47

Lo puedes hacer con los llamados tipos enumerados:

Código Delphi [-]
type
  TPosicion = (cArriba, cAbajo);

Te recomiendo que leas la ayuda de delphi, la parte de Delphi Language guide|Data types, variables and constants.

// Saludos

Caro 16-01-2009 03:44:44

Hola jbautista, como te dice el amigo Román puedes definirte un tipo enumerado, en el cual colocas todos los posibles valores que puede tomar tu tipo (identificadores) y esos identificadores puedes utilizar en tu codigo como si fueran constantes.

Código Delphi [-]
//Definimos nuestro tipo
type
  TPosicion = (cArriba, cAbajo, cIzquierda, cDerecha);
..............
.............. 
//En tu procedimiento
MueveRenglon(posicion:TPosicion);
begin
 Case posicion Of
   cArriba : MueveArriba;
   cAbajo : MueveAbajo;
   cIzquierda : MueveIzquierda;
   cDerecha : MueveDerecha; 
   ........
 end;
end;

//En la llamada
MueveRenglon(cArriba);

Saluditos

jbautista 17-01-2009 03:36:44

Gracias gracias a los dos por ayudarme, ya habia leido algo asi por ahi pero no lo entendi ya con el ejemplo todo bien.

Gracias Roman y Caro por su tiempo.

DarkBlue 11-11-2011 20:35:29

como puedo mostrar en pantalla el tipo de dato que acabo de crear en un showmessage() por que dice que string y el nuevo dato no son compatibles , tengo que crear una operacion para convertir ese tipo de dato a string?

Casimiro Notevi 11-11-2011 20:39:04

Hola, es que, por ejemplo, en:

Código Delphi [-]
type   TPosicion = (cArriba, cAbajo, cIzquierda, cDerecha);

cArriba=0, cAbajo=1, cIzquierda=2, cDerecha=3
No son strings.

ecfisa 11-11-2011 22:12:22

Hola.

Como te explica claramente Casimiro en el ejemplo, no son strings que se puedan mostrar directamente, son de tipo ordinal. Cada nombre definido (cArriba, cAbajo, cIzquierda, cDerecha) tiene una órdinalidad que comienza desde cero y termina en el enésimo término.

Para mostrar el valor de un tipo ordinal debés hacer:
Código Delphi [-]
begin
  ShowMessage(IntToStr(Ord(cDerecha))); // muestra: 3
end;

Para realizar la operación inversa, es decir, dado el órden obtener el nombre, se puede usar la función GetEnumName:
Código Delphi [-]
uses TypInfo;
...
begin
  ShowMessage(GetEnumName(TypeInfo(TPosicion), 2)); // muestra: cIzquierda
end;

Un saludo.

DarkBlue 11-11-2011 23:25:32

ohhhhhhh muchas gracias , que utiles son estas funciones. supongo que hace falta bucear un poco por las funciones y procedimientos de delphi
hasta luego y gracias


La franja horaria es GMT +2. Ahora son las 08:53:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi