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
ComboBoxSucursales.Clear;
ComboBoxLibres.Clear;
ComboBoxOcupadas.Clear;
Lista := TOBjectList.Create;
Randomize;
for suc := 0 to 49 do begin
ComboBoxSucursales.Items.AddObject('Sucursal ' + IntToStr(suc+1), TObject(suc));
for ter := 0 to 9 do begin
T := TTerminal.Create;
T.Operario := 'Operario '+IntTostr(ter+1);
T.NroTerm := ter;
T.NroSuc := suc;
T.Libre := Boolean(Random(2)); Lista.Add(T);
end;
end;
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');
ComboBoxLibres.Clear;
ComboBoxOcupadas.Clear;
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;
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.