Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Tipos de datos enumerados en Delphi (https://www.clubdelphi.com/foros/showthread.php?t=27353)

liriko 18-11-2005 01:23:15

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 ¡

Héctor Randolph 18-11-2005 01:43:23

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.

dec 18-11-2005 01:43:34

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.

dec 18-11-2005 01:45:17

Hola,

Muy interesante HECTOR RANDOLPH. ;)

liriko 18-11-2005 01:57:19

Muchas gracias por este ejemplo ultimo, me a hecho ver esto mucho mas claro,Salu2

maeyanes 18-11-2005 18:56:40

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...

Lepe 18-11-2005 20:29:37

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

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

saludos

maeyanes 19-11-2005 00:47:03

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. :p

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 :p)...


Saludos...

Lepe 19-11-2005 01:32:02

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


La franja horaria es GMT +2. Ahora son las 20:17:10.

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