Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Ocultar componentes

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Ocultar componentes Responder citando

En un QuickReport tengo que crear una serie de componentes al ejecutar el programa pero necesito que dependiendo de unas condiciones se oculten o no. ¿Cómo puedo poner la propiedad enabled a true o false según me haga falta? No puedo ponerlo en el BeforePrint del propio elemento porque en tiempo de diseño no existen los elementos.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Voy a poner el código, que es lo que tenía que haber hecho desde el principio:
Código:
int nLeft;
TQRExpr *ExpInf;
TQRLabel *LblInf;
TQRDBText *TxtInf;
TStringList *slCampos = new TStringList();
TStringList *slWidth  = new TStringList();

Application->CreateForm(__classid(TfIndAlu), &fIndAlu);

slCampos->Clear();
slWidth->Clear();
switch (RadioGroup1->ItemIndex)
{
     case 0:
          slCampos->Add("Alumno");
          slCampos->Add("Padre");
          slCampos->Add("Referencia");
          slCampos->Add("Recibo");
          slCampos->Add("Dom");
          slCampos->Add("Educacion");
          slCampos->Add("Curso");
          slCampos->Add("Importe");

          slWidth->Add("240");
          slWidth->Add("240");
          slWidth->Add("40");
          slWidth->Add("55");
          slWidth->Add("30");
          slWidth->Add("150");
          slWidth->Add("80");
          slWidth->Add("0");
          break;
     case 1:
          [...]
          break;
}


nLeft = 0;
for (nItem = 0; nItem <slCampos>Count; nItem ++)
{
     LblInf = new TQRLabel(fIndAlu->QRBand2);
     LblInf->Alignment   = iif(nItem != slCampos->Count - 1, taLeftJustify, taRightJustify);
     LblInf->AlignToBand = iif(nItem != slCampos->Count - 1, false, true);
     LblInf->AutoSize    = iif(nItem != slCampos->Count - 1, false, true);
     LblInf->Caption     = slCampos->Strings[nItem];
     LblInf->Font->Style = TFontStyles() <<fsBold>Parent      = fIndAlu->QRBand2;
     LblInf->Left        = nLeft;
     LblInf->Name        = "QRLabel0" + FormatFloat("0", nItem + 1);
     LblInf->Top         = 0;
     LblInf->Width       = StrToInt(slWidth->Strings[nItem]);

     if (slCampos->Strings[nItem] != "Curso" && slCampos->Strings[nItem] != "Dom")
     {
          TxtInf = new TQRDBText(fIndAlu->QRBand3);
          TxtInf->Alignment   = iif(nItem != slCampos->Count - 1, taLeftJustify, taRightJustify);
          TxtInf->AlignToBand = iif(nItem != slCampos->Count - 1, false, true);
          TxtInf->AutoSize    = iif(nItem != slCampos->Count - 1, false, true);
          TxtInf->Parent      = fIndAlu->QRBand3;
          TxtInf->DataSet     = fColegio->Query;
          TxtInf->DataField   = slCampos->Strings[nItem];
          TxtInf->Left        = nLeft;
          TxtInf->Mask        = iif(nItem != slCampos->Count - 1, "", "#,##0.00 €");
          TxtInf->Name        = slCampos->Strings[nItem];
          TxtInf->Top         = 0;
          TxtInf->Transparent = true;
          TxtInf->Width       = StrToInt(slWidth->Strings[nItem]);
     }
     else
     {
          if (slCampos->Strings[nItem] == "Dom")
          {
               ExpInf = new TQRExpr(fIndAlu->QRBand3);
               ExpInf->Alignment   = taCenter;
               ExpInf->AutoSize    = false;
               ExpInf->Parent      = fIndAlu->QRBand3;
               ExpInf->Expression  = "IF(Query.Dom = '0', 'Sí', 'No')";
               ExpInf->Parent      = fIndAlu->QRBand3;
               ExpInf->Left        = nLeft;
               ExpInf->Name        = slCampos->Strings[nItem];
               ExpInf->Top         = 0;
               ExpInf->Transparent = true;
               ExpInf->Width       = StrToInt(slWidth->Strings[nItem]);
          }
          else
          {
               LblInf = new TQRLabel(fIndAlu->QRBand3);
               LblInf->Alignment   = taLeftJustify;
               LblInf->AutoSize    = false;
               LblInf->Caption     = "";
               LblInf->Parent      = fIndAlu->QRBand3;
               LblInf->Left        = nLeft;
               LblInf->Name        = slCampos->Strings[nItem];
               LblInf->Top         = 0;
               LblInf->Transparent = true;
               LblInf->Width       = StrToInt(slWidth->Strings[nItem]);
          }
     }
     nLeft += StrToInt(slWidth->Strings[nItem]) + 5;
}

Esta es la historia: Dependiendo de la selección de listado que se haga (en detalle o no, por ejemplo) se muestra o no un QRGroup y quisera evitar repetir un montón de campos en cada grupo, sobre todo para hacer el listado más claro.

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Re: Ocultar componentes Responder citando

Puedes guardar el ancho en la propiedad tag y para esconderlo pones el ancho a 0, para visualizarlo, recuperas el ancho del tag.


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Re: Ocultar componentes Responder citando

escafandra escribió:
Puedes guardar el ancho en la propiedad tag y para esconderlo pones el ancho a 0, para visualizarlo, recuperas el ancho del tag.

Sí, ¿pero dónde pongo ese Width = 0? El problema es que no sé dónde ponerlo.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Re: Ocultar componentes Responder citando

Angel escribió:

Sí, ¿pero dónde pongo ese Width = 0? El problema es que no sé dónde ponerlo.


En la propiedad Width de cada control a esconder, guardas el antiguo valor en la propiedad tag del mismo componente para poder recuperarlo. No lo he probado, pero debe funcionar.


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Re: Ocultar componentes Responder citando

escafandra escribió:
En la propiedad Width de cada control a esconder, guardas el antiguo valor en la propiedad tag del mismo componente para poder recuperarlo. No lo he probado, pero debe funcionar.

La idea es buena pero hay un problema: Los componentes no existen hasta que no se ejcuta el programa y por lo tanto no puedo usar la propiedad OnPrint de cada componente. Ten en cuenta, como puedes ver el código, que los componentes los creo cuando me hace falta.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Re: Ocultar componentes Responder citando

[quote="Angel"]
escafandra escribió:
La idea es buena pero hay un problema: Los componentes no existen hasta que no se ejcuta el programa y por lo tanto no puedo usar la propiedad OnPrint de cada componente. Ten en cuenta, como puedes ver el código, que los componentes los creo cuando me hace falta.


Pero en algún momento arrancará la impresión y tendrás que tener decidido los componentes que deben imprimirse y los que no... En ese momento y dependiendo de las condiciones que precises, debes esconder o visualizar...


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.