Diálogo seletor de cores

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.

  1. 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 de Licenses crie a chave 4D553650-6ABE-11cf-8ADB-00AA00C00905. Dentro dessa nova chave é criado automaticamente um item (Cadeia de caracteres) chamado (Default), modifique o valor desse item para gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj.

  2. 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.

Régis,

O método ShowPickColor não resolve o problema?