Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-04-2017
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 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
  #2  
Antiguo 23-04-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por mRoman Ver Mensaje
No andara por aqui el problema....y si es asi...como elimino todo lo q contiene el array, para volver crearlos dentro del array...???
Si. Cada botón referenciado en el array es el mismo que el localizado en ScrollBox1, por lo que si lo borras de un lado, lo has borrado. Por otra parte, no es buena idea crear los botones en el OnPaint, ya que se volverán a creas cada vez que se pinte el formulario y esa situación puede repetirse muchas veces siendo dependiente Windows y de otras aplicaciones que se superpongan. Es mejor crear los botones solo una vez y esconder los que no te hagan falta simplemente dejándolos inactivos, o si prefieres, haciéndolos no visibles:
Código Delphi [-]
 
BitBtn1.Visible:= false;

Saludos.
Responder Con Cita
  #3  
Antiguo 24-04-2017
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Si. Cada botón referenciado en el array es el mismo que el localizado en ScrollBox1, por lo que si lo borras de un lado, lo has borrado. Por otra parte, no es buena idea crear los botones en el OnPaint, ya que se volverán a creas cada vez que se pinte el formulario y esa situación puede repetirse muchas veces siendo dependiente Windows y de otras aplicaciones que se superpongan. Es mejor crear los botones solo una vez y esconder los que no te hagan falta simplemente dejándolos inactivos, o si prefieres, haciéndolos no visibles:
Código Delphi [-]
 
BitBtn1.Visible:= false;

Saludos.
Te agradezco escafandra, por contestar. Entonces quieres decir que si lo borro del ScrollBox...automáticamente tambien se elimina del Array ???. Efectivamente, el código dentro del OnPaint, es latoso....visiblemente es molesto, cada vez q se pinte el formulario, se generen los botones, ya lo quite de ahi.

Me comentas que los botones crearlos 1 sola vez y dejarlos visibles o no visibles dependiendo, esta era mi mejor carta pero el cliente tiene mesas que se hacen 2...se dividen, si creo desde un inicio la mesa 23 (por decir algo), luego si esa mesa la dividen, se convierte o la identifican como mesa 23-A, entonces...seria un boton nuevo??...lo anterior puede susceder para todas las mesas, entonces crear los botones desde un inicio....o como lo haria para cuando pase esto??. Se me viene a la mente, mejor crear los botones conforme se vayan abriendo las mesas...Sé que 23-A, 11-A, 10-A, 10-B, al final de cuentas vienen siendo mesas, entonces, con una "ALIAS" podriamos resolverlo??..puediera ser, independientemente de que el ID de la mesa sea un número distinto....(no se me habia ocurrido lo del alias!!).

En breve les enviaré mejor todo el código que tengo y que hace todo el "circo".....los que postee al inicio de este hilo, es solo una parte.

Saludos. !!!
__________________
Miguel Román

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



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear Form en tiempo de ejecución mjjj OOP 2 19-01-2012 19:11:54
Crear Form en tiempo de Ejecución harvicoco Varios 3 28-06-2006 14:55:05
Crear Componentes en tiempo de ejecucion fartycl Varios 3 21-06-2006 22:03:13
Crear un DSN en tiempo de ejecucion neyvan Conexión con bases de datos 7 21-05-2004 17:41:45


La franja horaria es GMT +2. Ahora son las 04:13:39.


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
Copyright 1996-2007 Club Delphi