Puedes alterar el orden de creación en el fichero del proyecto:
program Project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms
{ you can add units after this }, Unit1, Unit2;
begin
Application.Initialize;
// en vez de esto:
// Application.CreateForm(TForm1, Form1);
// Application.CreateForm(TDataModule1, DataModule1);
// esto:
Application.CreateForm(TDataModule1, DataModule1);
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Otra possibilidad quizas más elegante es crear el data module cuando lo necesites:
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Dialogs;
type
TDataModule1 = class(TDataModule)
private
{ private declarations }
public
{ public declarations }
end;
// Desaparace la variable DataModule1, que se vuelve privada en esta
// unit i se remplaza por una función
function DataModule1: TDataModule1;
implementation
var
miDataModule1: TDataModule1;
// esta funcion primero verifica que el datamodule este creado i luego devuelve la instancia
function DataModule1: TDataModule1;
begin
if miDataModule1=nil then
miDataModule1 := TDataModule1.Create(Application);
Result := miDataModule1;
end;
initialization
{$I unit2.lrs}
end.
Por supuesto, entoces debes eliminar la creacion automatica el proyecto:
program Project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms
{ you can add units after this }, Unit1, Unit2;
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Saludos,
Gerard