Não encontrei nenhum artigo no Knowledgebase, tampouco aqui no Fórum, sobre como criar uma interface elegante para que o usuário selecione uma determinada cor existente na paleta de cores do Windows. Pesquisando no Google consegui reunir algumas informações sobre como utilizar a biblioteca “Microsoft Commom Dialog Control” para essa finalidade, então resolví compartilhar com todos.
Seguem abaixo os passos para utilizar a biblioteca.
-
Primeiramente você deverá habilitar essa biblioteca no registro do Windows. Para isso abra o Editor de Registro (Regedit.exe) e navegue até
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Licenses\
. Dentro deLicenses
crie a chave4D553650-6ABE-11cf-8ADB-00AA00C00905
. Dentro dessa nova chave é criado automaticamente um item (Cadeia de caracteres) chamado(Default)
, modifique o valor desse item paragfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj
. -
Abra uma tela no Studio e adicione um “CommandButtom”. No Evento
Click
desse botão insira o seguinte código:
Sub CommandButton1_Click() On Error Resume Next 'Habilita execução do script após erros Set objDialog = CreateObject("MSComDlg.CommonDialog") 'Instancia a biblioteca With objDialog .CancelError = True 'Habilita geração de um erro caso o usuário cancele o diálogo .ShowColor 'Chama o método que abre diálogo de seleção de cor End With 'Testa se foi gerado erro na instrução anterior If Err.Number <> 0 Then Exit Sub 'Em caso de erro interrompe execução do script Else msgbox objDialog.Color 'Exibe cor selecionada no formato Decimal absoluto End if End Sub
Note que todas as instruções do código foram comentadas para facilitar o entendimento. A cor selecionada pelo usuário é armazenada na propriedade .Color
já no formato Decimal, podendo ser utilizada diretamente em qualquer propriedade do tipo “Cor”, em qualquer objeto de tela. Se você desejar abrir o diálogo com uma determinada cor seleciona, configure a propriedade .Color
antes de chamar o método ShowColor
.
Caso necessite converter essa cor para RGB leia o seguinte artigo: KB-13594: Obtendo combinação RGB a partir de um valor absoluto.
Para converter uma cor do formato RGB para o formato decimal absotulo, utilize o seguinte código:
DecimalColor = RGB(DecimalRedValue, DecimalGreenValue, DecimalBlueValue)
Para maiores detalhes sobre a biblioteca, bem como referências sobre seus métodos e propriedades, leia o artigo MSDN / Visual Basic / CommonDialog Control.