Ver Mensaje Individual
  #4  
Antiguo 23-04-2017
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Reputación: 21
mRoman Va por buen camino
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
//      bCaption:=TBitBtn(Sender).Hint;
//      IdRegistro:=TBitBtn(Sender).Tag;
      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); //Al llegar aqui manda el error "Abstract error" !!
    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 !!!
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!

Última edición por mRoman fecha: 23-04-2017 a las 06:24:29.
Responder Con Cita