Sección de controles Ocx para Visual basic , Dll , Activex

152 - Docking - controles ocx para crear formularios flotantes y acoplables

<Volver> - Anterior - Siguiente



 

 

Contenido:

 

 

 

 


1 - Control Activex Open Source para hacer docking

Este control está muy bueno y permite usar en nuestras aplicaciones formularios flotantes y acoplables , como los que utiliza por ejemplo el propio visual basic en el IDE y muchas otras aplicaciones similares.

Vista previa de un formulario Mdi con tres formularios acoplados y un form normal o fijo ( el del medio )

vista previa del formulario mdi con los forms flotantes

 

El ocx, no tiene interfaz gráfica, y para hacer el docking se realiza mediante código , es decir en tiempo de ejecución

Si bien en el código fuente para descargar, hice un ejemplo bien simple (el de la imagen ), para crear tres formularios flotantes, a continuación detallo las principales propiedades, eventos y métodos para poder usarlo

 

Antes que nada, obviamente hay que agregar el ocx al proyecto. Luego se debe añadir una instancia del control, por ejemplo si lo vamos a utilizar en un formulario Mdi, agregamos una en el mismo ( no es necesario agregar el ocx en todos los forms, solo el formulario principal , es decir en el contenedor )

El control tiene un método llamado "GrabMain". A este método le debemos indicar el Hwnd del formulario que será de contenedor, en este caso siguiendo el ejemplo, es el formulario Mdi, por lo tanto debemos ejecutar en el FormLoad:

TTabDock1.GrabMain Me.hWnd

 

Luego, por ejemplo para agregar un formulario acoplable y que se cree un panel , se debe usar el método AddForm. Por ejemplo si quiero agregar un formulario llamado Form1 , seria :

TTabDock1.AddForm Form1, tdDocked, tdAlignLeft, "Form1"

 

Los parámetros principales son el primero , el tercero y el cuarto. El primer parámetro es el nombre del form, el tercero indica la alineación ( Izquierda, derecha , arriba o abajo ), y el cuarto es un Key o clave para ese formulario, para después poder hacer referencia a este form mediante dicha Key, por ejemplo para descargarlo, ocultarlo, removerlo y establecerle propiedades y demás

Pero al hacer lo anterior, el formulario todavia no aparece, es decir le indica al control que estamos agregando uno, pero para poder hacerlo visible , debemos ejecutar el método FormShow, indicándole la clave

TTabDock1.FormShow "Form1"

 

Si luego queremos ocultarlo, usamos el método contrario a FormShow, que se llama FormHide , Ej .

TTabDock1.FormHide "Form1"

 

Para agregar mas formularios y paneles , realizar el mismo paso anterior para los que queramos añadir

Nota importante: Los formularios que se van a usar como flotantes o acoplables, no deben poseer la propiedad MdiChild en True , por que si no se produce un error en tiempo de ejecución

Otra cosa, el último parámetro del método AddFom, es opcional , si no se indica ningún valor, el formulario que se agrega, se acopla al panel dependiendo de la alineación que le demos (arriba, abajo , derecha iquierda definida en el tercer parámetro ). Pero también tiene una opción para hacer que el formulario sea flotante, es decir que no esté acoplado o con Docking . En este caso se debe usar el valor tdDockFloat

 

Eliminar y volver a establecer el formulario

Si en algún momento se quiere eliminar el formulario flotante o acoplable, y que sea un form normal, es decir quitar el Docking, se puede usar el método FormUndock, indicándole como parámetro, la clave de ese form , por ejemplo

TTabDock1.FormUndock "Form1"

 

Para volver a hacer el Docking a ese formulario , usar el método contrario que se llama Formdock, Ej.

TTabDock1.Formdock "Form1"

 

Recorrer los formularios .

Para saber los formularios que se han agregado , podemos usar la colección DockedForms en un bucle :

( Esto visualiza el Key )

Dim i As Integer
    
    For i = 1 To TTabDock1.DockedForms.Count
        MsgBox TTabDock1.DockedForms(i).Key, vbInformation
    Next 

 

 

Propiedades

El control tiene algunas propiedades, por ejemplo para establecer el borde de estilo de los paneles, el color de fondo, una propiedad llamada Resizable, que indica si el panel se podrá redimensionar o no, propiedad Width y Height para poder establecer el ancho y alto de los paneles , propiedad Persistant que indica si al descargar la aplicación , la disposición y tamaño de los mismos se mantiene , es decir recuerda la configuración

Ejemplos :

Esto establece el fondo de todos los paneles en color blanco

TTabDock1.BackColor = vbWhite

Esto le establece el estilo del borde en Raised a todos los paneles cargados:

TTabDock1.BorderStyle = bdrRaised

La siguiente linea , hace que se recuerde la ubicación y tamaño de los paneles al descargar el programa

TTabDock1.Persistant = True

 

Para poder acceder a las propiedades , pero de un panel en particular, se puede hacer mediante la colección Panel del objeto DockedForms

Lo siguiente, cambia el color de fondo del panel que tiene como clave "Form1"

TTabDock1.DockedForms.item("Form1").Panel.BackColor = vbBlue

 

Esto otro , establece el panel con vlave "Form1", en la parte inferior, y le establece un alto de 2500 Twips

TTabDock1.DockedForms.item("Form1").Panel.Align = tdAlignBottom
TTabDock1.DockedForms.item("Form1").Panel.Height = 2500

 

