Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Novato no tiene ni idea de trabajar con frames (https://www.clubdelphi.com/foros/showthread.php?t=6070)

Copeito 17-12-2003 00:36:51

Novato no tiene ni idea de trabajar con frames
 
Muy buenas noches a todo el mundo.

Soy un pequeño novatillo en lo que a OOP se refiere que hasta ahora se ha dedicado espacialmente a la programación web (Php, Javascript, Actionscript y demás...) y que recientemente se ha interesado por los entresijos de este lenguaje. (Bueno, estuve trabajando en una empresa durante 6 meses y me temo que, dado que no me renovaron, no quedaron del todo satisfechos con mi rendimiento)

Bueno, al grano: Estoy intentando aprender a trabajar con frames y objetos varios. Tengo creado un Form principal(al que, en un alarde de originalidad, he dedicido bautizar como TForm1) y, en el mismo proyecto que este, un frame(Si, le llamé TFrame1 ¿Cómo lo adivinaste?). Y lo que no consigo es hacer que se abra este frame al pulsar un botón en el form principal ¿Alguien puede ayudarme?

roman 17-12-2003 02:45:32

¿Cómo agregaste el frame y qué entiendes por abrir el frame?

Los frames, a diferencia de los formularios no son independientes sino que se insertan dentro de un formulario.

Lo primero que debes hacer para trabajar con frames es usar la opción File|New|Frame lo cual te crea un cuadro similar a un formulario en donde colocas los controles que desees.

Después, para usar este frame dentro de un formulario insertas una componente TFrame dentro de él (de la paleta Standard). Al hacer esto se despliega una lista con los frames que hayas creado y escoges el que desees. Con esto se coloca el frame junto con sus controles dentro del formulario.

Puedes colocar varios frames en un mismo formulario o utilizar un frame más de una vez en el mismo o en distintos formularios.

Si lo que deseas es insertar los frames en tiempo de ejecución por código, los creas de la misma forma y luego, desde el botón o desde donde desees haces algo como:

Código:

with TFrame1.Create(Self) do
  Parent := Self;

Deberás incluir la unidad del Frame en la unidad del formulario (cláusula uses).

// Saludos

Jvilomar 17-06-2004 20:34:34

Roman.. gracias por la respuesta ya que me ha venido como anillo al dedo.


Ahora bien... me podrias decir que metodo utilizo para destruir el frame cuando ya no lo necesite o mejor dicho si utilizo un radiogroup como le hago para que cuando me llaman el mismo frame otra vez no me salte una excepcion?

ruina 18-06-2004 12:55:12

¿la excepcion que te salta es "a component called frame2 already exist"?
pues lo que te falta es cambiarles los nombres para que no coincidan.

Puedes hacer varias cosas, es como la creación dinamica de componentes.

EJ:crear varios frames iguales y destruirlos, guardandolos en un array dinamico.


Código:

type
TForm1 = class(TForm)
        ButtonCrear: TButton;
        ButtonDestruir: TButton;
        procedure ButtonCrearClick(Sender: TObject);
        procedure ButtonDestruirClick(Sender: TObject);
private
        { Private declarations }
public
        framedinamico:array of TFrame2;
end;
var
Form1: TForm1;
implementation
{$R *.xfm}
procedure TForm1.ButtonCrearClick(Sender: TObject);
var ultimo:integer;
begin
        ultimo:=length(framedinamico);
        SetLength(framedinamico,ultimo+1);
        framedinamico[ultimo] :=TFrame2.Create(self);
        framedinamico[ultimo].Parent:=self;
        framedinamico[ultimo].Align:=alBottom;
        framedinamico[ultimo].Name:='dinamico'+inttostr(ultimo);
end;
procedure TForm1.ButtonDestruirClick(Sender: TObject);
var ultimo:integer;
begin
        ultimo:=Length(framedinamico)-1;
        FreeAndNil(framedinamico[ultimo]);
        SetLength(framedinamico,length(framedinamico)-1);
end;

tambien puedes ir metiendolos en un Tlist o simplemente creando y destruyendo el frame anterior si la variable esta ya asignada:

Código:

...
public
          miframe:TFrame2;
...
 
        if Assigned(miframe) then
                FreeAndNil(miframe);
        miframe:=TFrame2.Create(self);
        miframe.Parent:=self;



La franja horaria es GMT +2. Ahora son las 04:22:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi