Imprimir página | Cerrar ventana

Abrir cuadro de diálogo de color

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86683
Fecha de impresión: 26/Marzo/2026 a las 15:51


Tema: Abrir cuadro de diálogo de color
Publicado por: JGOfisoft
Asunto: Abrir cuadro de diálogo de color
Fecha de publicación: 11/Mayo/2023 a las 18:13
Necesito ayuda para seleccionar un color para un campo de texto al pulsar un botón creado para tal fin en un formulario de access 365.
Muchas gracias anticipadas


-------------
Juan Gonzalez



Respuestas:
Publicado por: xavi
Fecha de publicación: 12/Mayo/2023 a las 09:50
Hola,

Tengo este modulito que me sirve para levantar la paleta de color y obtener el color seleccionado:

Option Compare Database
Option Explicit

' Declaraciones (para aDialogColor)
#If Win64 Then
    Private Declare PtrSafe Function CHOOSECOLOR Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As COLORSTRUC) As Long
#Else
    Private Declare Function CHOOSECOLOR Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As COLORSTRUC) As Long
#End If

' Estructura (para aDialogColor)
Private Type COLORSTRUC
  lStructSize       As Long
  hWnd              As Long
  hInstance         As Long
  rgbResult         As Long
  lpCustColors      As String
  Flags             As Long
  lCustData         As Long
  lpfnHook          As Long
  lpTemplateName    As String
End Type

' Estructura de devolución de valor
Public Type udtSysDialogColor
    IsSelected      As Boolean
    PreSelected     As Variant
    SelectedColor   As Long
End Type
Public uSysDialogColor  As udtSysDialogColor

' Constantes (para aDialogColor)
Private Const CC_SOLIDCOLOR = &H80
Private Const CC_RGBINIT = &H1

Public Function aDialogColor()
    
    Dim x As Long, CS As COLORSTRUC, CustColor(16) As Long
    
    CS.lStructSize = Len(CS)
    
    CS.hWnd = Application.hWndAccessApp
    
    CS.Flags = CC_SOLIDCOLOR Or CC_RGBINIT
    CS.lpCustColors = String$(16 * 4, 0)
    
    ' Were we passed a value in PreselectedColor
    If Not IsMissing(uSysDialogColor.PreSelected) Then
        CS.rgbResult = uSysDialogColor.PreSelected
    End If
    
    x = CHOOSECOLOR(CS)
    If x = 0 Then
        ' ERROR - return preselected Color
        uSysDialogColor.IsSelected = False
        Exit Function
    Else
        ' Normal processing
        uSysDialogColor.SelectedColor = CS.rgbResult
        uSysDialogColor.IsSelected = True
    End If
  
End Function

A ver si te sirve


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: JGOfisoft
Fecha de publicación: 13/Mayo/2023 a las 13:44
Hola Xavi, en que variable se guarda el color seleccionado par poder aplicarlo a un objeto.
Muchas gracias por tu colaboración y un saludo


-------------
Juan Gonzalez


Publicado por: xavi
Fecha de publicación: 13/Mayo/2023 a las 13:49
En la variable uSysDialogColor que utiliza una estructura udtSysDialogColor

Lanzas la función aDialogColor y evalúas el resultado. Algo así:

aDialogColor
If uSysDialogColor.IsSelected Then
  ' Se ha seleccionado. 
  Me!ElCampoTexto.BackColor = uSysDialogColor.SelectedColor
End If


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: JGOfisoft
Fecha de publicación: 29/Junio/2023 a las 16:53
Xavi, muchas gracias por todo, ya lo resolví

-------------
Juan Gonzalez



Imprimir página | Cerrar ventana