Club Delphi  
    FTP   CCD     Enlaces   Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Desplegado
  #1  
Antiguo 18-11-2005
liriko liriko is offline
Miembro
 
Registrado: nov 2005
Posts: 27
liriko Va por buen camino
Question Tipos de datos enumerados en Delphi

Hola amigos ¡
Me estoy iniciando en la programacion orientada a objetos,quizas mi duda sea irrisoria para vosotros,pero a mi me tiene loco ¡¡
Vereis, estoy programando en Delphi 2005. El programa me requiere que me cree un tipo de dato enumerado (el cual lo tengo dentro de una Unit junto a las clases que voy a usar). La cosa es que en mi programa pongo un Combobox para que el usuario me elija una de las opciones, estas opciones son las del tipo de dato enumerado. Intento coger ese valor que me elige el usuario, pasarlo a la Unit donde tengo mis Clases, y no hay manera. ¿Alguien sabe como puedo hacerlo? Espero haberme explicado bien, gracias por adelantado ¡
Responder Con Cita
  #2  
Antiguo 18-11-2005
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 872
Héctor Randolph Va por buen camino
No sé si he entendido bien, pero aqui te pongo un ejemplo de la ayuda de Delphi:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
    // Add View styles and constants to the Combo Box
    ComboBox1.Items.AddObject('vsIcon', TObject(vsIcon));
    ComboBox1.Items.AddObject('vsList', TObject(vsList));
    ComboBox1.Items.AddObject('vsReport', TObject(vsReport));
    ComboBox1.Items.AddObject('vsSmallIcon', TObject(vsSmallIcon));
    // Display first item in the Combo Box
    ComboBox1.ItemIndex := 0;
end;

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
  with ComboBox1 do
    ListView1.ViewStyle := TViewStyle(Items.Objects[ItemIndex]);
end;

La propiedad ViewStyle es de tipo TViewStyle que es un tipo enumerado.

Código Delphi [-]
TViewStyle = (vsIcon, vsSmallIcon, vsList, vsReport);

Tal vez eso resuelva el problema

Un saludo.
__________________
Componentes del club (CCD) | TeraWiki
Responder Con Cita
  #3  
Antiguo 18-11-2005
dec dec is offline
Moderador
 
Registrado: dic 2004
Posts: 11.589
dec Va por buen camino
Hola,

No sé si te servirá de algo o no, pero allá voy. Digo yo, que, puesto que el usuario ha de elegir "una opción" desde un "TComboBox",... ¿porqué no hacer uso de la propiedad "ItemIndex" del mismo y de su evento "OnChange" para con un "case .. of" determinar qué opción elige el usuario?... Mejor con esto que he escrito ahora, a ver si te da alguna idea o más dudas que otra cosa.

Código Delphi [-]
 unit Unit1;
 
 interface
 
 uses
   Forms, Classes, Controls, StdCtrls;
 
 type
   TPosicion = (poArriba, poDerecha, poAbajo, poIzquierda);
 
 type
   TfrmPrincipal = class(TForm)
     cbPosicion: TComboBox;
     procedure FormCreate(Sender: TObject);
     procedure cbPosicionChange(Sender: TObject);
   private
     FPosicion: TPosicion;
   end;
 
 var
   frmPrincipal: TfrmPrincipal;
 
 implementation
 
 {$R *.dfm}
 
 // Se crea este formulario.
 //
 procedure TfrmPrincipal.FormCreate(Sender: TObject);
 begin
   FPosicion := poArriba;
   cbPosicion.ItemIndex := 0;
 end;
 
 // "cbPosicion" es un "TComboBox", y el siguiente
 // método corresponde a su evento "OnChange".
 //
 procedure TfrmPrincipal.cbPosicionChange(Sender: TObject);
 begin
   case cbPosicion.ItemIndex of
     0: FPosicion := poArriba;
     1: FPosicion := poDerecha;
     2: FPosicion := poAbajo;
     3: FPosicion := poIzquierda;
   end;
 end;
 
 end.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #4  
Antiguo 18-11-2005
dec dec is offline
Moderador
 
Registrado: dic 2004
Posts: 11.589
dec Va por buen camino
Hola,

Muy interesante HECTOR RANDOLPH.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #5  
Antiguo 18-11-2005
liriko liriko is offline
Miembro
 
Registrado: nov 2005
Posts: 27
liriko Va por buen camino
Thumbs up

Muchas gracias por este ejemplo ultimo, me a hecho ver esto mucho mas claro,Salu2
Responder Con Cita
  #6  
Antiguo 18-11-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.647
maeyanes Va por buen camino
Yo uso algo parecido a lo que hace HECTOR, pero sin usar Object.

He aquí como yo lo hago:

Código Delphi [-]
type
  TMiTipoNumerado = (tnUno, tnDos, tnTres);

// ...

procedure TMainForm.FormCreate(Sender: TObject);
begin
  // La lista de items se puede llenar en tiempo de diseño...
  ComboBox1.Add('Uno');
  ComboBox1.Add('Dos');
  ComboBox1.Add('Tres');
  ComboBox1.ItemIndex := 0
end;

procedure TMainForm.ComboBox1Change(Sender: TObject);
begin
  VariableDeTipoNumerado := TMiTipoNumerado(ComboBox1.ItemIndex)
end;

En este caso solo hay que tener cuidado que los items en el combobox tengan el mismo orden que en el tipo numerado.


Saludos...
Responder Con Cita
  #7  
Antiguo 18-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.329
Lepe cantidad desconocida en este momento
Código Delphi [-]
type
  TMiTipoNumerado = (tnUno= 665 , tnDos, tnTres);

Ahora ya son números enteros y tnDos tiene el valor 666.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 18-11-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.647
maeyanes Va por buen camino
Cita:
Empezado por Lepe
Código Delphi [-]
type
  TMiTipoNumerado = (tnUno= 665 , tnDos, tnTres);

Ahora ya son números enteros y tnDos tiene el valor 666.

saludos
Tienes razón, pero a menos que quieras hacer algo extraño, harías lo de poner que tnUno sea igual a 665.

Yo lo hago de la forma en que indiqué y no me ha dado problemas hasta ahora...

La forma que indicó HECTOR, yo la usaría en caso de que el tipo numerado ya estuviera declarado y por alguna razón tenga la variante que indicas y no tuviera yo forma de modificarla; pero si es un tipo declarado de la forma normal, el método que uso es más sencillo de implementar (al menos para mi )...


Saludos...

Última edición por maeyanes fecha: 18-11-2005 a las 23:51:00.
Responder Con Cita
  #9  
Antiguo 19-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.329
Lepe cantidad desconocida en este momento
Reconozco que el hecho de usar 665 como valor inicial es un poco diabólico .

Quería enfatizar el hecho de que un tipo enumerado pueda tener un valor distinto a cero o uno.

Siempre estamos usando un tipo enumerado, pero con otras funcionalidades; A modo de constante, de índice de un Array, de tipo entero que puede utilizarse en expresiones matemáticas, etc.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:49:06.


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