PDA

Ver la Versión Completa : item del combobox que muestre distintos resultados


micpablo
21-08-2013, 22:43:27
Hola a todos. Ante todo me justifico que soy principiante en la programacion orientada a objetos y estoy haciendo mi experiencia con delphi 7.
Mi consulta se refiere a que tengo un combobox donde figuran las sucursales de una empresa (son 50) y debo seleccionar una de las sucursales y me debera mostrar en 2 listbox que terminales (computadoras) estan ocupadas y cuales estan libres.
Es bastante sencillo el pedido pero resulta que debo hacer un case con itemindex para ubicar cual sucursal se seleccionó y en cada opcion del case tendria que desplegar todas las terminales (ocupadas y libres) que debere mostrar los 2 listbox....Esto es asi? no es demasiado codigo para un solo componente? hay algo en mi interpretacion y/o la compresion en el codigo ya que no veo o no se me ocurre una opcion
Gracias

ecfisa
22-08-2013, 00:19:48
Hola micpablo.

Suponiendo que las sucursales ya estan cargadas en el ComboBox, ¿ Donde residen las terminales ? ¿ En una tabla de una base de datos, en un array de records, en una lista de objetos, un archivo de texto, ... ? ¿ Que tipo de dato contiene una sucursal ?

Saludos. :)

micpablo
22-08-2013, 19:09:45
las sucursales están en un solo archivo excel lo quiero pasar todo a un aplicación en delphi ....los datos son:
ejemplo .....la sucursal 45 (juan perez -- term 80 / jose pepe -- term 20) terminales libres 20 - 21 - 72

la sucursal 30 (nicolas -- term 11 / ricardo -- term 26 / luis -- terminal 98) terminales libres 1 - 2 - 3 - 4 - 5 -

la idea era hacer un combo con las sucursales ya cargadas y cuando selecciono una sucursal me deberá cargar por ejemplo en un listbox los datos de las terminales que están ocupadas por estas personas y cuales son las libres para la sucursal seleccionada

ecfisa
22-08-2013, 20:32:21
Hola micpablo.

No utilizo Excel por lo que no no sé como obtener los datos de esa fuente. Pero te hice un ejemplo de carga arbitrario para que visualices como podes implementarlo.

El código es totalmente funcional, solo deberas reemplazar la parte de la carga de datos, para la obtener los valores de las columnas del archivo de Excel.


...
implementation

uses contnrs;

type
TTerminal = class(TObject)
Operario: string;
NroTerm: Integer;
NroSuc : Integer;
Libre : Boolean;
end;

var
Lista: TObjectList;

procedure TForm1.FormCreate(Sender: TObject);
var
suc, ter: Integer;
T: TTerminal;
begin
// Limpiar combos
ComboBoxSucursales.Clear;
ComboBoxLibres.Clear;
ComboBoxOcupadas.Clear;
// Carga (aquí se deben obtener los datos del archivo Excel)
Lista := TOBjectList.Create;
Randomize;
for suc := 0 to 49 do // 50 sucursales
begin
ComboBoxSucursales.Items.AddObject('Sucursal ' + IntToStr(suc+1), TObject(suc));
for ter := 0 to 9 do // 10 terminales por sucursal (al azar: ... to Random(N)+1)
begin
T := TTerminal.Create;
T.Operario := 'Operario '+IntTostr(ter+1);
T.NroTerm := ter;
T.NroSuc := suc;
T.Libre := Boolean(Random(2)); // libre u ocupada al azar
Lista.Add(T);
end;
end;
// Fin carga
end;

procedure TForm1.ComboBoxSucursalesChange(Sender: TObject);
var
i,suc: Integer;
s: string;
T: TTerminal;
begin
if ComboBoxSucursales.ItemIndex = -1 then
raise Exception.Create('Seleccione una sucursal');
// Limpiar combos de libres y ocupadas
ComboBoxLibres.Clear;
ComboBoxOcupadas.Clear;
// Seleccionar terminales por sucursal
for i:= 0 to Lista.Count - 1 do
begin
suc := Integer(ComboBoxSucursales.Items.Objects[ComboBoxSucursales.ItemIndex]);
T := TTerminal(Lista[i]);
if T.NroSuc = suc then
begin
s := Format('Suc:%d Term:%d Oper:%s',[T.NroSuc, T.NroTerm, T.Operario]);
if TTerminal(Lista[i]).Libre then
ComboBoxLibres.AddItem(s, TObject(T))
else
ComboBoxOcupadas.AddItem(s, TObject(T));
end;
end;
end;

// Liberar
procedure TForm1.FormDestroy(Sender: TObject);
begin
Lista.Free;
end;

Al elegir una sucursal en ComboBoxSucursales, se cargan las terminales libres en ComboBoxLibres y las ocupadas en ComboBoxOcupadas, correspondientes a la sucursal seleccionada.

Saludos. :)

micpablo
22-08-2013, 21:58:06
buenísimo..... muchísimas gracias..... la verdad me estaba quedando cualquier cosa y me diste una mano barbara ....gracias gracias

nlsgarcia
23-08-2013, 01:08:01
ecfisa,

Excelente ^\||/ :)

Nelson.