 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 21 Sep, 2011 12:49 pm Asunto: Ocultar componentes |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 23 Sep, 2011 5:27 pm Asunto: |
|
|
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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Lun 26 Sep, 2011 6:22 pm Asunto: Re: Ocultar componentes |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 27 Sep, 2011 7:09 am Asunto: Re: Ocultar componentes |
|
|
| 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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mar 27 Sep, 2011 2:12 pm Asunto: Re: Ocultar componentes |
|
|
| 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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 27 Sep, 2011 3:42 pm Asunto: Re: Ocultar componentes |
|
|
| 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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Vie 30 Sep, 2011 7:14 pm Asunto: Re: Ocultar componentes |
|
|
[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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|