Disculpen por tardar en contestar...el cliente me ha estado pidiendo cosas y no habia podido contestar.
La propuesta que mi hizo escafandra, me parecio buena solo que el cliente me cambio las cosas ahora, solo quiere mostrar las mesas q están ocupadas, cosa que me resulto más fácil puesto q ya tenia algo elaborado.
Pero ahora me esta marcando un error de "Abstract error", al momento de querer "borrar" el objecto Button de un ScrollBox. Les explico:
Al momento de Pintar el form "Comandero" en OnPaint, mandó ejecutar el siguiente codigo, para crear los botones, siempre y cuando existieran comandas sin haberse impreso..aqui el codigo:
Código Delphi
[-]
procedure TfrmMesasAbiertas.FormPaint(Sender: TObject);
begin
while ScrollBox1.ControlCount>0 do
ScrollBox1.Controls[0].Free;
if ScrollBox1.ControlCount=0 then
begin
qryMesa.Close;
qryMesa.Open;
if not(qryMesa.IsEmpty) then
begin
FormShow(Sender);
qryMesa.First;
While not(qryMesa.Eof) do
begin
nFolio:=qryMesa.fieldByName('folio_ticket_comanda').AsString;
nAliasEmpleado:=qryMesa.fieldByName('alias_empleado').AsString;
nIDMesa:=qryMesa.fieldByName('mesa_num').AsString+qryMesa.FieldByName('literal').AsString;
CrearBoton2();
qryMesa.Next;
end;
end;
end;
end;
Cuando el form se pinta, se ejecuta el codigo anterior, creando los botones en cada iteracion con "CrearBoton2()", ahora el boton representa a la mesa y al dar click muestra el detalle en otro form:
Código Delphi
[-]
procedure TfrmMesasAbiertas.BitBtn1Click(Sender: TObject);
begin
BD.n_IDRegistro:=TBitBtn(Sender).Tag;
BD.n_Bandera:=1;
frmAbreMesa.AbreTransaccion();
if FindComponent('frmDetalleComanda') = nil then
frmDetalleComanda:=TfrmDetalleComanda.Create(self);
frmDetalleComanda.ShowModal;
end;
Procedimiento que crea los botones "CrearBoton2()":
Código Delphi
[-]
procedure TfrmMesasAbiertas.CrearBoton2();
begin
n:=n+1;
Botones[n]:=TBitBtn.Create(Self);
with Botones[n] do
begin
Caption:=nIDMesa+'-'+nAliasEmpleado;
Hint:=nIDMesa;
Parent:=ScrollBox1;
Height:=vHeight;
PosY:=PosY+Height+10;
if n>1 then
vLeft:=vLeft+126;
if vLeft=1270 then
begin
vTop:=vTop+87;
vLeft:=10;
end;
Top:=vTop;
Left:=vLeft;
Width:=vWidth;
OnClick:=BitBtn1Click;
Name:='btn'+IntToStr(n);
Font.Size:=13;
Tag:=qryMesa.fieldByName('registro_id').AsInteger;
IdRegistro:=qryMesa.fieldByName('registro_id').AsInteger;
Glyph:=BitBtn1.Glyph;
Layout:=blGlyphTop;
end;
end;
Y desde el frmDetalleComanda, envio a imprsion en ticket:
Código Delphi
[-]
procedure TfrmDetalleComanda.sBtnImprimirClick(Sender: TObject);
begin
qrTicket.qryCantLetra.Close;
qrTicket.qryCantLetra.ParamByName('id').AsInteger:=qryMaestro.fieldByName('registro_id').AsInteger;
qrTicket.qryCantLetra.Open;
qrTicket.qryTicket.Close;
qrTicket.qryTicket.ParamByName('registro_id').AsInteger:=qryMaestro.fieldByName('registro_id').AsInt eger;
qrTicket.qryTicket.Open;
qrTicket.QuickRep1.Print;
frmMesasAbiertas.Comandero(Sender); Close;
end;
En codigo anterior, despues de imprimir el ticket, mando llamar al procedimiento "Comandero" que esta en el form MesasAbiertas, que es el código que puse arriba...y a la hora de ejecutarlo me genere el Error "Abstract error". Checando el código, en ningun lado elimino los elementos creados en un Array que tengo del tipo TBitBtn....talvez sea por esto que me marca el error ????.....
Con este codigo elimino los objectos TBitBtn creados dentro del ScollBox, pero no del array.....
Código Delphi
[-] while ScrollBox1.ControlCount>0 do
ScrollBox1.Controls[0].Free;
No andara por aqui el problema....y si es asi...como elimino todo lo q contiene el array, para volver crearlos dentro del array...???
Gracias por sus comentarios y su valioso tiempo....saludos !!!