[Lazarus] Help clarify use of TApplication with tiOPF example.

Sven Barth pascaldragon at googlemail.com
Sat Mar 12 20:55:48 CET 2011


On 12.03.2011 16:01, Frank Church wrote:
> Here is the pared down Lazarus equivalent
>
>     program Demo_LoadPersistenceLayerIfDef_Laz;
>
>     {$mode objfpc}{$H+}
>
>     uses
>        {$IFDEF UNIX}{$IFDEF UseCThreads}
>        cthreads,
>        {$ENDIF}{$ENDIF}
>        Interfaces, // this includes the LCL widgetset
>        Forms, //frmMain,

This does not include frmMain, but the common form ancestor TForm and 
also the global Application variable and its TApplication type.

>        LResources,

This is needed for the inclusion of LRS files. This is not needed if RES 
files are used (don't know whether your version of Lazarus supports that 
already).

>        { you can add units after this }
>        DemoDBUtils in '..\Common\DemoDBUtils.pas';
>
>     {$IFDEF WINDOWS}{$R Demo_LoadPersistenceLayerIfDef_Laz.rc}{$ENDIF}
>
>     begin
>        {$I Demo_LoadPersistenceLayerIfDef_Laz.lrs}
>        Application.Initialize;
>        //Application.CreateForm(TForm1, Form1);
>        //Application.Run;
>        DemoDBUtils.ShowConnectedDatabases;
>     end.
>
>
> I want to know if in order to display the dialog the project could be
> pared down further.
> Is there some way to get the dialog to show if the project did not use
> TApplication?
>

You need to initialize and maybe also run the Application so that the 
main loop is executed and thus events are passed to the dialog.
Note: when you put DemoDBUtils.ShowConnectedDatabases below 
Application.Run the call won't be executed until the application is 
terminated, because the main event processing loop is running in there.

> Are the .rc files and .lrs files also required?
>

If you don't need an application icon, version info or a manifest (on 
Windows XP and newer) then you don't need these resources.

The following is the main project source if you create a new application 
in Lazarus 0.9.31 (please note, that Lazarus does not use LRS resources 
by default anymore).

==== source begin ====

program Project1;

{$mode objfpc}{$H+}

uses
   {$IFDEF UNIX}{$IFDEF UseCThreads}
   cthreads,
   {$ENDIF}{$ENDIF}
   Interfaces, // this includes the LCL widgetset
   Forms, Unit1
   { you can add units after this };

{$R *.res}

begin
   RequireDerivedFormResource := True;
   Application.Initialize;
   Application.CreateForm(TForm1, Form1);
   Application.Run;
end.

==== source end ====

I personally would suggest you to put a startup dialog into the 
applications OnShow or OnActivate event, because this is guarantied to 
be cross platform, while showing a dialog without the main loop might 
only work on Windows.

Regards,
Sven




More information about the Lazarus mailing list