PDA

Ver la Versión Completa : Form dentro de otro


Malparo
11-01-2011, 06:09:08
Hola,

Podran ayudarme por favor....

Tengo el siguiente codigo...

Form2 := TFrm2.Create( Self );
Form2.Parent := Panel2;
Form2.Align := AlTop;
Form2.Align := alClient;
Form2.OnClose := AlCerrar;
Form2.ShowModal;


La idea es llamar un Form, dentro de un Panel y dejar el control en el nuevo..
Pero se bloquea toda la aplicación, si cambio Form2.ShowModal por Form2.Show, al parece no toma los procedimiento de creación ni de activación del nuevo Form.

escafandra
11-01-2011, 08:42:54
Form2 := TFrm2.Create( Self );
Form2.Parent := Panel2;
Form2.Align := AlTop;
Form2.Align := alClient;
Form2.OnClose := AlCerrar;
Form2.Showl
Form2.SetFocus;


La barra del Caption de Form2 nunca se pondrá de color azul oscuro porque el foco principal lo tiene Form1. Sin embargo los controles de Form2 tomarán el foco. Si Tienes un control en Form2, debes darle el foco.

Saludos.

Malparo
11-01-2011, 12:18:51
Gracias Escafandra,

Pero sigue igual, muesta el form dentro del Panel, las instrucciones que estan en el creator y activate del Form, no las toma encuenta, y el boton izquierdo del mouse no responde para las ediciones solo el derecho...

Tendras alguna idea, como resolver este problemilla.......

Aleca
11-01-2011, 16:58:43
proba de esta forma

...
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
tForm2: TForm4;
begin
tForm2 := TForm4.Create(nil);
tForm2.Parent := Panel1;
tForm2.Height := 100;
tForm2.Width := 120;
tForm2.Top := 0;
tForm2.Left := 0;
tForm2.Show;
end;


form4 tiene un panel al cual le cambio el color en el oncreate de form4.
Saludos :)

Ñuño Martínez
11-01-2011, 19:09:19
¿Un TForm dentro de otro TForm? Creo que lo que necesitas es un Frame (http://wiki.lazarus.freepascal.org/Frames) (Ya, ya, el enlace es de Lazarus, pero es que no he encontrado ninguno de Delphi y el funcionamiento en la práctica es el mismo).

escafandra
12-01-2011, 00:11:19
Echemos mano a la API:


Form2 := TFrm2.Create( Self );
Form2.Left:= 0;
Form2.Top:= 0;
Form2.Width:= Panel2.Width;
Form2.Height:= Panel2.Height;
Windows.SetParent(Form2.Handle, Panel2.Handle);
Form2.OnClose := AlCerrar;
Form2.Show;


Saludos.

Malparo
12-01-2011, 12:20:08
Gracias , por su respuesta...

Escafandra, la ultimas instrucciones resultaron perfecto, para lo que andaba buscando.....

Y lo ultimo, como puedo evitar que habran dos form similares, probe con if not Assigned(Form2) Then..... pero no resulta

escafandra
12-01-2011, 13:25:11
No termino de entender. ¿Dos Form similares?, ¿Abiertos al mismo tiempo y en el mismo TPanel?.

Antes piensa una cosa. ¿Form2 es un formulario autocreado o disponible?

Si es autocreado, una instancia de Form2 siempre estará creada y por lo tanto Assigned(Form2) siempre será true.

Saludos.

Neftali [Germán.Estévez]
12-01-2011, 13:49:38
Acabo de subir un par de ejemplos al FTP relacionados con esto (no son míos); Revisa el código:

Form dentro de otro movible y redimensionable (http://www.terawiki.clubdelphi.com/archivos/Delphi/Ejemplos/form_moveable_sizeable.zip)
Form dentro de otro no movible y redimensionable (http://www.terawiki.clubdelphi.com/archivos/Delphi/Ejemplos/form_no_moveable_resizeable.zip)

Creo que ya te han comentado también el tema de Frames.