PDA

Ver la Versión Completa : Novato no tiene ni idea de trabajar con frames


Copeito
17-12-2003, 00:36:51
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:


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.



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:


...
public
miframe:TFrame2;
...

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