Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > OOP
Register FAQ Members List Calendar Guía de estilo Today's Posts

Coloboración Paypal con ClubDelphi

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 23/11/2005
jzginez's Avatar
jzginez jzginez is offline
Miembro
 
Join Date: Sep 2003
Location: Puebla, México
Posts: 247
Poder: 23
jzginez Va por buen camino
Question Crear y Borrar componentes en tiempo de ejecución

Hola amigos tengo en una forma un SpinEdit y segun el numero que vaya seleccionando el usuario voy creando una etiqueta, un cuadro de texto y un calendario (al momento solo he provado con crear las etiquetas). Cuando se aumenta el valor en el SpinEdit en tiempo de ejecución se crean las etiquetas restantes, es decir si spinedit es 0 y el usuario sellecciona 2 se crean dos etiquetas, y si despues el usuario selecciona 3 solo se crea una etiqueta mas, el problema lo tengo cuando el usuario disminuye el valor del SpinEdit por ejemplo de 3 a 2 no logro eliminar la etiqueta sobrante, les anexo el código a ver si me pueden ayudar.

Código Delphi [-]
procedure TFrmBACCobros1.SpinEdit1Change(Sender: TObject);
Var
  Etiqueta: TLabel;
begin
  inherited;
  if TotalEtiquetas < SpinEdit1.Value
    Then For i:= TotalEtiquetas to SpinEdit1.Value -1 do
      Begin
        Etiqueta:= TLabel.Create(ScrollBox1);
        Etiqueta.Top:= AltoEtiqueta;
        Etiqueta.Left:= 16;
        Etiqueta.Width:= 65;
        Etiqueta.Height:= 21;
        Etiqueta.Name:= 'pago'+IntToStr(i);
        Etiqueta.Parent:= ScrollBox1;
        Etiqueta.Tag:= i;
        Etiqueta.Caption:= 'Pago '+ IntToStr(i+1);
        AltoEtiqueta:= AltoEtiqueta+ 20;
      End
    Else //Aqui esta mi problema ya probe con RemoveComponent 
          TLabel(FindComponent('pago'+InttoStr(SpinEdit1.Value+1))).DestroyComponents;
  TotalEtiquetas:= SpinEdit1.Value;
end;

Segun yo buscando en el foro solo encuantro como crear componentes no como borrarlos

__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Reply With Quote
  #2  
Old 23/11/2005
jhonny's Avatar
jhonny jhonny is offline
Jhonny Suárez
 
Join Date: May 2003
Location: Colombia
Posts: 7,070
Poder: 32
jhonny Va camino a la famajhonny Va camino a la fama
La verdad no he probado muy bien este codigo pero me supongo que puedes jugar con lo siguiente:

Código Delphi [-]
var
  x :Integer;
begin
  for x := 0 to ScrollBox1.ControlCount -1 do
  begin
    if ScrollBox1.Controls[x] is TLabel then
      TLabel(ScrollBox1.Controls[x]).Free;
  end;
end;

Espero te sirva
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Reply With Quote
  #3  
Old 23/11/2005
dec's Avatar
dec dec is offline
Moderador
 
Join Date: Dec 2004
Location: Alcobendas, Madrid, España
Posts: 13,142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A mí a bote pronto se me ocurre que uses variables "TObjectList", de tal forma que puedas ir guardando una referencia a cada objeto que creas, y puedas destruir estos según te sea menester. El código de más abajo está escrito en un momento, no me he parado mucho en el mismo, pero, como puede verse en el ejemplo que adjunto, aparentemente, al menos, consigue más o menos lo que te propones: ciñéndome en el ejemplo a unas cuantas "TLabel". Eres libre de mejorarlo y modificarlo como mejor te parezca. Si algún error de bulto hay, por favor, nadie se prive en comunicarlo. Gracias.

Código Delphi [-]
unit UfrmEjemplo;
 
interface
 
uses
  Forms, Classes, Controls,
  StdCtrls, SysUtils, Spin,
  Contnrs; // TObjectList
 
