Siempre me ha gustado el estilo de Poison Ivy y he estado trabajando una interface parecida.

Imagen


Sí ese estilo en el que las ventanas de conexión estan dentro de un Main Form, este es un pequeño manual de como lograr ese "efecto".
Comenzamos con un proyecto estándar (Solo abran Delphi)
Les aparecera un Form por Default. (En este caso hice pequeño en Form para obtener imagenes pequeñas) Configuramos la propiedad "FormStyle" en "fsMDIForm" como en la imagen, también pueden cambiar el color de fondo pero bueno eso es decisión propia. (No es necesario establecer todos los valores tal cual se muestra en la imagen solo los antes descritos). Ahora ya tenemos nuestro MainForm el contenedor de los demás formularios.
Es hora de crear los hijos, vamos a File>New..>Form
Este nuevo formulario le establecemos el "FormStyle" en "fsMDIChild" llamado ChildForm, en este punto pueden compilar y ejecutar el proyecto y aparecerá algo así

Mostrar/Ocultar

Obviamente le he adornado un poco pero ya tenemos nuestro contenedor y el ChildForm dentro, cabe destacar que el MainForm solo puede contener Menús y StatusBar; ahora nos falta poder abrir multiples instancias del mismo formulario.
Eso se arregla con código...
Añadimos un TMainMenu y creamos un menú, configurenlo como quieran; nombre, texto, etc.
En evento OnClick del menú creado ponemos lo siguiente:

Código: Seleccionar todo

procedure TfrmMain.mnClienteClick(Sender: TObject);
var NewForm: TfrmCliente;
begin
  NewForm := TfrmCliente.Create(Application);
end;
Recuerden añadir la Unit del ChildForm a los Uses del MainForm (TfrmMain: Es el nombre de la clase de nuestro ChildForm).
Creamos una nueva instancia del ChildForm, le pasamos como parámetro la variable Application pues ella contiene todos los datos del proceso.
Lo vuelve a ejecutar y les abre un nuevo formulario cuando dan click, pero ¿como los identificar o controlar?
Para ello nuestro MainForm tiene un array de MDIChild que controla conforme se abren o se cierran formularios dentro de él.
Podemos poner una variable en las declaraciones públicas de la clase del ChildForm para identificar.

Código: Seleccionar todo

TfrmCliente = class(TForm)
    //Componentes del formulario
  private
    //Declaraciones privadas
  public
    ID: Integer; //El identificador del formulario
  end;
Ahora podemos identificar los formularios, solo falta moldear el array MDIChild a nuestras necesidades...

Código: Seleccionar todo

If (Self.MDIChildren[1] as TfrmCliente).ID = 0 then (Self.MDIChildren[1] as TfrmCliente).Close;
Tratamos al formulario como nuestro formulario ChildForm con lo que podemos acceder a su variable ID.
Ahora un inconveniente si tratamos de cerrar un formulario dentro del MainForm solo se minimiza pero no lo necesitamos...
Eso se resuelve facilmente, en el evento OnClose del ChildForm establecemos la Accion para que libere la instancia.

Código: Seleccionar todo

procedure TfrmCliente.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;
Con ello podemos abrir, cerrar e interactuar con los formularios dentro del MainForm, con ellos ya tenemos nuestra aplicación estilo Poison Ivy...

Saludos!
We do what we must, because, we can-> [www.youtube.com/watch?v=Y6ljFaKRTrI]
Pasa a saludar: NeoDark-Labs.BlogSpot.mx
<<<<Proyectos en curso>>>>
[+]Restauración de SSDT
[+]Driver v3 - Ocultar drivers
[+]Anti-rootkit
Responder

Volver a “Delphi”