Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-10-2007
Ubed Ubed is offline
Miembro
 
Registrado: ago 2007
Posts: 71
Poder: 17
Ubed Va por buen camino
Un form dentro de otro

Hola no se si esto va aqui o no va a qui o si lo que pregunto esta bien, pero alla voy.

Yo tengo un Form1 que quiero que sea el principal y quiero que el resto de forms, que se abren en funcion de que parte del arbol pulso, se muestren en un espacio del form que tengo reservado. No se si me entendeis pero ¿Como lo puedo y que debo hacer? ¿Que objetos uso?

Gracias de antemano
Responder Con Cita
  #2  
Antiguo 26-10-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Lo que quieres es algo así como la interfaz del emule, pulsas un botón (o un árbol) y "la ventana" se muestra en todo el área, sin posibilidad de cerrar, minimizar y maximizar.

Hay varias formas, pero yo me decantaría por TFrames. Son como paneles prefabricados que puedes crearlos y cerrarlos a voluntad. Pero cada uno los diseñas como si fueran ventanas diferentes.

También se puede hacer con TForms de toda la vida, creando un hijo y asignando su propiedad Parent, aunque verás la barra de título, etc.

Código Delphi [-]
  Application.CreateForm(TFormHijo, FormHijo);
  FormHijo.Parent := FormPadre;
  FormHijo.Show;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 31-10-2007
Puberta Puberta is offline
Miembro
 
Registrado: oct 2007
Ubicación: Estado de México
Posts: 47
Poder: 0
Puberta Va por buen camino
Exclamation Frame en un PageControl -- No tengo la menor idea

Hola Lepe, tengo un problema muy parecido....

Tengo un Form principal y cerca de 15 Form secundarios (hijos), ahora quiero mejorar la presentación pues como lo acabas de escribir se ve demasiado bulgar, pues es demasiado obvio que hay un form dentro de otro form, así que le quite el borde, pero aun así me muestra la barra de titulos; después segui tu consejo, cree un frame y lo inserte en un PageControl y se veía de maravilla, es como si se tratara de un solo form , pero la duda que surge es ¿Puedo ingresar todos los frames a el Pagecontrol?, sé que tiene la opción de ingresar varias páginas, pero no encontre como asignar un frame a cada página y la verdad es que lo que quiero hacer es que mediante una función yo le asigne el Frame a el Pagecontrol y cuando necesite que se visualice otro Frame, oculte el primero y muestre el que le indique, no tengo la menor idea si se pueda....como es obvio no tengo lógica y es mi segundo día en Delphi 7.

De antemano gracias, por cierto lo poco que sé de Delphi lo aprendí gracias a ustedes.
Responder Con Cita
  #4  
Antiguo 31-10-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Si vas a usar un PageControl, sólo podrás ver un frame al mismo tiempo, y tener 15 frames cargado en memoria (si son complejos) puede ser un derroche de recursos.

Lo que puedes hacer es crear el frame en tiempo de ejecución al cambiar de páginal (evento OnPageChanging si no recuerdo mal).

Puedes hacer uso de una variable global que indica el frame actual que se está mostrando en un momento, se utiliza para liberar el frame y cargar el nuevo. Ejemplito ¿no?
Código Delphi [-]

uses Ufruno, // frame1 definido en esta unidad
       Ufrdos; // lo mismo
{
Nomenclatura:
  Ufruno es la unidad .pas donde está el frame
  Tfruno sería el tipo de ese frame lo ves en su definición:
"  type Tfruno = class(TFrame)"
}
Type FrameClass = class of TFrame; 
// guarda la clase de un TFrame para poder crearlo.

type TForm  = class (Tform) // el principal
private 
  actual :TFrame;
  frames : array [0..15] of TFrame;

  procedure OpenFrame( idx : integer);
end;

procedure TForm.Create(..);
begin
  // cargamos los tipos de frames que vamos a tener
 // como ves lo que se pone es el tipo (type) del frame
  frames[0] := Tfruno; 
  frames[1] := Tfrdos;

{  El índice 0 del array, lo hacemos corresponder con el TabSheet 0
  El índice 1 del array, lo hacemos corresponder con el TabSheet 1

  Así el Tabsheet 0 mostrará el frame de tipo Tfruno
}
 ...
end;


// si no recuerdo mal, en este evento te dice la página actual
// del TPageControl y la página nueva que se va a mostrar
Procedure TForm.PageControlChanging( oldIndex, NewIndex:integer);
begin
  freeAndnil (actual); //eliminamos de RAM el frame que se está mostrando ahora.


// creamos el nuevo frame, dependiendo del TabSheet al que se quiere cambiar. 
  actual := frames[NewIndex].Create(nil); 

  //situamos el frame dentro del TabSheet
  actual.Parent := PageControl.Pages[NewIndex];
  actual.align := alclient;
  actual.visible := true;
  // sería conveniente tener la propiedad visible de cada frame a false en
  // tiempo de diseño, así al alinearla al client, no se vería el cambio de tamaño
end;

procedure Tform.Close(...);
begin
  // no olvidemos liberar el frame actual:
  freeandnil(actual);
end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 01-11-2007
Puberta Puberta is offline
Miembro
 
Registrado: oct 2007
Ubicación: Estado de México
Posts: 47
Poder: 0
Puberta Va por buen camino
Red face No me funciona

Hola Lepe, muchas garcias por tu ayuda.

Mira intente lo que dijiste, pero no me acepta el evento PageControlChanging, así que intente con el PageControlChange pero no funciona, además de que no me deja cargar los tipos de Frames...de verdad lo intente, pero no encuentro la forma de hacerlo.
Responder Con Cita
  #6  
Antiguo 01-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
¿qué errores te da?
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 01-11-2007
Puberta Puberta is offline
Miembro
 
Registrado: oct 2007
Ubicación: Estado de México
Posts: 47
Poder: 0
Puberta Va por buen camino
Me dice que el evento PageControlChanging no existe, y no me deja asignar valores a los Frames, me dice que no es valido.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
pasar datos de un form a otro form vroa74 API de Windows 15 12-10-2007 20:11:52
Delphi exe dentro de otro exe midnight Varios 4 09-06-2007 17:19:54
Imposible hacer visible un form desde otro form SMTZ .NET 13 16-01-2006 22:41:08
Ejecutar un exe dentro de otro Rafa Varios 4 18-04-2004 01:36:57
Un componente dentro de otro. Tonio OOP 9 12-11-2003 00:44:12


La franja horaria es GMT +2. Ahora son las 22:46:47.


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
Copyright 1996-2007 Club Delphi