2009-11-25 18 views
1

J'ai converti mes 2 applications graphiques de Delphi à Lazarus. Les deux applications compilent pour la plate-forme Win32, i386 et avec une interface graphique. Le formulaire principal a été converti à l'aide de l'outil Lazarus et peut être édité à partir d'IDE. Mais lorsque j'exécute une telle application, le formulaire principal n'apparaît pas, seulement un formulaire vierge sans aucun contrôle.Formulaire principal vide dans l'application GUI converti de Delphi à Lazarus

J'ai essayé de déboguer ceci. Il exécute tout le code dans les sections d'initialisation, et exécute le code à partir du projet .lpr, mais quelque chose ne va pas dans CreateForm() car n'exécute pas de code dans l'événement OnCreate du formulaire principal. Dans le journal des événements, je peux voir tous les textes je lui écris avec '<App.Run' apparaissant après que je ferme ce formulaire vide.

code dans le projet .lpr:

Application.Initialize; 
    AddToEventLogInfo('App.CreateForm'); 
    Application.CreateForm(TfrmTst, frmTst); 
    AddToEventLogInfo('App.Run>'); 
    Application.Run; 
    AddToEventLogInfo('<App.Run'); 

J'ai vérifié que je suis en mesure de créer des applications simples de l'interface graphique de Lazare, mais à la fois converti GUI applications ne fonctionnent pas comme prévu. Qu'est-ce qui peut être mauvais? Ai-je manqué quelque chose? Peut-être que l'un des nombreux avertissements et astuces que Lazare écrit est important?

Quand je lance mon application Lazarus écrit ceci:

windres: warning: 14: "MAINICON": 1045: duplicate value 
    windres: warning: 16: 1: 1045: duplicate value 
    Project "Tst_fpc" successfully built. :) 

EDIT:

outil de conversion Lazarus converti .dfm -> .lfm, mais a quelques problèmes avec le fichier .pas. Je devais manuellement:

  1. ajouter des unités Lazarus à des usages:

    utilise {$ IFDEF FPC} LCLIntf, LResources, {$ ENDIF}

  2. compilation conditionnelle forme Delphi {$ R * .dfm}:

    {$} IFNDEF CPF {$ R * .dfm} { $ ENDIF}

  3. Ajouter .lrs ressource dans le code d'initialisation:

    initialisation {$ IFDEF} {$ CPF i myunit.lrs} {$ ENDIF}

Répondre

2

Je suppose que l'unité principale (je suppose qu'elle est appelée utest) n'a pas de {$ I utest.lrs} dans sa section d'initialisation. Le fichier .lrs est le fichier de ressources Lazarus, créé à partir de lfm (dfm) dans Delphi.

+0

Oui, c'était tout. Convertisseur de Lazarus fait fichier .lfm, mais a quelques problèmes avec le fichier .pas. Plus d'infos dans la question mise à jour. –

0

Je suis désolé, je ne peux pas vous donner une réponse directe. D'après ce que je comprends, il y a un problème avec le fichier de ressources. Dans delphi c'est le * .res, je ne sais pas à quoi ils ressemblent dans Lazarus. Utilisez un programme comme resedit, http://www.resedit.net/, pour ouvrir le fichier de ressources. Je l'ai essayé et trouvé un "dossier" Icône où il y avait un message MAINICON. Je suppose que vous en avez deux. Dans ce cas, en supprimer un.

1

La forme vide est la forme de pour le projet en cours que vous avez utilisé le projet de conversion Delphi à partir d'outils, ce qui signifie que le projet en cours est actif.
Essayez ceci:

  • Sur l'option de projet fermer le projet en cours.
  • Dans la petite fenêtre principale nommée Project Wizard, utilisez l'option de projet de conversion Delphi.