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 :

Directive de détection de la version de Lazarus et de sa LCL lors de la compilation [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Directive de détection de la version de Lazarus et de sa LCL lors de la compilation
    Bonjour,

    Sans trop rentrer dans les détails, pour calculer la largeur de certaines colonnes d'une StringGrid, je dois appliquer un correctif pour un rendu visuel correct... sinon il existe un décalage 'visuel' d'environ un caractère... Je ne sais pas si le décalage est lié spécifiquement à la StringGrid ou au Canvas... Peu importe : actuellement le correctif est évalué dans la première ligne du code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FixedWidth := 2* Grids.constCellPadding;
      { la valeur minimale est 6
        Explication 1 : grids [line ~145] ~probable
        const
        constRubberSpace: byte = 2;
        constCellPadding: byte = 3;
      ou
        Explication 2 : ... (genre dbgrid : /lcl/dbgrid.pas  [line ~625] mais pas ds Grids)
                                 aCharWidth := Canvas.TextWidth(ATitle)+6;}
    Mon problème est donc d'écrire avec les "bonnes" directives de compilation en Free Pascal. En 0.9.29, le code ci-dessus passe sans problème. Mais en 0.9.28, la variable constCellPadding n'existe pas dans le /lcl/grids.pas. A la compilation, j'obtiens unit1.pas(507,38) Error: Identifier not found "constCellPadding".

    Donc, une première approche est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button1Click(Sender: TObject);
    //Uses Grids
    var
     FixedWidth : integer;
    begin
     FixedWidth := 8;
     {$IF FPC_FULlVERSION> 20402}
     //{$IF defined(VER2_4_2) or defined(VER2_4_3)}
       FixedWidth := 2* Grids.constCellPadding;
     {$ENDIF}
     ShowMessage(IntToStr(FixedWidth));end;
    Mais cette "approche" est en réalité peu satisfaisante. Avec {$IF je ne sais pas si on peut "référencer" le N° de version de Lazarus dans les directives de compilation. Car ici, le problème n'est pas en réalité directement la version de FP mais la modification des codes de la LCL (/lcl/grids.pas)... et la LCL est directement liée à Lazarus (et pas directement à FP) : La LCL est la Bibliothèque de Composants Lazarus. Si le code de la LCL est compatible avec le FP utilisé, on peut compiler la LCL avec des versions de FP différentes. Ainsi actuellement on peut télécharger sur le SnapShot, Lazarus 0.9.29 + fpc 2.4.2 ou Lazarus 0.9.29 + fpc 2.4.3. Or, la dernière Lazarus 0.9.28.3 est livrée avec FP 2.4.0... et la Lazarus 0.9.29 que j'ai installée utilise FP 2.4.3. Cette coïncidence arrange mes affaires et autorise le traitement ci_dessus purement opportuniste.

    Une nouvelle fois, j'ai eu un peu de mal avec la documentation. Le FPC_FULLVERSION n'étant pas indiqué dans celle-ci, peut-être existe-t-il une directive permettant de résoudre mon problème car même si Free Pascal est indépendant, ses développeurs ne doivent pas ignorer que son principal "client" est Lazarus. (cf FPC_FULLVERSION et sub. trouvées ici pages 51 et suivantes, document de 172 pages dans lequel le mot Lazarus ne figure pas...)

    Une idée... ou faut-il demander aux programmeurs de FP et Lazarus d'inclure une constante LAZ_FULLVERSION ou LCL_FULLVERSION ? A moins que cela ne soit déjà implémenté ? Mais je n'ai rien vu...

    Merci. Joyeux Noël.
    Cordialement. Gilles
    Dernière modification par Alcatîz ; 26/12/2010 à 10h17. Motif: préfixe + déplacement du sujet

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Problème résolu : l'équipe Lazarus a réglé le problème très rapidement. La directive de compilation LCL_FULLVERSION a été ajoutée à partir de la Revision 28834. Cela fonctionne en effet sur la Lazarus 0.9.31-28842-fpc-2.4.3-20101231-win32. Elle s'utilise ainsi (issue du svn) :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, LCLVersion,  StdCtrls;
     
    type
      { TForm1 }
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    { TForm1 }
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Memo1.Clear;
      // check if lcl_version is declared,
      // then we know if there is support for lcl version information
      {$if declared(lcl_version)}
      Memo1.Append('Example which uses the lcl version information');
      Memo1.Append(format('LCL Version: %s', [lcl_version]));
      Memo1.Append(format('LCL Major: %d', [lcl_major]));
      Memo1.Append(format('LCL Minor: %d', [lcl_minor]));
      Memo1.Append(format('LCL Release: %d', [lcl_release]));
      Memo1.Append(format('LCL Full Version: %d', [lcl_fullversion]));
      {$else}
      Memo1.Append('No lcl version information available');
      {$endif}
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Memo1.Clear;
      {$if (lcl_major=0) and (lcl_minor=9) and (lcl_release<26)}
      Memo1.Append('This program is compiled with lcl version before 0.9.26');
      // you cannot use features introduced in 0.9.26
      {$else}
      Memo1.Append('This program is compiled with lcl version 0.9.26 or later.');
      // you can use features available in 0.9.26
      {$endif}
      {$if (lcl_fullversion) > 93002}
      Memo1.Append('This program is compiled with lcl version after 0.9.30.2.');
      // you can use features available in 0.9.30.3 and later (e.g. 0.9.31)
      {$else}
      Memo1.Append('This program is compiled with lcl version 0.9.30.2 or before.');
      // you cannot use features introduced after 0.9.30.2
      {$endif}
    end;
     
    initialization
      {$I unit1.lrs}
     
    end.
    Documentation attachée à LCLVersion :
    http://lazarus-ccr.sourceforge.net/d...ion/index.html

    Cordialement. Gilles
    Dernière modification par Invité ; 31/12/2010 à 14h36.

  3. #3
    Membre émérite
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Par défaut
    Merci Gilles

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

Discussions similaires

  1. Nouvelle version de Lazarus 0.9.24
    Par Clandestino dans le forum Lazarus
    Réponses: 1
    Dernier message: 12/12/2007, 13h05
  2. Nouvelle version de Lazarus 0.9.22
    Par Clandestino dans le forum Lazarus
    Réponses: 0
    Dernier message: 01/04/2007, 10h50
  3. [FLASH 8] Détection de la version du player
    Par Destiny dans le forum Flash
    Réponses: 3
    Dernier message: 02/03/2006, 13h17

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