Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   item del combobox que muestre distintos resultados (https://www.clubdelphi.com/foros/showthread.php?t=83967)

micpablo 21-08-2013 22:43:27

item del combobox que muestre distintos resultados
 
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.

Código Delphi [-]
...
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.


La franja horaria es GMT +2. Ahora son las 00:46:08.

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