crea un frm... digamos... frmPrincipal...
esto iria en Init: * Sidebar estilo menú vertical
* Formulario principal (ShowWindow = 2 para MDI, o 1 para normal)
* Crear contenedor sidebar
THISFORM.AddObject("contSidebar", "Container")
WITH THISFORM.contSidebar
.Top = 0
.Left = 0
.Width = 250
.Height = THISFORM.Height
.BackColor = RGB(230,230,230)
.Anchor = 15 && top, bottom, left
ENDWITH
* Etiqueta: Facturación y Ventas
THISFORM.contSidebar.AddObject("lblFacturacion", "Label")
WITH THISFORM.contSidebar.lblFacturacion
.Top = 10
.Left = 10
.Caption = "Facturación y Ventas"
.FontBold = .T.
ENDWITH
* Botón: Ventas comparativas
THISFORM.contSidebar.AddObject("cmdVentasComparativas", "CommandButton")
WITH THISFORM.contSidebar.cmdVentasComparativas
.Top = 40
.Left = 20
.Width = 200
.Caption = "Ventas comparativas anuales"
.ToolTipText = "Abre el informe comparativo"
.Anchor = 8
ENDWITH
* Botón: Impuestos por período
THISFORM.contSidebar.AddObject("cmdImpuestos", "CommandButton")
WITH THISFORM.contSidebar.cmdImpuestos
.Top = 70
.Left = 20
.Width = 200
.Caption = "Impuestos por período"
.ToolTipText = "Ver impuestos"
.Anchor = 8
ENDWITH
* Separador: Mantenimiento
THISFORM.contSidebar.AddObject("lblMantenimiento", "Label")
WITH THISFORM.contSidebar.lblMantenimiento
.Top = 110
.Left = 10
.Caption = "Mantenimiento"
.FontBold = .T.
ENDWITH
* Botón: Clientes
THISFORM.contSidebar.AddObject("cmdClientes", "CommandButton")
WITH THISFORM.contSidebar.cmdClientes
.Top = 140
.Left = 20
.Width = 200
.Caption = "Clientes"
.ToolTipText = "Mantenimiento de clientes"
.Anchor = 8
ENDWITH
* Botón: Vendedores
THISFORM.contSidebar.AddObject("cmdVendedores", "CommandButton")
WITH THISFORM.contSidebar.cmdVendedores
.Top = 170
.Left = 20
.Width = 200
.Caption = "Vendedores"
.ToolTipText = "Mantenimiento de vendedores"
.Anchor = 8
ENDWITH
para evento clic: PROCEDURE cmdVentasComparativas.Click
* Llamar a un formulario o procedimiento
DO FORM frmVentasComparativas
ENDPROC
PROCEDURE cmdClientes.Click
DO FORM frmClientes
ENDPROC
PROCEDURE cmdVendedores.Click
DO FORM frmVendedores
ENDPROC
si queres que Init expanda este seria el codigo completo: * Crear contenedor sidebar
THISFORM.AddObject("contSidebar", "Container")
WITH THISFORM.contSidebar
.Top = 0
.Left = 0
.Width = 250
.Height = THISFORM.Height
.BackColor = RGB(230,230,230)
.Anchor = 15 && top, bottom, left
ENDWITH
* Etiqueta clickeable: Facturación y Ventas
THISFORM.contSidebar.AddObject("btnFacturacion", "CommandButton")
WITH THISFORM.contSidebar.btnFacturacion
.Top = 10
.Left = 10
.Width = 230
.Caption = "▶ Facturación y Ventas"
.FontBold = .T.
.Tag = "0" && colapsado
ENDWITH
* Sub-botón 1: Ventas comparativas
THISFORM.contSidebar.AddObject("cmdVentasComparativas", "CommandButton")
WITH THISFORM.contSidebar.cmdVentasComparativas
.Top = 45
.Left = 30
.Width = 200
.Caption = "Ventas comparativas"
.Visible = .F.
ENDWITH
* Sub-botón 2: Impuestos
THISFORM.contSidebar.AddObject("cmdImpuestos", "CommandButton")
WITH THISFORM.contSidebar.cmdImpuestos
.Top = 75
.Left = 30
.Width = 200
.Caption = "Impuestos por período"
.Visible = .F.
ENDWITH
* Vincular evento de clic a botón de sección
BINDEVENT(THISFORM.contSidebar.btnFacturacion, "Click", THISFORM, "ToggleFacturacion")
agrega
ToggleFacturacion
PROCEDURE ToggleFacturacion
LOCAL estado
estado = THIS.contSidebar.btnFacturacion.Tag
IF estado = "0"
* Expandir
THIS.contSidebar.btnFacturacion.Caption = "▼ Facturación y Ventas"
THIS.contSidebar.cmdVentasComparativas.Visible = .T.
THIS.contSidebar.cmdImpuestos.Visible = .T.
THIS.contSidebar.btnFacturacion.Tag = "1"
ELSE
* Colapsar
THIS.contSidebar.btnFacturacion.Caption = "▶ Facturación y Ventas"
THIS.contSidebar.cmdVentasComparativas.Visible = .F.
THIS.contSidebar.cmdImpuestos.Visible = .F.
THIS.contSidebar.btnFacturacion.Tag = "0"
ENDIF
ENDPROC
Cuando haces clic en ▶ Facturación y Ventas
, se despliega:
puedes: Repetir la estructura para otras secciones: Inventarios
, Mantenimiento
, etc.
Usar SHAPE
como separadores.
Aplicar iconos (Image
) si quieres más estilo.
me avisas como te fue