Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Crear Frame en tiempo de ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=78631)

calufa03 05-05-2012 16:15:41

Crear Frame en tiempo de ejecucion
 
hola, mi situación es la siguiente:

estoy queriendo desarrollar un programa en el cual cuando se cambie la pestaña de un ribbon se cambien la interfaz de la ventana que se muestra (lo que cambia es el frame activo). esto lo logre poniendo un frame de incio de sesión cada vez que cambio de pestaña, lo cual no es un problema xq se adecua a la utilidad del programa.

el problema es que yo querría que los frames no se creen todos al momento de crearse el formulario principal, sino que al momento de darle click a iniciar sesión dependiendo de una u otra opcion seleccionada, me cree el frame correspondiente, se entiende?

trate de usar el constructor del frame dentro del switch donde planteo la toma de decision, pero cuando esta tratando de empezar me salta un SHowmessage que dice lo siguiente: "class tframe2 not found" .
class tframe2 es el frame que estoy probando para mostrar, para mayor informacion les digo que para que el frame no se cree con el form saque la instancia que se encuentra dentro de published en el propio formulario.

si alguien conoce alguna alternativa para hacer esto les agradecere la ayuda :)

calufa03 05-05-2012 16:19:23

por cierto, me olvide de aclarar que estoy usando Embarcadero c++ builder 2010

Casimiro Notevi 05-05-2012 17:24:35

Sería conveniente que pongas el código, será más fácil ayudar entonces :)

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.

ecfisa 06-05-2012 01:41:43

Hola.

En realidad no comprendo la situación pero por el título, parece que tenés dificultad para crear frames dinámicamente.
Te pongo un ejemplo con un TPageControl, tres TTabSheet y tres TFrames que se crean en ejecución a fín de darte una idea de como podrías hacerlo. En el evento OnChage del TPageControl se van creando los frames correspondientes a cada TabSheet y en el evento OnExit de cada TabSheet se eliminan (deberás asignar el evento TabSheetExit a los 3 TabSheets).

Código:

...
TFrame *FR1, *FR2, *FR3;

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  PageControl1->ActivePageIndex = 0;
  PageControl1Change(Sender);
}

void __fastcall TForm1::PageControl1Change(TObject *Sender)
{
  switch (PageControl1->ActivePageIndex) {
    case 0:{
            FR1 = new TFrame(this);
            FR1->Color = clHighlight;
            FR1->Align = alClient;
            TabSheet1->InsertControl(FR1);
          }; break;
    case 1:{
            FR2 = new TFrame(this);
            FR2->Color = clSilver;
            FR2->Align = alClient;
            TabSheet2->InsertControl(FR2);
          }; break;
    case 2:{
            FR3 = new TFrame(this);
            FR3->Color = clMoneyGreen;
            FR3->Align = alClient;
            TabSheet3->InsertControl(FR3);
          }; break;
  }
}

void __fastcall TForm1::TabSheetExit(TObject *Sender)
{
  switch (((TPageControl *)Sender)->ActivePageIndex) {
    case 1: delete FR1; break;
    case 2: delete FR2; break;
    case 3: delete FR3; break;
  }
}
...

Saludos.

calufa03 06-05-2012 01:57:26

gracias ecfisa! funciona! y es en lo que estaba teniendo problemas.
pero, en este ejemplo los frames se crean dentro de Form1 debido a que lo programas dentro de Form1, como se modificaria ese codigo si por ejemplo yo lo estoy programando en el evento de click de un boton de un frame o form distinto de Form1, pero quiero que los frames creados aparezcan en form1?
por ejemplo el codigo para crear las frames estaria en la siguiente funcion:

Código:

void __fastcall TFrame1::BitBtn1Click(TObject *Sender)
{
................ //Codigo que tu me has dado para crear frames
}


ecfisa 06-05-2012 02:15:08

Hola calufa03.

Si queres que el frame aparezca el form sería:
Código:

...
  Form1->InsertControl(TuFrame);
...

Saludos. :)

calufa03 06-05-2012 02:16:51

ok eficsa! graciass! ahora lo pruebo :)


La franja horaria es GMT +2. Ahora son las 12:07:32.

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