Créer une Applet pour le Panneau de Configuration



Créér une applet pour le Panneau de configuration est un procédé assez simple. Il suffit de créer une DLL (Dynamic Link Library, Librairie Liée Dynamiquement) avec l'extension .cpl (Control Panel Library, Librairie pour le Panneau de Configuration) et de la placer dans le répértoire système Windows. Chaque fichier cpl peut supporter de multiples Applets pour le panneau de configuration. Le cpl a une seule fonction appelé CPLApplet() qui doit être exporté par nom. Tous les messages suivants seront passés à cette fonction.


Messages et actions associées

CPL_INITEnvoyé pour indiquer que la fonction CPLApplet() a été trouvée. Retourne TRUE pour continuer le chargement
CPL_GETCOUNTRetourne le nombre d'applets supportées par le cpl
CPL_INQUIREEnvoyé pour obtenir des informations à propos de chaque applet supportée par le cpl.
lParam1 contient le numéro d'applet (le premier étant 0) pour la requête.
lParam2 pointe vers une structure TCPLInfo.
Le champ idIcon de la structure TCPLInfo devrait être initialisé avec l'id de la ressource icône à afficher.
Les champs idName devraient être initialisés avec les id des ressources string pour le nom et la description.
lData peut contenir des informations définies par l'applet pour utiliser avec l'applet.
CPL_SELECTEnvoyé quand l'icône de l'applet a été selectionnée par l'utilisateur.
lParam1 contient le numéro d'applet qui a été choisie.
lParam2 contient le champ lData défini par l'utilisateur de l'applet.
CPL_DBLCLKEnvoyé quand l'icône de l'applet a été double-cliquée.
lParam1 contient le numéro d'applet.
lParam2 contient le champ lData défini par l'utilisateur de l'applet.
Ce message initie l'affichage de la boite de dialogue de l'applet.
CPL_STOPEnvoyé pour chaque applet quand le Panneau de Configuration est en cours de fermeture.
lParam1 contient le numéro d'applet.
lParam2 contient le champ lData défini par l'utilisateur de l'applet.
Tout code de nettoyage spécifique à une applet devrait être executé ici...
CPL_EXITEnvoyé avant l'appel à FreeLibrary par le panneau de configuration.
Tout code de nettoyage non spécifique à une applet devrait être executé ici.
CPL_NEWINQUIREIdentique à CPL_INQUIRE excepté le fait que lParam2 poite vers une structure NEWCPLINFO.





Votre Libraire pour le Panneau de Configuration aura besoin de quelques resources additionnelles pour être fonctionnelle. Vous aurez besoin de créer un fichier de resource contenant une string table contenant le nom et la description de votre(vos) applet(s), et les icônes pour chaque applet de votre CPL. Vous pouvez créer un fichier .res à partir d'un fichier .rc (resource script file, fichier script de resource) en utilisant le compilateur en ligne de commande BRCC.EXE ou BRCC32.EXE, ou à l'aide d'un éditeur de resource WYSIWYG (What You See Is What You Get, Ce Que Vous Voyez Est Ce Que Vous Obtenez) comme le Borland Resource Workshop.

Exemple de fichier .rc contenant une string table avec deux chaines et un pointeur vers un fichier icône:

Fichier .rc

STRINGTABLE
{
  1, "TestApplet" 
  2, "Mon Applet Test"
}

2 ICON C:\CHEMIN\CHIP.ICO



Pour Compiler le fichier .rc en un fichier .res qui peut être lié à votre application, tapez simplement à partir de la ligne de commandes DOS le chemin complet du compilateur, et le chemin complet du fichier .rc à compiler. Exemple:

C:\Delphi\Bin\brcc32.exe C:\Chemin\MyRes.rc

Quand le compilateur a fini, vous devriez avoir un nouveau fichier avec le même nom que lee fichier .rc que vous avez compilé, avec l'extension ".res".

Si vous développez pour de multiples plate-formes, vous devriez créer à la fois un fichier 16 et 32 bits pour lier à votre application.

L'exemple suivant est une applet qui ouvre une fenêtre en réponse au message CPL_DBLCLK. Il est codé pour pouvoir être compilé sous les environnement Win16 et Win32.

Applet pour le Panneau de Configuration

library testcpl;

