Como colocar seus programas no Painel de Controle em Delphi
Neste artigo você vai aprender a transformar uma aplicação Delphi em um applet do Painel de Controle do Windows (arquivo .cpl) — aqueles ícones que aparecem dentro do Painel de Controle e, ao serem clicados, abrem uma janela de configuração.
Ideia geral
Um .cpl nada mais é do que uma DLL com uma função exportada chamada CplApplet, que o Windows chama em momentos específicos (inicialização, contagem de applets, exibição de ícone/nome, clique duplo etc.). O Delphi permite compilar isso facilmente usando um projeto do tipo Library.
Passo 1 — Criar o projeto como Library
No Delphi, crie um novo projeto e mude o tipo de Program para Library. Adicione a unit CPL (que já vem com o Delphi, na pasta de fontes VCL) às uses do projeto.
Passo 2 — Código do projeto
library Project1; // o tipo do projeto deve ser Library, não Program
uses
Cpl, // unit com as constantes e tipos do Painel de Controle
Windows,
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
procedure ExecuteApp;
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
// Função de callback exigida pelo Painel de Controle do Windows
function CplApplet(hwndCpl: THandle; uMsg: DWORD;
lParam1, lParam2: LongInt): LongInt; stdcall;
var
NewCplInfo: PNewCplInfo;
begin
Result := 0;
case uMsg of
// Chamada na inicialização do applet. Retornar 1 = OK para continuar.
CPL_INIT:
Result := 1;
// Quantidade de applets exportados por esta DLL (normalmente 1).
CPL_GETCOUNT:
Result := 1;
// Envia ao Painel de Controle as informações de exibição do applet.
CPL_NEWINQUIRE:
begin
NewCplInfo := PNewCplInfo(lParam2);
with NewCplInfo^ do
begin
dwSize := SizeOf(TNewCplInfo);
dwFlags := 0;
dwHelpContext := 0;
lData := 0;
hIcon := LoadIcon(HInstance, 'MAINICON'); // ícone exibido no Painel de Controle
szName := 'Project1'; // nome do applet
szInfo := 'This is a test Applet.'; // descrição/tooltip
szHelpFile := '';
end;
end;
// Chamado quando o usuário dá duplo clique no ícone do applet.
CPL_DBLCLK:
ExecuteApp;
else
Result := 0;
end;
end;
exports
CplApplet;
begin
end.
Passo 3 — Compilar e testar
- Compile o projeto normalmente (
Project > Build). O Delphi vai gerar um arquivo.dll. - Renomeie a extensão do arquivo gerado de
.dllpara.cpl. - Copie o arquivo
.cplpara a pastaC:\Windows\System32, ou simplesmente dê duplo clique nele — o Windows abre o Painel de Controle já mostrando o seu applet.
Erros comuns
- Aspas tipográficas (“ ”, ‘ ’) em vez de aspas retas (” “, ‘ ‘): se você copiar código de páginas web ou processadores de texto, é comum que as aspas venham “curvas” em vez de retas. O compilador do Delphi não aceita isso em strings — sempre confira e corrija para aspas retas antes de compilar.
-
Nome da função: o nome correto da função de callback é
CplApplet(nãoCPlApplet); o Windows procura por esse nome exato ao carregar a DLL. -
Versões recentes do Delphi (Unicode): a partir do Delphi 2009,
stringpassou a ser Unicode por padrão. Como a API do Painel de Controle espera campos comoszNameeszInfoem ANSI, pode ser necessário ajustar os tipos dessas atribuições ou usarAnsiString/PAnsiCharconforme a declaração deTNewCplInfona sua versão do Delphi, para evitar textos corrompidos no ícone do applet.
Conclusão
Criar um applet de Painel de Controle em Delphi é simples: basta um projeto Library, a unit Cpl, e a implementação da função CplApplet respondendo às mensagens CPL_INIT, CPL_GETCOUNT, CPL_NEWINQUIRE e CPL_DBLCLK. É uma técnica um pouco antiga (mais comum em versões clássicas do Windows), mas ainda funciona nas versões atuais e é uma boa forma de entender como o Windows se comunica com esse tipo de componente do sistema.