Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-04-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Borrado y creación dinámica de elementos

A lo mejor me estoy complicando la vida innecesariamente; no lo sé.
Tengo esta pantalla:


En función de la opción pulsada (salvo la segunda) monto estas otras:

Con este código:
Código:
AnsiString cEspecial[3] = {"Cargos electos afiliados", "Cualquier cargo electo", "Afiliados activos"};
TCheckListBox *CheckListBox;
TControl *Control;
TLabeledEdit *Edit;
TRadioButton *Button = static_cast<TRadioButton *>(Sender);
TRadioButton *Radio;
TStaticText *Static;

Panel2->Visible = false;
for (nItem = 0; nItem < Panel2->ControlCount; nItem ++)
{
     Control = Panel2->Controls[nItem];
     if (Control->ClassNameIs("TCheckListBox") || Control->ClassNameIs("TStaticText") || Control->ClassNameIs("TLabeledEdit") || Control->ClassNameIs("TRadioButton"))
          delete Control;
}
Panel2->Refresh();

fMenu->Auxiliar->Close();
switch (Button->Tag)
{
     case 0:
          fMenu->Auxiliar->SQL->Text = "SELECT DISTINCT Periodo, PerPago, MAX(Fecha) FROM Rc03 WHERE CodPrv = :PrvIns AND UPPER(Forma) NOT LIKE :Literal AND UPPER(Periodo) NOT LIKE :Literal GROUP BY Periodo, PerPago ORDER BY Periodo";
          fMenu->Auxiliar->ParamByName("PrvIns")->AsString  = PrvIns;
          fMenu->Auxiliar->ParamByName("Literal")->AsString = cDesconocido;
          fMenu->Auxiliar->Open();

          if (fMenu->Auxiliar->IsEmpty())
          {
               Mensaje(4, "No hay recibos de este tipo pendientes de facturar.", "Volver");
               return;
          }

          Label2->Caption = "Seleccione periodicidades";
          CheckListBox = new TCheckListBox(Panel2);
          CheckListBox->Align        = alClient;
          CheckListBox->BorderStyle  = bsNone;
          CheckListBox->Color        = Panel2->Color;
          CheckListBox->Name         = "CheckListBox1";
          CheckListBox->Parent       = Panel2;
          CheckListBox->OnClickCheck = CheckListBox1ClickCheck;

          for (; !fMenu->Auxiliar->Eof; fMenu->Auxiliar->Next())
               CheckListBox->Items->AddObject(fMenu->Auxiliar->FieldByName("Periodo")->AsString, (TObject *)fMenu->Auxiliar->FieldByName("PerPago")->AsInteger);
          break;
     case 1:
          [Esta opción no tiene pantalla especial. Por eso quito el código]
          return;
     case 2:
          fMenu->Auxiliar->Close();
          fMenu->Auxiliar->SQL->Text = "SELECT MIN(A.Fecha) MinFec, MAX(A.Fecha) MaxFec FROM Recibos A, Persona B WHERE A.CodPrv = :PrvIns AND A.Situacion IN (SELECT Valor FROM Instalacion WHERE Etiqueta = 'SitRec' AND Situacion = 1) AND A.Fecha <> :FechaNula AND A.CodPrv = B.CodPrv AND A.Codigo = B.Codigo AND B.Situacion IN (SELECT Valor FROM Instalacion WHERE Etiqueta = 'Situacion' AND Situacion = 1)";
          fMenu->Auxiliar->ParamByName("PrvIns")->AsString      = PrvIns;
          fMenu->Auxiliar->ParamByName("FechaNula")->AsDateTime = dFechaNula;
          fMenu->Auxiliar->Open();

          if (fMenu->Auxiliar->IsEmpty())
          {
               Mensaje(4, "No hay recibos devueltos.", "Volver");
               return;
          }
          dMaxFec = fMenu->Auxiliar->FieldByName("MaxFec")->AsDateTime;
          dMinFec = fMenu->Auxiliar->FieldByName("MinFec")->AsDateTime;

          Label2->Caption = "Indique el rango de fechas";
          Static = new TStaticText(Panel2);
          Static->Align       = alBottom;
          Static->Caption     = dMinFec.FormatString("'Del 'dd/mm/yyyy") + dMaxFec.FormatString("' al 'dd/mm/yyyy");
          Static->Font->Style = TFontStyles() << fsBold;
          Static->Parent      = Panel2;
          Static->Align       = alTop;

          for (nItem = 0; nItem < 2; nItem ++)
          {
               Edit = new TLabeledEdit(Panel2);
               Edit->BevelKind              = bkFlat;
               Edit->BorderStyle            = bsNone;
               Edit->EditLabel->Caption     = nItem == 0 ? (String)"Desde" : (String)"Hasta";
               Edit->EditLabel->Font->Style = TFontStyles() << fsBold;
               Edit->LabelPosition          = lpAbove;
               Edit->Left                   = 15 + 80 * nItem;
               Edit->Parent                 = Panel2;
               Edit->Text                   = "";
               Edit->Top                    = 55;
               Edit->Width                  = 75;
               Edit->OnExit                 = Edit1Exit;
          }
          break;
     case 3:
          Label2->Caption = "Emitir recibos para";
          for (nItem = 0; nItem < 3; nItem ++)
          {
               Radio = new TRadioButton(Panel2);
               Radio->Caption = cEspecial[nItem];
               Radio->Left    = 2;
               Radio->Parent  = Panel2;
               Radio->Tag     = nItem;
               Radio->Top     = 18 + 17 * nItem;
               Radio->Width   = 170;
               Radio->OnClick = RadioButton5Click;
          }
          break;
}
Panel2->Visible = true;
Screen->Cursor  = crArrow;
Como se ve al entrar en el evento en que se montan las pantallas; en teoría lo primero que hago es borrar los elementos anteriores que pudiera haber y, en función del TRadioButton pulsado, se montan las tres pantallas. Pero como se pueden ver en las dos últimas imágenes no se eliminan todos los elementos del montaje anterior: en la penúltima por debajo del TRadioButton se ve el TLabeledEdit creado antes y en la última ocurre la inversa.

¿Qué estoy haciendo mal? Porque no quiero, salvo que no quede más remedio, montar tres pantallas distintas.
Responder Con Cita
 



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
Creación dinámica de BD Access Pancholp1986 Tablas planas 2 29-11-2010 12:35:51
Creación dinamica de Formularios Caro OOP 2 25-01-2006 13:20:01
creación de forms dinámica dandia28 OOP 2 30-12-2005 17:18:34
Creacion dinamica de un TAnimate hermes_32 OOP 0 24-08-2004 18:51:58
Creacion dinamica menu morfeo21 Varios 1 30-04-2004 17:33:14


La franja horaria es GMT +2. Ahora son las 06:10:31.


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