gswSlp_n.bas Módulo para crear efectos de contenedores con solapas (tabs)
Option Explicit '-------------------------------------------------- ' gswSolapa.BAS Para hacer efecto de solapas (tabs) ' de forma automática y generalizada. ' (c)Guillermo Som Cerezo, 1994-97 ( 4/Dic/94) ' Última revisión (23/Nov/95) ' Preparado para que una solapa pueda estar dentro ' de otra solapa ( 3/Sep/96) ' Esto sólo funciona con VisualBasic 4.0 ' ya que se usa Container (que no tiene VB3) '-------------------------------------------------- Const SolapaSepar = 30 'Separación de las etiquetas 'Posición del ContSolapa Dim Superior As Integer Dim Inferior As Integer 'Posiciones del "marco" donde se encajarán las solapas Dim MarcoX0 As Integer 'Posición de la etiqueta en caso de dibujar arriba Dim MarcoY0 As Integer Dim MarcoX1 As Integer 'Esquina superior izquierda Dim MarcoY1 As Integer Dim MarcoY3 As Integer 'Posición de la etiqueta en caso de dibujar abajo 'Tipo para las solapas Type Solapa Superior As Integer 'Tope Superior Inferior As Integer 'Tope Inferior Arriba As Integer 'Si se dibujan arriba Inicio As Integer 'Posición de inicio para los bucles, antes 0 Numero As Integer 'Número de solapas Activa As Integer 'Solapa activa Inset As Integer '=0 Pulsada, <>0 Salido Efecto3D As Integer 'Efecto 3D en el contenedor Bold As Integer 'Si se imprime los títulos en negrita ActivaAnt As Integer 'Solapa que estaba activa EtiquetaH As Integer 'Altura original de la etiqueta ContenedorT As Integer 'Posición Superior del contenedor ContenedorL As Integer 'Posición Izquierda del contenedor ContenedorH As Integer 'Altura del contenedor ContenedorW As Integer 'Anchura del contenedor End Type Global gSolapa As Solapa Sub ActivarSolapa(frmSolapa As Form) Dim i As Integer AsignarEnSolapa If gSolapa.ActivaAnt <> gSolapa.Activa Then 'Quitar el efecto3D de la solapa activa anterior frmSolapa!LblSolapa(gSolapa.ActivaAnt).Container.Line (frmSolapa!LblSolapa(gSolapa.ActivaAnt).Left - 15, frmSolapa!LblSolapa(gSolapa.ActivaAnt).Top - 15)-(frmSolapa!LblSolapa(gSolapa.ActivaAnt).Left + frmSolapa!LblSolapa(gSolapa.ActivaAnt).Width, frmSolapa!LblSolapa(gSolapa.ActivaAnt).Top + frmSolapa!LblSolapa(gSolapa.ActivaAnt).Height), frmSolapa!ContSolapa(gSolapa.Inicio).BackColor, BF End If 'Marco de los contenedores '(antes al final de DibujarSolapas) (18/Sep/95) With frmSolapa!LblSolapa(gSolapa.Activa) If gSolapa.Efecto3D Then .Container.Line (MarcoX0 - 45, Inferior + 30)-(MarcoX0 - 45, Superior - 45), QBColor(15) .Container.Line -(MarcoX0 + gSolapa.ContenedorW + 30, Superior - 45), QBColor(15) .Container.Line -(MarcoX0 + gSolapa.ContenedorW + 30, Inferior + 30), QBColor(8) .Container.Line -(MarcoX0 - 45, Inferior + 30), QBColor(8) Else .Container.Line (MarcoX0 - 15, Inferior)-(MarcoX0 - 15, Superior - 15), QBColor(15) .Container.Line -(MarcoX0 + gSolapa.ContenedorW, Superior - 15), QBColor(15) .Container.Line -(MarcoX0 + gSolapa.ContenedorW, Inferior), QBColor(8) .Container.Line -(MarcoX0 - 15, Inferior), QBColor(8) End If End With For i = gSolapa.Inicio To gSolapa.Inicio + gSolapa.Numero - 1 frmSolapa!ContSolapa(i).Visible = False frmSolapa!LblSolapa(i).FontBold = False frmSolapa!LblSolapa(i).Height = gSolapa.EtiquetaH If gSolapa.Arriba Then frmSolapa!LblSolapa(i).Top = MarcoY1 Else frmSolapa!LblSolapa(i).Top = MarcoY3 End If Next 'Posicionar la lengüeta de la solapa activa, desplazada If gSolapa.Arriba Then frmSolapa!LblSolapa(gSolapa.Activa).Top = frmSolapa!LblSolapa(gSolapa.Activa).Top - 45 '60 End If frmSolapa!LblSolapa(gSolapa.Activa).Height = frmSolapa!LblSolapa(gSolapa.Activa).Height + 45 '60 If gSolapa.Bold Then frmSolapa!LblSolapa(gSolapa.Activa).FontBold = True End If For i = gSolapa.Inicio To gSolapa.Inicio + gSolapa.Numero - 1 If gSolapa.Inset Then Efecto3DN E3D_INSET, frmSolapa!LblSolapa(i) ', frmSolapa!LblSolapa(i) Else Efecto3DN E3D_RAISED, frmSolapa!LblSolapa(i) ', frmSolapa!LblSolapa(i) End If Next 'ContSolapa, será un "Contenedor" para cada solapa. frmSolapa!ContSolapa(gSolapa.Activa).Visible = True If gSolapa.Efecto3D Then Efecto3DN gSolapa.Efecto3D, frmSolapa!ContSolapa(gSolapa.Activa) ', frmSolapa!ContSolapa(gSolapa.Activa) End If For i = gSolapa.Inicio To gSolapa.Inicio + gSolapa.Numero - 1 frmSolapa!LblSolapa(i).Visible = True Next '"Activar" la solapa activa If gSolapa.Inset Then Efecto3DN E3D_RAISED, frmSolapa!LblSolapa(gSolapa.Activa) ', frmSolapa!LblSolapa(gSolapa.Activa) End If 'Línea completa del contenedor If gSolapa.Arriba Then frmSolapa!LblSolapa(gSolapa.Activa).Container.Line (MarcoX0 - 15, Superior - 15)-(MarcoX0 + gSolapa.ContenedorW, Superior - 15), QBColor(15) Else frmSolapa!LblSolapa(gSolapa.Activa).Container.Line (MarcoX0 - 15, Inferior)-(MarcoX0 + gSolapa.ContenedorW, Inferior), QBColor(8) End If 'Línea de la solapa activa. If gSolapa.Arriba Then frmSolapa!LblSolapa(gSolapa.Activa).Container.Line (frmSolapa!LblSolapa(gSolapa.Activa).Left, Superior - 15)-(frmSolapa!LblSolapa(gSolapa.Activa).Left + frmSolapa!LblSolapa(gSolapa.Activa).Width + SolapaSepar - SolapaSepar / 2, Superior - 15), QBColor(7) Else frmSolapa!LblSolapa(gSolapa.Activa).Container.Line (frmSolapa!LblSolapa(gSolapa.Activa).Left, Inferior)-(frmSolapa!LblSolapa(gSolapa.Activa).Left + frmSolapa!LblSolapa(gSolapa.Activa).Width, Inferior), QBColor(7) End If gSolapa.ActivaAnt = gSolapa.Activa End Sub Private Sub AsignarEnSolapa() 'Posiciones del "marco" de las solapas MarcoX1 = gSolapa.ContenedorL MarcoY1 = gSolapa.ContenedorT 'Esquina superior de la solapa MarcoX0 = MarcoX1 - 120 MarcoY0 = MarcoY1 + gSolapa.EtiquetaH ' MarcoY3 = MarcoY1 + gSolapa.ContenedorH + 15 If gSolapa.Arriba Then Superior = MarcoY0 + 15 Inferior = MarcoY0 + gSolapa.ContenedorH + 15 Else Superior = MarcoY1 Inferior = MarcoY3 - 15 End If End Sub Sub DibujarSolapas(frmSolapa As Form) Dim i As Integer Dim X As Integer Dim Ancho As Integer Dim Arriba As Integer If frmSolapa.WindowState = vbMinimized Then Exit Sub 'Si no está asignado el tamaño del contenedor With frmSolapa!LblSolapa(gSolapa.Inicio) If gSolapa.ContenedorW = 0 Then gSolapa.ContenedorH = frmSolapa!ContSolapa(gSolapa.Inicio).Height gSolapa.ContenedorW = frmSolapa!ContSolapa(gSolapa.Inicio).Width gSolapa.ContenedorT = .Top gSolapa.ContenedorL = .Left gSolapa.EtiquetaH = .Height End If End With 'Asignar los valores globales AsignarEnSolapa 'Dibujar las solapas frmSolapa!LblSolapa(gSolapa.Inicio).Container.Cls For i = gSolapa.Inicio To gSolapa.Inicio + gSolapa.Numero - 1 frmSolapa!LblSolapa(i).Visible = False frmSolapa!ContSolapa(i).Visible = False Next If gSolapa.Arriba Then frmSolapa!LblSolapa(gSolapa.Inicio).Top = MarcoY1 Else frmSolapa!LblSolapa(gSolapa.Inicio).Top = MarcoY3 End If 'Situar los contenedores For i = gSolapa.Inicio To gSolapa.Inicio + gSolapa.Numero - 1 With frmSolapa!ContSolapa(i) .Left = MarcoX0 .Top = Superior .Width = gSolapa.ContenedorW .Height = gSolapa.ContenedorH End With Next Arriba = frmSolapa!LblSolapa(gSolapa.Inicio).Top For i = gSolapa.Inicio + 1 To gSolapa.Inicio + gSolapa.Numero - 1 frmSolapa!LblSolapa(i).Top = Arriba Next Ancho = frmSolapa!LblSolapa(gSolapa.Inicio).Width X = MarcoX1 For i = gSolapa.Inicio To gSolapa.Inicio + gSolapa.Numero - 1 frmSolapa!LblSolapa(i).Left = X frmSolapa!LblSolapa(i).FontBold = False If gSolapa.Inset Then Efecto3DN E3D_INSET, frmSolapa!LblSolapa(i) ', frmSolapa!LblSolapa(i) Else Efecto3DN E3D_RAISED, frmSolapa!LblSolapa(i) ', frmSolapa!LblSolapa(i) End If X = X + Ancho + SolapaSepar Next ActivarSolapa frmSolapa End Sub