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 :
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".
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;}
Donc, une première approche est la suivante :
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.
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;
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
Partager