{$E .cpl}
{$IFDEF WIN32}
uses
  SysUtils,
  Windows,
  Forms,
  Messages,
  Unit1 in 'Unit1.pas' {Form1};

{$ELSE}
uses
  SysUtils,
  WinTypes,
  WinProcs,
  Messages,
  Unit1 in 'Unit1.pas' {Form1};
{$ENDIF}

{$IFDEF WIN32}
 {$R TEST.RES}
{$ELSE}
 {$R TEST.RES}
{$ENDIF}

const NUM_APPLETS = 1;

{$IFDEF WIN32}
 const CPL_DYNAMIC_RES = 0;
{$ENDIF}
const CPL_INIT = 1;
const CPL_GETCOUNT = 2;
const CPL_INQUIRE = 3;
const CPL_SELECT = 4;
const CPL_DBLCLK = 5;
const CPL_STOP = 6;
const CPL_EXIT = 7;
const CPL_NEWINQUIRE = 8;
{$IFDEF WIN32}
 const CPL_STARTWPARMS = 9;
{$ENDIF}
const CPL_SETUP = 200;

{$IFNDEF WIN32}
type DWORD = LongInt;
{$ENDIF}

type TCplInfo = record
       idIcon : integer;
       idName : integer;
       idInfo : integer;
       lData : LongInt;
     end;
     PCplInfo = ^TCplInfo;

type TNewCplInfoA = record
       dwSize : DWORD;
       dwFlags : DWORD;
       dwHelpContext : DWORD;
       lData : LongInt;
       IconH : HIcon;
       szName : array [0..31] of char;
       szInfo : array [0..63] of char;
       szHelpFile : array [0..127] of char;
     end;
     PNewCplInfoA = ^TNewCplInfoA;

{$IFDEF WIN32}
type TNewCplInfoW = record
       dwSize : DWORD;
       dwFlags : DWORD;
       dwHelpContext : DWORD;
       lData : LongInt;
       IconH : HIcon;
       szName : array [0..31] of WChar;
       szInfo : array [0..63] of WChar;
       szHelpFile : array [0..127] of WChar;
     end;
     PNewCplInfoW = ^TNewCplInfoW;
{$ENDIF}

type TNewCplInfo = TNewCplInfoA;
type PNewCplInfo = ^TNewCplInfoA;

function CPlApplet(hWndCPL : hWnd;
                   iMEssage : integer;
                   lParam1 : longint;
                   lParam2 : longint) : LongInt
{$IFDEF WIN32} stdcall; {$ELSE} ; export; {$ENDIF}
begin
  case iMessage of
    CPL_INIT : begin
      Result := 1;
      exit;
    end;
    CPL_GetCount : begin
      Result := NUM_APPLETS;
      exit;
    end;
    CPL_Inquire : begin
      PCplInfo(lParam2)^.idIcon := 2;
      PCplInfo(lParam2)^.idName := 1;
      PCplInfo(lParam2)^.idInfo := 2;
      PCplInfo(lParam2)^.lData := 0;
      Result := 1;
      exit;
    end;
    CPL_NewInquire : begin
      PNewCplInfo(lParam2)^.dwSize := sizeof(TNewCplInfo);
      PNewCplInfo(lParam2)^.dwHelpContext := 0;
      PNewCplInfo(lParam2)^.lData := 0;
      PNewCplInfo(lParam2)^.IconH := LoadIcon(hInstance,
                                              MakeIntResource(2));
      lStrCpy(@PNewCplInfo(lParam2)^.szName, 'TestCPL');
      lStrCpy(PNewCplInfo(lParam2)^.szInfo, 'My Test CPL');
      PNewCplInfo(lParam2)^.szHelpFile[0] := #0;
      Result := 1;
      exit;
    end;
    CPL_SELECT : begin
      Result := 0;
      exit;
    end;
    CPL_DBLCLK : begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
      Result := 1;
      exit;
    end;
    CPL_STOP : begin
      Result := 0;
      exit;
    end;
    CPL_EXIT : begin
      Result := 0;
      exit;
    end else begin
      Result := 0;
      exit;
    end;
  end;
end;

exports CPlApplet name 'CPlApplet';

begin
end.


3 requête(s) SQL executée(s) en 0.001 Secs - Temps total de génération de la page : 0.007 Secs