type
  TfrmPrincipal = class(TForm)
    SpinEdit: TSpinEdit;
    procedure FormCreate(Sender: TObject);
    procedure SpinEditChange(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    listaEtiquetas: TObjectList;
  end;
 
var
  frmPrincipal: TfrmPrincipal;
 
implementation
 
{$R *.dfm}
 
procedure TfrmPrincipal.FormCreate(Sender: TObject);
begin
  listaEtiquetas := TObjectList.Create;
end;
 
procedure TfrmPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  listaEtiquetas.Free;
end;
 
procedure TfrmPrincipal.SpinEditChange(Sender: TObject);
var
  i: integer;
  nLabel: TLabel;
begin
  if (SpinEdit.Value > listaEtiquetas.Count) then
  begin
    nLabel := TLabel.Create(Self);
    nLabel.Top := 10;
    nLabel.Left := 10;
    nLabel.Parent := Self;
    nLabel.Caption := 'Etiqueta: ' + IntToStr(listaEtiquetas.Count+1);
    if listaEtiquetas.Count >= 1 then
      nLabel.Top := TLabel(listaEtiquetas.Items[listaEtiquetas.Count-1]).Top + 20;
    listaEtiquetas.Add(nLabel);
  end
  else
    for i := listaEtiquetas.Count-1 downto SpinEdit.Value do
    begin
      if (i >= 1) then
        listaEtiquetas.Delete(i)
      else if (i = 0) then
        listaEtiquetas.Delete(0);
    end;
end;
 
end.
Attached Files
File Type: zip ejemplo.zip (2.0 KB, 137 views)
__________________
David Esperalta
www.decsoftutils.com

Last edited by dec : 23/11/2005 at 21:23. Reason: Corrección del código fuente (nomás la indentación).
Reply With Quote
  #4  
Old 24/11/2005
jzginez's Avatar
jzginez jzginez is offline
Miembro
 
Join Date: Sep 2003
Location: Puebla, México
Posts: 247
Poder: 23
jzginez Va por buen camino
Gracias a los dos por su ayuda les comento que la solución de jhonny si borraba pero solo los cuadros de dialogo y las datetimepicker, con la solución de dec fue lo que yo intentaba hacer solo le aumente el codigo para tambier crear los cuadros de dialogo y las datetimepicker.


Nuevamente Gracias
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Reply With Quote
  #5  
Old 24/11/2005
jzginez's Avatar
jzginez jzginez is offline
Miembro
 
Join Date: Sep 2003
Location: Puebla, México
Posts: 247
Poder: 23
jzginez Va por buen camino
Por cierto le aumente en la parte de creación del componente le aumente el comando:
Código Delphi [-]
nlabel.name:= 'pago'+IntToStr(i);

debido a que como la forma ya tiene otras etiquetas y no siempre tienen un nombre progresivo (label1, label2, etc.) daba error en el nombre del componente y con esto cambio fue mas que suficiente
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Reply With Quote
  #6  
Old 24/11/2005
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
Lepe Va por buen camino
Si vas a necesitar siempre el Tedit, el label y el calendario:

Create un Tframe con esos 3 componentes dentro. Despues solo tendrás que crear un nuevo TFrame y tendrás casi todo hecho.

PD: Para liberar un componente en tiempo de ejecución, usa FreeAndNil(nombreComponente).

Al crear los labels con el parámetro "Self" estas diciendo que los libere el formulario; si los destruyes tú, cuando el form intente destruirlos te dará un AccessViolation, ya que .Free no deja la variable apuntando a nil
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Reply With Quote
  #7  
Old 25/11/2005
jzginez's Avatar
jzginez jzginez is offline
Miembro
 
Join Date: Sep 2003
Location: Puebla, México
Posts: 247
Poder: 23
jzginez Va por buen camino
Gracias Lepe, ya tengo el formulario funcionando con la ayuda de Dec, pero tendre en cuana la tuya para futuros cambios
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT +2. The time now is 01:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi