Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Como puedo abrir un form en un PageControl (https://www.clubdelphi.com/foros/showthread.php?t=59702)

marcoev 05-09-2008 01:39:47

Como puedo abrir un form en un PageControl
 
buenas tardes, disculpen pero he buscado aqui y en varias partes pero no he encontrado, capaz que no he puesto la palabra correcta.

lo que intento hacer es una aplicacion que abra las ventanas dentro de un pagecontrol o tabs, asi como los navegadores de hoy en dia.

alguien sabe de algun codigo o componente que haga esto de la manera mas sencilla posible?

muchas gracias por su apoyo.

Delphius 05-09-2008 02:26:32

Cita:

Empezado por marcoev (Mensaje 311936)
buenas tardes, disculpen pero he buscado aqui y en varias partes pero no he encontrado, capaz que no he puesto la palabra correcta.

lo que intento hacer es una aplicacion que abra las ventanas dentro de un pagecontrol o tabs, asi como los navegadores de hoy en dia.

alguien sabe de algun codigo o componente que haga esto de la manera mas sencilla posible?

muchas gracias por su apoyo.

Hola marcoev,
No he probado crear forms dentro de un PageControl y hacer que actúe como los Tabs de los navegadores. Creo que no es posible.

Lo que si puede hacerse es emplear Frames. Éstos son parecidos a los Forms, y puede crearse, eliminarse, y demás. Puedes diseñar tus Frames y adosarlos a un PageControl y de este modo conseguir los Tabs.

Sería muy útil que nos describieras mejor lo que deseas hacer. De este modo sabremos como ayudarte y tal vez ofrecerte alternativas; y en caso de ser posible, indicarte la solución.

Saludos,

marcoev 05-09-2008 03:06:34

:D muchas gracias por tu respuesta, de hecho es precisamente lo que estaba pensando hacer, crear frames, aunque no tengo mucha experiencia que digamos con este componente, solo los he usado para cosas muy sencillas.

lo que quiero poder hacer es que al dar clic en alguna opcion del menu se cree este tab junto con el frame deseado, cual seria el codigo en este caso? estoy utilizando un componente que se llama TAdvOfficePager el cual es como un TPageControl (Lo uso solo porque es mas estetico).

solo como mas informacion, mi aplicacion es para el manejo de bases de datos, especificamente para control de almacen, y quiero que esta sea muy atractiva desde el punto de vista visual, el menu principal sera del estilo de los paquetes de MS Office 2007 (Ya tengo esos componentes) pero quiero que las ventanas que se abran no sean como los MDI normales, pues no me gusta el efecto que logran cuando se abren y maximizan, y me gustaria que estas estubieran dentro de TABS para poder ver las ventanas abiertas, y que cuando estas sean cerradas, pues el tab desaparezca, siempre tienendo un TAB de inicio abierto, el cual mostrara informacion importante... ese es ps un pequeño analisis del diseño que busco :o:D

Gabriel 05-09-2008 09:15:29

Prueba haber esto....

Código:

try
  Screen.Cursor := crAppStart;
  if not Assigned(FPersonal) then
  begin
  FPersonalDM := TFPersonalDM.Create(Application);
  FPersonal := TFPersonal.Create(Application, TabPersonal);
  end;
  PageControl1.ActivePage := TabPersonal; // TabSet per Personal en formulari principal
  FPersonal.Show;
  Application.ProcessMessages;
 Finally
  Screen.Cursor := crDefault;
 end;

saludos

marcoev 05-09-2008 17:06:31

gracias por tu sugerencia, pero de hecho ya estoy viendo la asignacion de frames a tabs en tiempo de ejecucion, y ya lo asigna tal y como queria, el problema esta en que no quiero que se creen varios tabs para una misma opcion, osea que solo cree uno y que si este ya esta creado que se cambie a ese TAB, pero no encuentro la opcion (todavia) para buscar el tab en cuestion y mostrarlo. alguna sugerencia?

marcoev 05-09-2008 17:54:06

Bueno pues tambien ya encontre la solucion a ese problema a continuacion pongo el codigo por si a alguien mas le interesa.

Código Delphi [-]
var
  pAlmacen:TAdvOfficePage;
  frmAlmacen:TfrmAlmacenes;
...
//pControl es el PageControl :p

  if pControl.IndexOfPage(pAlmacen) < 0 then begin
    pAlmacen:=TAdvOfficePage.Create(Self);
    pAlmacen.AdvOfficePager:=pControl;
    pAlmacen.Caption:='Almacenes';
    frmAlmacen:=TfrmAlmacenes.Create(pAlmacen); //Este es el frame a asignar
    TControl(frmAlmacen).Parent:=pAlmacen;
    frmAlmacen.Align:=alClient;
    pControl.ActivePage:=pAlmacen;
  end
  else
    pControl.ActivePage:=pAlmacen;

ahora estoy con otro problema, estos tabs cuentan con su propio boton para cerrar y al cerrarse se liberan de memoria, el detalle esta en que yo quiero poner un boton dentro del frame el cual el usuario cuando de clic cierre el TAB que esta conteniendo el frame y lo libere. alguna sugerencia?

maeyanes 05-09-2008 18:38:27

Hola...

Solo tienes que hacer (tomando en cuenta que el botón se encuentra dentro del Frame):

Código Delphi [-]
procedure TfrmAlmacen.BtnCloseClick(Sender: TObject);
begin
  Self.Parent.Free
end;

recuerda que el parent del frame es un Tab de tu PageControl...



Saludos...

marcoev 05-09-2008 18:41:38

Gracias por responder, pero no me funciona, me marca un error, este es el codigo que tengo.
Código Delphi [-]
procedure TfrmAlmacenes.btnSalirClick(Sender: TObject);
begin
  Self.Parent.Free;
end;
el mensaje de error es el siguiente:
Cita:

Access violation at address 0042176E in module 'MAlmacen.exe'. Read of address 00000008
alguna sugerencia?


La franja horaria es GMT +2. Ahora son las 03:56:04.

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