Package gestion complet de skin (avec editeur & exemple d'utilisation)

Description

J'en avait marre de toujours mettre en place le meme code a chaque fois que je vouslait faire une application un peu plus jolie que la moyenne, alors j'ai commencer a cree quelques composants. La je me suis un peu emballe et apres quelque nuit blanche j'ai deboucher sur un package complet (rapport a mon utilisation, on peu toujours rajouter!!!) de gestion de skin.

Le concept de base, une skin=un fichier. Le fichier en question contient un descriptif des comosant visuelles present dans mon application avec les valeurs a leurs assignees. Je source contient un editeur pour ce type de fichier.

Quand je cree un application, je cree une skin par defaut. Dans une form de l'application je cree un SkinChargeur qui sert justement a charger la skin pardefaut. Apres quoi je cree des composant skinable qui font reference a cette skin (cf application test). Pour qu'une skin soit compatible il suffit qu'elle est le meme squelette.

Je sais c pas super clair mais en regardant l'application de test ca devrait s'eclairer, sinon cous reste plus qu'a demander.

Merci pour votre temps ;)

Source / Exemple :


unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, SkinChargeur, SkinButton, SkinPanel, SkinLabel, SkinCheck;

type
  TForm1 = class(TForm)
    SkinPanel1: TSkinPanel;
    SkinButton1: TSkinButton;
    SkinCheck1: TSkinCheck;
    SkinLabel1: TSkinLabel;
    SkinButton2: TSkinButton;
    OpenDialog1: TOpenDialog;
    SkinChargeur1: TSkinChargeur;
    procedure SkinCheck1Change(Sender: TObject);
    procedure SkinButton1Click(Sender: TObject);
    procedure SkinButton2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
//-------------------------------------------------------------------
procedure TForm1.SkinCheck1Change(Sender: TObject);
begin
        // Activation / desactivation des autres composants
        SkinButton1.Enabled:=not SkinCheck1.Etat;
        SkinButton2.Enabled:=not SkinCheck1.Etat;

        //changement du texte du label
        if not SkinCheck1.Etat then
                SkinLabel1.Caption:='Actif'
        else
                SkinLabel1.Caption:='Inactif';
end;
//-------------------------------------------------------------------
procedure TForm1.SkinButton1Click(Sender: TObject);
begin
        // action du bouton 1 : fermer
        Form1.close;
end;
//-------------------------------------------------------------------
procedure TForm1.SkinButton2Click(Sender: TObject);
begin
        //action du bouton 2 : choix d'une autre skin
        if OpenDialog1.Execute then
                SkinChargeur1.CompatibleLoadFromFile(OpenDialog1.FileName);
end;
//-------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
        //au demarage changement de la couleur du texte
        //n'affectera que la skin par default
        SkinLabel1.Couleur:=clRed;
end;
//-------------------------------------------------------------------
end.

Conclusion :


mise a jour : aucune idee (mais disons : bientot !!!)

bug : ca a l'air d'etre enfin stable mais bon la perfection ca n'existe pas.

truc a faire:
- "SkinCanvasCopy.pas" c'est du bricolage provisoire, si vous jetez un oeil soyez comprehensif
- Rajouter un composant type barre de defilement

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.