[Lazarus] Web Module not works on Linux

Michael Van Canneyt michael at freepascal.org
Sun Nov 21 15:34:23 CET 2010



On Sun, 21 Nov 2010, Joost van der Sluis wrote:

>>
>> Correct. But:
>> 1. Web applications have their own application object.
>> 2. Web applications have no use for CreateForm(). They don't have forms.
>>     All modules are created dynamically.
>>
>> If someone codes forms.application.createform() in a web or even console app,
>> then he is of course coding something totally wrong :-)
>
> And how about DATA modules?

Well, just use

  Procedure TCustomWebApplication.CreateForm(AClass : TComponentClass; out Reference);

Or
   TDataModule.Create(Whatever);

I use them all the time.

In each case, TWebModule is a descendent of TDataModule, so there is no essential 
difference whatever.

The trick is that the lresources unit sets a hook for InitInheritedComponent in the 
classes unit in it's initialization routine:

procedure InternalInit;
begin
   LazarusResources := TLResourceList.Create;
   // This is where the magic happens...
   RegisterInitComponentHandler(TComponent, @InitResourceComponent);
   PropertiesToSkip := TPropertiesToSkip.Create;
end;

InitInheritedComponent uses this hook to start the streaming system and 
InitInheritedComponent is called in TDatamodule.Create()

Application.Createform does nothing special, in essence it does

   Reference:=AClass.Create(Self);

So all that is needed for streaming is to include lresources. No more, no less.

Conclusion: no need for the 'nogui' widgetset to use streaming.

(my personal conclusion: dump the nogui widgetset, it serves no purpose except
  encourage wrong programming. But that's up to the lazarus devels to decide.)

Michael.




More information about the Lazarus mailing list