Ago 092011
 

Aprovechando la creación del ucMDITaskBar cree este control de usuario para poner un TabControl a un formulario MDI, el cual no requirió muchos cambios, aproveche el ucTabStrip de Raul338, su uso es muy sencillo sólo basta con poner un control sobre el formulario MDI y el control se encarga del resto.
Si bien hay algunos códigos similares dando vuelta por la web, este tiene algunas opciones extra, como por ejemplo poner la cruz de cerrar en cada ficha, invocar el SysMenu de cada formulario con el click derecho en la ficha, además, no requiere código extra.

Detalles de sus propiedades y funciones:

  • Initialize: Esta función es encaso que si dentro del evento Load del formulario MDI se carga algún formulario es necesaria llamarla para inicializar el control antes que el formulario, de lo contrario lo este lo ara automáticamente, su único parámetro es el hwnd del formulario MDI.
  • IconSize: Devuelve o establece el tamaño de icono que queramos utilizar.
  • MinTabWidth: Devuelve o establece el tamaño mínimo para cada ficha.
  • MaxLen: Devuelve o establece el largo del texto que se quiera mostrar, supongamos que un formulario tienen un Caption muy extenso la ficha seria muy larga, pues con esta propiedad podemos hacer que se limite a cierta cantidad de caracteres y así establecer un ancho máximo para las fichas, si dejamos 0 mostrara el Caption completo.
  • CloseButtonVisible: Devuelve o establece si el control mostrara la cruz de cerrar en cada ficha
  • CloseButtonStyle: Devuelve o establece el estilo del botón cerrar de la ficha, cuenta con dos estilos
  • MultiLine: Devuelve o establece si el control mostrara las fichas en una sola fila o en varias.
  • ShowMenu: Devuelve o establece si el usuario puede invocar el SysMenu al hacer click derecho en cada ficha
  • Enabled: Devuelve o establece si el control está o no habilitado
  • Font: Devuelve o establece la Fuente para el TabControl.
  • hwndTabControl: Devuelve  el Handle del SysTabControl32
  • hwndUserControl: Devuelve  el Handle del control de usuario
  • hwndMDIClient: Devuelve el Handle MDIClient del formulario MDI

TabMDI.png

Ago 032011
 

Control de usuario para crear una barra de tareas dentro de un formulario MDI, actúa prácticamente igual que la barra de tareas del explorador de Windows, la idea es darle al usuario una mejor forma de moverse dentro del formulario MDI, sobretodo cuando hay muchas ventanas abiertas. su uso es muy sencillo solo vasta con agregar un solo control el MDI y este se encarga de hacer todo el trabajo.
En el ejemplo de descarga como complemento  agregue dos módulos, uno de ellos es la clase ClsButtonNC para crear un efecto muy parecido al botón inicio de Windows, y el otro modulo es MdiFullScreen (que se encuentra en la sección de Tips) este ultimo pone en pantalla completa al formulario MDI cuando esta maximizado.
El control ucMDItaskBar internamente crea un ToolBar el cual cuenta con una propiedad para ponerle un Skin, también tiene soporte para caption Unicode e iconos de 32 bits si es que algunos de los formularios dentro del MDI tiene estos elementos.
Tal como como Windows si no se quiere mostrar el formulario en la barra, solo vasta con que pongan al formulario hijo en tiempo de edición ShowInTaskBar = False.
El ucMDItaskBar utiliza Subclasificación y es SafeMode (Modo seguro) , pero tengan en cuenta que la clase ClsButtonNC no, asi que No presionar el Stop del IDE de VB6.

