Rien n'est parfait...



Lazarus et CodeTyphon permettent le développement d'applications en s'appuyant sur le langage Pascal Objet et surtout un framework de classes et composants fiables, la LCL (Lazarus Component Library). Ce dernier est inspiré de celui qui a été conçu pour Delphi, la VCL (Visual Component Library).

Des environnements de développement RAD comme Lazarus et CodeTyphon permettent également le développement multiplate-forme (Linux, OSX, Windows, …), car le compilateur Free Pascal Compiler a été porté sur celles-ci et d'autres.

Malgré la bonne volonté des développeurs et la communauté autour de ces outils, rien n'est absolument parfait et quelques petits problèmes persistent comme la gestion des fenêtres MDI enfants sous Windows. Le problème est relativement simple, une application MDI s'appuyant sur la LCL subie des erreurs liées à la gestion des messages au niveau des fenêtres enfants.

Ce souci est même reproductible dans l'environnement de développement, en tout cas dans CodeTyphon sous Windows.



Après des tests et débogages, j'ai réussi à localiser (contextualiser) le bug. Et celui-ci intervient lorsqu'une fenêtre MDI enfant à la propriété Align renseigner et ce entre autres avec la valeur alClient.

Cependant de nombreuses applications, de gestion par exemple, sont conçus avec une architecture MDI. La portabilité de celle-ci est donc remise en cause du fait de ce bug qui semble pourtant relativement anodin.

La solution de contournement n'est pas forcément évidente mais, après avoir quelques tests la voici :

oChildMDI := TChildMDI.create(self);
oChildMDI.Parent:= self;
{$ifdef WINDOWS}
oChildMDI.Top:= 0;
oChildMDI.Left:= 0;
oChildMDI.Width:= ClientWidth - 4;
oChildMDI:= ClientHeight - 4;
{$else}
oChildMDI.Align:= alClient;
{$endif}
oChildMDI.Show;
Ce type de code est à implémenter au moment de l'instanciation et de l'affichage d'une nouvelle fenêtre MDI enfant.

Dans l'inspecteur de propriété de le fenêtre enfant, il faudra également spécifier les propriétés suivantes :

AlignalNone
BorderStylebsNone
FormStylewsMDIChild

Cette solution de contournement permettra ainsi au développeur de coder des applications multi-cibles fonctionnelles.

Aucun logiciel, même de développement n'est parfait et pour cause, il est issu de la main de l'homme, qui ne l'est pas.
Autre constat, ce domaine technique reste encore, malgré les avancer de ces dernières années, très artisanale.


Article publié le jeudi 13 août 2015 par Frédéric.