[Lazarus] Using Lazarus for non-graphical apps

Michael Schnell mschnell at lumino.de
Tue Jan 7 16:43:36 CET 2014

On 01/07/2014 04:16 PM, Paul Breneman wrote:
> So please share what you can.  Thanks!
Right now I am too busy with completely unrelated things to do the 
planned "active NoGui" Widget Type :-( .

I just can provide some thoughts and offer to reply to any questions if 
anybody wants to get on that task.

The basics are (now) rather clear to me:

  - The stuff needs to be appropriately integrated in the "WidgetType" 
selection mechanism Lazarus provides.

  - The stuff needs to be appropriately integrated in the "Project 
Source" mechanism Lazarus provides.

  - You need to do (at least) a TApplication class and a TTimer class

  - Any not GUI related stuff in TApplicartion should work as expected 
(.ExeName, Callback-events, QueueAsyncCall ....) should work as expected

  - WakeMainThread needs to be implemented according to the OS we 
compile for.

  - After the initialization a main loop is executed that calls 
CheckSynchronize with an appropriate timeout (see below)

  - to do a really simple TTimer class my idea is:
  - - calculate the common denominator (but rounding to an appropriate 
minimum aka "Granularity") of any instanciated TTimers' Time settings
  - - use that value as Timeout in CheckSynchronize.
  - - in the main loop, count a global timer and call TTimer Events as 
appropriate (if timer mod Timer[i].TimeSpec = 0, with Timer[i].TimeSpec 
:= Timer[i].Time div Granularity)
  - - The Granularity should be a property the user can set.

I did a testing program that checks the multiple means of main thread 
notification with multiple Widget Types.

If there is a new Widget Type I would modify the program to work with 
same and provide it for testing the WidgetType


More information about the Lazarus mailing list