IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Personnaliser la LCL pour un projet [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 382
    Points : 9 741
    Points
    9 741
    Par défaut Personnaliser la LCL pour un projet
    Bonjour,

    Voilà, je souhaite développer un projet sous Lazarus (un truc perso) avec une charte graphique précise (afin de garder une certaine cohérence entre les différentes fiches). Donc, la couleur, la police, ... des éléments les plus importants devront être les mêmes pour l'ensemble du projet.

    Évidemment, je pourrais tout redéfinir à chaque insertion d'un composant...
    Mais, je pense qu'il y a mieux à faire. L'idéal serait de redéfinir les propriétés par défaut des composants standards que je compte utiliser (quitte à en personnaliser ultérieurement, en cas d'oubli au démarrage). C'est là que ça coince... Ma connaissance de la LCL n'est pas suffisamment pointue pour être capable de déterminer comment m'y prendre sans faire une usine à gaz...

    J'aimerais, grosso modo, créer un modèle de fiche puis un bitbtn, un edit, un label, une stringgrid, et les version db de certains composants, un panel, ...

    D'après vous, comment je dois m'y prendre ?

    Merci de vos idées

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  2. #2
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Jon Shannow Voir le message
    L'idéal serait de redéfinir les propriétés par défaut des composants standards que je compte utiliser (quitte à en personnaliser ultérieurement, en cas d'oubli au démarrage). C'est là que ça coince... Ma connaissance de la LCL n'est pas suffisamment pointue pour être capable de déterminer comment m'y prendre sans faire une usine à gaz...
    Bonjour,

    Pour régler ce problème, tu peux effectivement créer un nouveau paquet contenant des composants modifiés.
    Pour la création du paquet et l'installation des composants, si tu ne sais pas comment procéder, je te renvoie à un tuto que j'avais rédigé il y a quelques mois : ici.
    Pour les composants eux-mêmes, il suffit de définir les propriétés voulues dans un constructeur surchargé.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    interface
     
    uses
      Classes, SysUtils, StdCtrls;
     
    type
     
      { TGVMyLabel }
     
      TGVMyLabel = class(TLabel)
      public
        // création du composant
        constructor Create(TheOwner: TComponent); override;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TGVMyLabel }
     
    constructor TGVMyLabel.Create(TheOwner: TComponent);
    begin
      inherited Create(TheOwner); // on hérite pour récupérer les comportements de l'ancêtre
      Font.Color := clRed; // écriture en rouge
      Cursor := crHourGlass // nouveau curseur
    end;
    Quand j'aurai installé ce composant TMyLabel, le fait d'en utiliser un fera que j'aurai un TLabel avec un comportement sur mesure (ici, une écriture rouge de l'étiquette et un curseur particulier pour le survol de la souris).
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  3. #3
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 382
    Points : 9 741
    Points
    9 741
    Par défaut
    Merci de cette réponse plus que détaillée.

    Apparemment, tu me conseilles de repartir des composants finaux plutôt que de leur parent "custom", c'est ça ?

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    alors moi je ne conseille pas du tout ça ^^
    développer tout les composants juste pour leur affecter une propriétés c'est une aberration

    il est préférable de te créer une fiche de base dans lequel tu te crée une fonction qui va harmoniser tes composant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    //////////////////////////////////////////////////////////////////////////
    //                          NormalizeControls 
    //////////////////////////////////////////////////////////////////////////
    procedure TFormBase.NormalizeControls(F: TScrollingWinControl);
    var
       i: integer;
      c: TComponent;
    begin
      for i := 0 to Pred(F.ComponentCount-1) do
      begin
        c := F.Components[i];
        NormalizeControl(c);
      end;
    end;
    //////////////////////////////////////////////////////////////////////////
    //                          NormalizeControl 
    //////////////////////////////////////////////////////////////////////////
    procedure TFormBase.NormalizeControl(C: TComponent);
    begin
       if (C is TEdit) then 
       begin
          TEdit(C).Font.Color := clNavy;
          TEdit(C).Font.Style := [fsBold];
          if not Assigned(TEdit(C).OnEnter) then
             TEdit(C).OnEnter := OnEnterControl;
          if not Assigned(TEdit(C).OnExit)  then
            TEdit(C).OnExit  := OnExitControl;
       end
       else 
    ...
    end;
    //////////////////////////////////////////////////////////////////////////
    //                          FormCreate 
    //////////////////////////////////////////////////////////////////////////
    procedure TFormBase.FormCreate(Sender: TObject);
    begin
      // propiete de ta form general
      Top  := - GetSystemMetrics(SM_CYBORDER)-GetSystemMetrics(SM_CYCAPTION);
      Left := - GetSystemMetrics(SM_CXBORDER);
      BorderStyle := bsNone;
      Position := poMainFormCenter;
      Scaled := FALSE;
      NormalizeControls(Self);
      ...
    end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #5
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par anapurna Voir le message
    développer tout les composants juste pour leur affecter une propriétés c'est une aberration
    Qui parle d'une seule propriété et de tous les composants ? La méthode qui consiste à personnaliser des composants est évidemment seulement valable si les composants sont employés à de multiples reprises : sinon, même pas la peine de se fatiguer avec une fonction centrale. Cette dernière ne présente d'ailleurs pas que des avantages : sauf avec une imbrication douteuse de tests, elle passe à la moulinette tous les composants qui traînent. Mais bon, suivant les cas, je choisirais l'une ou l'autre.

    Apparemment, tu me conseilles de repartir des composants finaux plutôt que de leur parent "custom", c'est ça ?
    Oui : les parents "custom" exigent des compléments qui dépassent largement le point de vue esthétique que tu sembles rechercher. En général, seul le constructeur est à adapter en partant de la classe finale. Autre avantage : des fonctionnalités supplémentaires pourront être développées si nécessaire, tout à fait dans l'esprit de la POO .
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  6. #6
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 382
    Points : 9 741
    Points
    9 741
    Par défaut
    @anapurna, je préfère de loin modifier quelques composants et les mettre dans un paquet que de faire une moulinette qui risque de devenir une usine à gaz.

    @gvasseur58, je comprends ta réflexion. C'est simplement que, dans mes souvenirs de Delphi, il était fort déconseillé de partir des composants style TLabel, mais plutôt de partir des TCustomMachin.
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Personnaliser le formulaire de base pour un projet
    Par toure32 dans le forum Delphi
    Réponses: 2
    Dernier message: 13/11/2006, 23h43
  2. Assistance pour un projet logiciel perso
    Par sincère dans le forum Bases de données
    Réponses: 3
    Dernier message: 01/11/2004, 13h10
  3. Choix d'un SGBDR pour mon projet: Interbase?
    Par super16 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 09/07/2004, 08h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo