Sentinel 95 (16 bits)



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

[Volver a la página del Sentinel 95]

ir al índice