Detalles de sus propiedades y funciones:

  • Initialize: Esta función es encaso que si dentro del evento Load del formulario MDI se carga algún formulario es necesaria llamarla para inicializar el control antes que el formulario, de lo contrario lo este lo hará automáticamente, su único parámetro es el hwnd del formulario MDI.
  • BackColor: En caso que no se utilice un Skin este utiliza el color del fondo asignado.
  • ButtonsWidth: Devuelve o establece el ancho de los botones de la barra.
  • ButtonsHeight: Devuelve o establece el alto de los botones de la barra.
  • IconSize: Devuelve o establece el tamaño de icono que queramos utilizar.
  • SetIndent: Devuelve o establece la ubicación izquierda donde comienzan a mostrarse los botones, esto es por si queremos utilizar un botón Inicio, tener en cuenta que agregar un control sobre la barra no dará buenos resultados, lo aconsejable es utilizar la clase ClsButtonNC, o utilizar un PictureBox como contenedor para poner el botón y al lado la barra.
  • Align: Devuelve o establece la ubicación por donde se moverá la barra.(si bien soporta todas las posiciones lo aconsejable es vbAlignBottom)
  • SkinPicture: Devuelve o establece una imagen que se utilizara como decoración de la barra (el formato utilizado pueden verlo dentro del ejemplo).
  • MoveMode: Indica a la clase en qué sentido debe mover el botón cuando la ventana padre se mueva o cambie de tamaño.
  • Enabled: Devuelve o establece si el control está o no habilitado
  • Font: Devuelve o establece la Fuente para la barra.
  • hwndToolbar: Devuelve  el Handle del ToolbarWindow32 de la barra
  • hwndUserControl: Devuelve  el Handle del control de usuario
  • hwndMDIClient: Devuelve el Handle MDIClient del formulario MDI

ucMDItaskbar1
ucMDItaskbar1

Jul 272009
 

Este es un módulo que nos permitirá poner un formulario MDI en modo FullScreen cuando está maximizado, la ventaja de esto es ganarle un poco más de espacio al monitor, y sobre todo cuando el software tiene un papel protagónico en el PC que lo ejecuta.

Código del módulo bas «MdiFullScreen»

Option Explicit
 
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
 
Private Const HWND_TOPMOST          As Long = -1
Private Const HWND_NOTOPMOST        As Long = -2
 
Private Const SWP_NOACTIVATE        As Long = &H10
Private Const SWP_NOSIZE            As Long = &H1
Private Const SWP_NOMOVE            As Long = &H2
Private Const SWP_SHOWWINDOW        As Long = &H40
 
Private Const WS_MAXIMIZEBOX        As Long = &H10000
Private Const WS_MINIMIZEBOX        As Long = &H20000
Private Const WS_THICKFRAME         As Long = &H40000
Private Const WS_SYSMENU            As Long = &H80000
Private Const WS_CAPTION            As Long = &HC00000
 
Private Const SC_RESTORE            As Long = &HF120&
 
Private Const WM_ACTIVATEAPP        As Long = &H1C
Private Const WM_HOTKEY             As Long = &H312
Private Const WM_SYSCOMMAND         As Long = &H112
 
Private Const GWL_STYLE             As Long = (-16)
Private Const GWL_WNDPROC           As Long = (-4)
 
Const MyHotKey                      As Long = &H1000
 
Dim WndStyle As Long
Dim bFullScreen As Boolean
Dim PrevProc As Long
 
 
Public Sub ShowFullScreen(hwnd As Long) 
    If Not bFullScreen Then 
        bFullScreen = True 
        Call RegisterHotKey(hwnd, MyHotKey, 0, vbKeyEscape) 
        WndStyle = GetWindowLong(hwnd, GWL_STYLE) 
        SetWindowLong hwnd, GWL_STYLE, WndStyle And Not WS_MAXIMIZEBOX And Not WS_MINIMIZEBOX And Not WS_THICKFRAME And Not WS_CAPTION
        SetWindowPos hwnd, HWND_TOPMOST, 0, 0, Screen.Width / 15, Screen.Height / 15, SWP_NOACTIVATE 
        PrevProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc) 
    End If 
End Sub
 
Public Sub EndFullScreen(hwnd)
    If bFullScreen Then
        bFullScreen = False
 
        SetWindowLong hwnd, GWL_STYLE, WndStyle 
        SendMessage hwnd, WM_SYSCOMMAND, SC_RESTORE, ByVal 0& 
        SetWindowLong hwnd, GWL_WNDPROC, PrevProc
 
        Call UnregisterHotKey(hwnd, MyHotKey)
 
    End If
End Sub
 
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
 
    If uMsg = WM_ACTIVATEAPP Then
        EndFullScreen hwnd
    End If
 
    If uMsg = WM_HOTKEY Then
        If wParam = MyHotKey Then
            EndFullScreen hwnd
        End If
    End If
 
End Function

Código en el Formulario MDI»

Option Explicit
 
Private Sub MDIForm_Load()
Form1.Show
End Sub
 
Private Sub MDIForm_Resize()
    If Me.WindowState = vbMaximized Then
        ShowFullScreen Me.hwnd
    Else
        EndFullScreen Me.hwnd
    End If
 Posted by at 8:00  Tagged with: