Ceci est un petit bug que j'ai trouvé sur le composant TRadioGroup. Ce bug existe sur toutes les versions de Delphi, de D1 à D5. Je me suis donc demandé s'il existait aussi avec Kylix.

Position du problème :
Quand on modifie par programme le RadioButton sélectionné d'un RadioGroup sur une fenêtre inactive et qu'ensuite, on active cette fenêtre avec la souris, on revient au précédent RadioButton si le Radiogroup possède la focalisation dans la fenêtre.
J'ai réalisé un petit programme (radio.zip 3ko) avec D1 qui met cet effet en évidence. Mode d'emploi : après le lancement du programme, vous appuyez sur Button2. Vous voyez le RadioGroup de l'autre fenêtre passer à "Two". Vous activez la seconde fenêtre en sélectionnant la barre de titre à la souris et vous constatez que le RadioGroup revient à "One". La même chose sous D3 et D5 (je n'ai pas de D2 ou D4 sous la main pour tester:)). J'ai aussi mis un correctif de la VCL sur Delphi Bug List.

Maintenant, portons tous ça sous Kylix :
- un peu de travail de renommage des unités de Delphi :

 
Sélectionnez

{$I version.inc}

uses
{$IFDEF MSWINDOWS}
  WinTypes, WinProcs, Messages, Graphics, Controls,
  Forms, Dialogs, StdCtrls,
{$ENDIF}
{$IFDEF LINUX}
  QGraphics, QControls, QForms, QDialogs, QStdCtrls,
{$ENDIF}
  SysUtils, Classes; 

D'une part, certaines unités se voient ajouter un Q devant (on trouvera dans l'aide de Kylix les unités qui changent de nom ainsi que celles qui disparaissent comme Windows ou Messages). D'autre part, Borland recommande d'utiliser {$IFDEF MSWINDOWS} pour windows en général mais comme cette directive n'existe qu'à partir de Delphi 6, en attendant, j'ai fait un petit bricolage avec le fichier version.inc que j'inclus dans chacune de mes unités avant les IFDEF. Voici le fichier version.inc :

 
Sélectionnez

{$IFNDEF MSWINDOWS}
  {$IFDEF WIN32}
    {$DEFINE MSWINDOWS}
  {$ENDIF}
  {$IFDEF WINDOWS}
    {$DEFINE MSWINDOWS}
  {$ENDIF}
{$ENDIF} 

- pour mes unités personnelles :

 
Sélectionnez

unit UNIT1;

uses UNIT2; 

un passage en MAJUSCULE.

- pour le fichier .dpr lui-même :

 
Sélectionnez

program project1;

{$I version.inc}

uses
{$IFDEF MSWINDOWS}
  Forms,
{$ENDIF}
{$IFDEF LINUX}
  QForms,
{$ENDIF}
  UNIT1 in 'UNIT1.PAS' {Form1},
  UNIT2 in 'UNIT2.PAS' {Form2};

{$R *.res}

begin
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end. 

Toujours du bricolage avec IFDEF autours de Forms. Passage en majuscule donc de mes unités. Et en minuscule de project1.

- pour finir, passage en minuscule de {$R *.res} dans le fichier .dpr et de {$R *.dfm} dans les fichiers .pas.

Et une petite compilation et mon programme se lance et je fais l'essai standard :

Linux / Kylix Win16 / D1
Aperçu Aperçu
Win 32 / D3 Win 32 / D5
Aperçu Aperçu

Vous remarquez tout de suite la différence :-))). Sous Linux, le RadioButton One a repris la focalisation mais n'est pas pour autant sélectionné. Donc le bug est partiellement corrigé sous Kylix. Je suis allé faire un tour dans le code source pour voir ce qui avait changé et je n'ai pas vu de différence flagrante.

Et en dehors de l'aspect bug, on constate qu'il est donc possible d'avoir une application se compilant de D1 à Kylix en passant par D3 et D5.

Le code source (radio.zip 3ko).

Remarques additionnelles relatives à D6 :

  • le bug existe toujours sous D6, quand on utilise la VCL, pas avec la CLX.
  • si on commence par ouvrir le projet sous D6, le travail de renommage des unités ne semble plus nécessaire.




Retour à l'accueil de l'article Migration de Delphi vers Kylix