|

Como colocar seus programas no Painel de Controle em Delphi

Compartilhe :

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

  1. Compile o projeto normalmente (Project > Build). O Delphi vai gerar um arquivo .dll.
  2. Renomeie a extensão do arquivo gerado de .dll para .cpl.
  3. Copie o arquivo .cpl para a pasta C:\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ão CPlApplet); o Windows procura por esse nome exato ao carregar a DLL.
  • Versões recentes do Delphi (Unicode): a partir do Delphi 2009, string passou a ser Unicode por padrão. Como a API do Painel de Controle espera campos como szName e szInfo em ANSI, pode ser necessário ajustar os tipos dessas atribuições ou usar AnsiString/PAnsiChar conforme a declaração de TNewCplInfo na 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.

Posts Similares