Esto otro, hace que un panel en particualr no se pueda redimensionar mediante el mouse :

TTabDock1.DockedForms.item("Form1").Panel.Resizable = False

 

Si queremos averiguar si un Panel se encuentra visible :

MsgBox TTabDock1.DockedForms.item("Form1").Panel.Visible

 

 

Para poder establecer el ancho y alto de un panel, debemos hacerlo accediendo a las propiedades Width y Height de la colección Panel del objeto DockedForms

Acá establecemos en 1500 Twips para el ancho del panel, que se llama "Form1"

TTabDock1.DockedForms.item("Form1").Panel.Width = 1500

 

Nota: Si el panel está puesto en forma horizonal, no se puede modificar la propiedad Width, y al contrario, si el panel está colocado en forma vertical, no se puede establecer la propiedad Height, ya que si no dará error. Por ejemplo , en la imagen de arriba, el panel izquierdo, si ejecutamos esta línea en tiempo de ejecución para cambiarle el alto, se producirá un error

TTabDock1.DockedForms.item("Form1").Panel.Height = 1000

por lo tanto , como el panel está ubicado en forma vertical. solo se podrá establecer el ancho.

Esto no daria error, y le cambiaría el ancho correctamente con un valor de 250 pixeles

TTabDock1.DockedForms("Form1").Panel.Width = (250 * Screen.TwipsPerPixelX)

 

Eventos

También tiene 8 eventos que permiten saber cuando por ejemplo se redimensiona un panel, cuando se hace clic en el caption de un form, cuando se hace Docking, cuando se elimina , cuando se oculta.

Por ejemplo al ocultar un formulario o mostrarlo con los métodos Formshow y FormHide, se dispara el evento TTabDock1_FormShow y TTabDock1_FormHide respectivamente

Evento FormHide

Private Sub TTabDock1_FormHide(ByVal DockedForm As TabDock.TDockForm)

 

y para acceder al formulario , podemos consultar la variable de objeto DockedForm del parámetro del evento, por ejemplo en un Select case.:

Private Sub TTabDock1_FormHide(ByVal DockedForm As TabDock.TDockForm)
    
    Select Case DockedForm.Key
        
        Case "Form1"
             ' .. código
        Case "Form2"
             ' .. código
    End Select
    
End Sub 

 

En el caso anterior, se consulta la clave o Key, para saber cual es el formulario que se ha ocultado .

 

El evento PanelResize , se dispara al redimensionar un panel. En este evento se puede consultar la variable panel para saber cual se está redimensionado . Por ejemplo lo siguiente, hace que el panel, con el Index 3, si se redimensiona mas allás de los 2500 Twips, anula el redimensionado:

Private Sub TTabDock1_PanelResize(ByVal Panel As TabDock.TTabDockHost)
    
    If Panel.Index = 3 Then
        If Panel.Width >= 2500 Then
            Panel.Width = 2500
        End If
    End If

End Sub  

 

Nota: en total puede haber cuatro paneles, Un panel a la izquierda, otro a la derecha, otro arriba y otro abajo. Al panel superior , le corresponde como index el valor 1. Al inferior el 2, al izquierdo el 3, y al derecho el 4.

De esta manera podemos saber que panel se está manipulando:

Private Sub TTabDock1_PanelResize(ByVal Panel As TabDock.TTabDockHost)
    
    ' consulta el index del panel
    Select Case Panel.Index
        Case 1: MsgBox "superior", vbInformation
        Case 2: MsgBox "inferior", vbInformation
        Case 3: MsgBox "izquierdo", vbInformation
        Case 4: MsgBox "derecho", vbInformation
    End Select
End Sub  

 


 

Nota: el control tiene un pequeño bug, y es que , es posible que al producirse un error en el programa, el control pierda la referencia activex en el proyecto, y luego si se quiere volver a ejecutar el programa, se muestra el tipico mensaje de visual basic "El componente Activex no puede crear el objeto". En ese caso, eliminar el ocx del formulario, guardar y cerrar el proyecto, volver a abrirlo y colocar una nueva instancia del control

 

Descarga ocx - Tab Dock Control

 

Desde este otro enlace, podés descargar el código fuente de este control, con un ejemplo muy completo de como utilizarlo

Descargar código fuente - Control ocx TabDock

 


2 - Frm Docker

Este es otro control gratuito para poder hacer docking.

El zip incluye un ejemplo como el que muestra la siguiente imagen, que contiene un formulario Mdi, y cuatro formulario acoplados.

 

 

A diferencia del anterior control , este necesita una instancia del ocx , en cada form que se hará docking. Y en el Form Mdi en el cual se acoplan , se debe agregar un control Picturebox para poder contener e incrustar al mismo

 

Descargar

 


3 - Toolbar Docking

Ejemplo que muestra como hacer docking a un formulario para utilizarlo como Toolbar acoplable.

Permite acoplarlo en la parte inferior, superior, izquierda y derecha del formulario MDI principal

 

Nota. el programa utiliza subclasificación, por lo tanto asegurarse de que no se produzcan errores, ya que si no se cerrará el IDE de vb.

Tampoco cerrar el IDE con el Stop, hacerlo con el botón cerrar del formulario MDI principal

Descargar ejemplo

 


Relacionados

 


Buscar en Recursos vb con Google