PDA

Ver la Versión Completa : Necesito quitar la barra de titulo de un Formulario


OscarBravo
02-06-2010, 02:04:05
De antemano gracias por la ayuda.

Cuando los formularios son Modales se puede quitar la barra de título de los con BorderStyle = bsNone

Pero si tengo una aplicación MDI, donde tengo un Formulario principal que es de tipo MDI es decir la propiedad [FONT='Verdana','sans-serif']FormStyle es fsMDIForm y los otros formularios son hijos, es decir su propiedad FormStyle es fsMDIChild.
Después de haber establecido la propiedad FormStyle a fsMDIChild a un formulario, no se puede quitar los bordes con
BorderStyle = bsNone.
¿Sabe alguien como quitar los bordes con de un formulario de tipo fsMDIChild?

Caro
02-06-2010, 02:48:19
Hola OscarBravo, revisa esta página (http://delphi.about.com/od/delphitips2007/qt/mdi_hide_title.htm)

Saluditos

OscarBravo
02-06-2010, 05:55:32
Gacias por tu respuesta.

Seguí las recomendaciones de la página que me recomendaste, pero no me funcionó, no se si es por el delphi 2009 que estoy utilizando.

Este fue el procedimiento que implementé. Tal vez lo estoy usnado mal.
Procedure TfrmAfiliados.CreateParms(var Params: TCreateParams);
begin
BorderStyle := bsNone;
inherited;
Params.style := Params.style and not WS_EX_STATICEDGE;
//Params.ExStyle := Params.ExStyle or WS_EX_STATICEDGE;
// Params.Style := Params.Style or WS_SIZEBOX;
end;

Neftali [Germán.Estévez]
02-06-2010, 09:44:43
A mi me ha funcionado perfectamente en Delphi6 y Delphi2009;

Asegúrate de que has definido el procedimiento utilizando el override, para asegurarte de que se ejecuta.

procedure CreateParams(var Params: TCreateParams); override;

Caro
02-06-2010, 16:34:46
Hola de nuevo, como te dice Neftali debes sobreescribir el metodo y puede que te falte el override, también veo que el nombre del procedimiento que has puesto es CreateParms cuando debería ser CreateParams y utiliza WS_CAPTION en ves de WS_EX_STATICEDGE o también WS_BORDER.


procedure CreateParams(var Params: TCreateParams); override;

................................................

procedure TfrmAfiliados.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.style := Params.style and not WS_CAPTION;
end;

//o

procedure TfrmAfiliados.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.style := Params.style and not WS_BORDER;
end;


Saluditos

OscarBravo
09-06-2010, 20:52:58
Compañeros. Gracias.

Ya me funcionó.

OscarBravo
10-06-2010, 19:58:21
Lo que pretendo al ocultar las barras de título de los formularios es hacer una aplicación parecida al explorador de Windows XP. (Del lado izquierdo puedes elegir cualquier opción y en el panel de la derecha muestra el contenido de la carpeta seleccionada en las opciones del panel izquierdo)[/font]
Claro que en mi aplicación pretendo mostrar los formularios o ventanas que el usuario seleccione, más no contenidos de carpetas. Para ello cloqué un TreeView alineado alLeft, en el formulario principal, el cual es un formulario MDI. Cuando el usuario hace clic en una de las opciones del TreeView, se crea un formulario de estilo fsMDIChild, de modo que puede abrir los formularios que sean necesarios (más de uno al mismo tiempo).

Asi Creo el/los formularios:
Utilizo una variable booleana (una por cada formulario) para controlar que cada formulario se cree una y solo una vez, en este caso la variable se llama bCreatedContratos.

Código Delphi [-] (http://www.clubdelphi.com/foros/#)
If TreeViewMain.Selected.Text = 'Contratos' Then Begin
If Not bCreatedContratos Then TfrmContratos.Create(Self);
End;




En el evento Create del formulario coloco la variable en true (Así solo se crea una vez y para volverlo a crear debe ser cerrado previamente)


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
procedure TFrmContratos.FormCreate(Sender: TObject);
begin
FrmMain.bCreatedContratos := True;
end;




En el evento CLose del formulario la variable booleana la coloco en false

Código Delphi [-] (http://www.clubdelphi.com/foros/#)
[FONT=Calibri]procedure TFrmContratos.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FrmMain.bCreatedContratos := False;
Action := CaFree;
end;





Es por eso que le quito las barras de titulo a los formularios (Creo que así logro simular el explorador de Windows XP), el problema es que si los formularios no tienen barras de titulo tampoco pueden tener la opción de minimizar y por ende cuando un formulario se abre Deja los otros formularios que están abiertos “Escondidos” y no es posible volver a trabajar con ellos, porque el último formulario abierto no deja hacer clic en los anteriormente abiertos, la idea es volver a hacer clic en la opción respectiva del treeview para volver a ver el formularioque ya esta creado, pero no se como traerlo al frente para continuar trabajando con él
TRABAJÉ también CON FRAMES.
Intenté también utilizando Frames previamente creados y arrastrados al formulario principal, es decir cada formulario sería reemplazado con un frame. Una vez colocados los frames en el formulario principal solo tengo que esconder los que no van a ser utilizados y mostrar solo el que será utilizado ( Frame actual). Pero me parece muy engorroso estar ocultando / mostrando todos los frames.

¿Conoce alguien alguna manera mas sencilla de hacer todo esto?