Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   No puedo ocultar un formulario (https://www.clubdelphi.com/foros/showthread.php?t=90719)

Angel.Matilla 19-08-2016 12:37:00

No puedo ocultar un formulario
 
Tengo una aplicación en BCB 6 que al lanzar uno de los formularios muestra otro (Form->Show()) que está normalmente oculto pero que cuando termina lo que está haciendo y quiero volver a ocultarlo (Form->Hide()) me da un error de ejecución.
Cita:

Cannot change Visible in OnShow or OnHide
He probado a ponerlo ese trozo de código en el OnCreate, el OnActivate, OnShow y OnPaint y no hay manera que funcione bien.
Código:

fForBln->Show();
fForBln->Barra->MinValue = 0;
fForBln->Barra->Progress = 0;
fForBln->IniBarra("Cargando recibos");

fDevMan->Lista->Items->Clear();

fPersona->Query->Close();
fPersona->Query->SQL->Text = "SELECT A.Apellidos, A.Nombre, A.Codigo, A.Referencia, B.Importe"
                            "FROM Persona A, Recibos B"
                            "WHERE A.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia')"
                            "AND A.CodPrv = B.CodPrv AND A.Codigo = B.Codigo"
                            "AND B.RefInt = :RefInt AND B.Iban <> ''"
                            "AND B.Situacion NOT IN (SELECT Valor FROM Instalacion WHERE Etiqueta = 'SitRec' AND Situacion = 1)"
                            "ORDER BY Apellidos, Nombre, Codigo";
fPersona->Query->ParamByName("RefInt")->AsString = fSelEmi->pSelItem->SubItems->Strings[5];
fPersona->Query->Open();
fForBln->Barra->MaxValue = fPersona->Query->RecordCount;

for (; !fPersona->Query->Eof; fPersona->Query->Next())
{
    fForBln->Barra->Progress ++;
    pItem = fDevMan->Lista->Items->Add();
    pItem->Caption = fPersona->Query->FieldByName("Apellidos")->AsString + ", " + fPersona->Query->FieldByName("Nombre")->AsString;
    pItem->SubItems->Add(fPersona->Query->FieldByName("Referencia")->AsString);
    pItem->SubItems->Add(FormatFloat("##,##0.00 €", fPersona->Query->FieldByName("Importe")->AsFloat));
    pItem->SubItems->Add(fPersona->Query->FieldByName("Codigo")->AsInteger);
}
try
{
    fForBln->Hide();    // AQUÍ DA EL ERROR
}
catch(...)
{
}

Todas las funciones, variables, elementos, etc. que se usan están perfectamente definidos. Y he probado con y sin el try...catch del final, y exactamente este mismo procedimiento lo uso en muchos sitios de la aplicación y sólo me da error aquí.

dec 19-08-2016 14:19:06

Hola,

Pero el error parece muy claro: "No se puede cambiar la visibilidad del formulario en los eventos 'OnShow' ni 'Onhide' del mismo.", de modo que comprueba que no estás haciendo precisamente eso...

roman 19-08-2016 18:03:07

No queda claro lo que estás haciendo. Tal como indica el master dec, si intentas usar Hide dentro del evento OnShow obtendrás el error mencionado. Pero, especifiquemos un poco. Si tienes un formulario fForBln, y dentro de su evento OnShow tratas de usar el método fForBln->Hide(), obtendrás ese error.

Sin embargo, parece que estás haciendo otra cosa, ya que las llamadas a fForBln->Show() y fForBln->Hide() están en el mismo pedazo de código que muestras. Entoces, da la impresión de que haces ambas cosas desde otro formulario, y eso no debería dar el error mencionado. De ser así, tendrías que examinar qué es lo que tienes en el evento OnShow de fForBln.

LineComment Saludos

Angel.Matilla 22-08-2016 10:49:28

Gracias por las respuestas. Como dice roman desde el OnActivate o el OnCreate del formulario fDevMan estoy haciendo el Show() y el Hide() del otro formulario fForBln. Este último sólo tiene cuatro elementos y lo uso para mostar una barra de progreso que vale para toda la aplicación; sólo tiene cuatro elementos: TImage, TPanel, TCGauge y TLabel. En el evento OnShow del mismo sólo tengo puesto esto:
Código:

void __fastcall TfForBln::FormShow(TObject *Sender)
{
    Barra->Progress = 0;
    this->Refresh();
}

Y el problema es que me funciona bien en cualquier otro sitio de la aplicación.

Angel.Matilla 22-08-2016 12:25:27

¡Solucionado! Ha bastado con poner el foco en uno de los elementos de ese fForBln para que desaparezca el error.


La franja horaria es GMT +2. Ahora son las 21:52:58.

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