Je me suis livré à la conversion de quelques projets Delphi vers Lazarus hier, pour vérifier l'efficacité des outils mis à disposition dans l'IDE.


J'ai choisi des projets inconnus, (des sources de jeux) pour ne pas faire face à mes (mauvaises) habitudes de programmation.

Voici un résumé des démarches que j'ai suivies pour porter un jeu delphi / indows sous linux grace à lazarus.
les programmes utilisés :

lazarus 0.9.25 fpc 2.2.3 sous windows
Delphi 7 second edition sous windows
Linux Debian (light)+ lazarus sous virtualbox sur le meme ordinateur.

Ma démarche a été la suivante:

1) Sous Windows Copier deux versions du projet : une pour delphi, une qui sera convertie pour lazarus

2) Verifier avec delphi que les sources compilent et que le programme fonctionne sous Windows

3) Ouvrir lazarus et tenter de convertir avec l'outil >> convertir un projet Delphi en projet Lazarus, le fichier dpr de elphi en lpr + lpi
Bien souvent l'outil ne converti pas les dfm, il faut donc ensuite utiliser l'outil >> convertir un fichier dfm en lfm avec tous les dfm du projet.

4) modification manuelle des dfm :
les dfm recontrés avaient des propriétés non supportées par la lcl : notemment TEXTHEIGHT et OldCreateOrder, deux lignes de propriétés que j'ai supprimées manuellement.

5) ouverture du projet depuis projet >> nouveau projet depuis le fichier et choisir le fichier lpr créé pendant la conversion.
Le projet ainsi ouvert n'est pas encore compilable:
il faut ajouter manuellement

tout de suite après le mot clef uses
et supprimer la ligne
qui ne concerne qe delphi (lazarus utilisant des fichiers lfm).

voici le résultat pour mon 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
program AvaJong;
 
uses
Interfaces,  // ajout manuel
  Forms,
  Ava01 in 'Ava01.pas' {Form1},
  Astar in 'Astar.pas',
  Ava02 in 'Ava02.pas' {Form2};
 
//{$R *.res}
 
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
6) Réglage du compilateur :
projet >> options du compilateur >> analyse : cocher compatibilité delphi -Sd
projet >> options du compilateur >> Edition des liens >> decocher afficher les numéros de ligne... et cocher éliminer les symboles de l'executable.

N'utilisant que rerement le debugger fourni j'ai tendance aussi à cette etape à le neutraliser :
configuration >> options du debuggueur >> type de debugguage et chemin choisir (none)

7) ouverture dans lazarus des units définies dans le lpr
ici Ava01.pas, astar.pas et Ava02.pas.

8) modification des codes sources des unités

Ajouter Lresources dans les uses et supprimer les unités spécifiques à windows
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
unit Ava01;
 
interface
 
uses
  {Windows, Messages,} SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Ava02, Astar, StdCtrls, Menus, Lresources;
Se débarrasser de la référence aux dfm propre à delphi

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
implementation
 
//{$R *.dfm}
Ajouter la reference au fichier lrs en fin de code source avant le end. final
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
initialization
{$i Ava01.lrs}
end.
On peut dès lors tenter la compilation.
Les diverses erreurs rencontrées sont en général des manques de définition de types ou de variables définies dans l'unité windows, que l'on a supprimée.

Pour s'en sortir, on garde ouvert le projet original dans delphi et on vérifie chaque erreur en allant voir les declarations dans delphi (combinaison magique de touches ctrl+ click souris sur le mot concerné dans le code source)
On peut alors recupérer les bout de code nécessaires à la compilation du programme dans lazarus et les ajouter à notre code source.

par exemple la fonction rgb
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
function RGB(r, g, b: Byte): INTEGER;
begin
  Result := (r or (g shl 8) or (b shl 16));
end;
Après avoir soigneusement réglé un à un les messages d'erreur du compilateur, vous devriez enfin voir votre programme compilé par lazarus se lancer dans windows.

9) Nettoyage du projet pour essai sous linux.
utilisez projet >> publiez le projet
pour obtenir une copie nettoyée de votre code source dans un nouveau répertoire.
Faites attention, cet outil ne gère pas les eventuels sous repertoires du projet et oublie parfois certains fichiers.
Pour etre sur de votre export, ouvrez le lpi généré avec lazarus et tentez une compilation. vous pourrez nettoyer de nouveau ce repertoire ensuite.

Faite un zip et transferez cette archive sous linux.

10) Ouverture du fichier lpi sous linux
La compilation sous linux ne pose pas de soucis particulier, si vous avez correctement supprimé les reférences aux apis windows dans les étapes précédentes de votre conversion.

Par contre le résultat peut différer légèrement par rapport à windows, par exemple pour avajong, le fond de la fihe principale, censé etre coloris navy blue reste grise.
J'ai modifié le source sous lazarus linux en ajoutant un panel coloré en fond de fiche.
Le jeu fonctionne parfaitement et est la copie conforme de son homologue sous windows.

un aperçu ici :
http://clandestino000.free.fr/lazaru...hi/avajong.jpg

J'espère que ce partage d'expérience va vous donner envie de faire quelques conversions.
N'hésitez pas à poster vos questions ou bien à partager vos programmes convertis.

Bonne programmation

Clandestino