[Gambas-user] gambas and components

GMail adamnt42 at ...626...
Mon Mar 19 13:12:58 CET 2012


On Mon, 2012-03-19 at 11:43 +0100, Karl Reinl wrote:
> Salut,
> 
> my question is for gambas2 and later for gambas3 
> 
> I have an app, which uses gambas (home made) components.
> 
> What does these components know about the app.
> 
> What I'm looking for is, how can I call a Function in the app, 
> out from the component, to report what has be done.
> 
> If I try 'Form.Function()', I get 'unknown Symbol' error
> 
> I know I can use the disk for passing something backwards, but I would
> first ask if there is a way.
Karl, 
I don't know whether this will help in your case but there is a way to
do this ... for examples where the component class is inherited by an
application class.

Due to the virtual dispatch used by gambas, the actual method called
will be the inherited method.

So (for general readers) if you consider a component containing a base
class "Fred" that is inherited by a class in the main application, say
"SonOfFred", then when some "local" call in Fred, for example
Fred.Describe, if this method is also provided in SonOfFred then the
actual method, SonOfFred.Describe is invoked.

But in this case, there is a trick needed in gambas 3.  You need to
provide a "stub" method in the base class, to stop the IDE/compiler
complaining. Let me expand.  If SonOfFred has a method "Decode" that you
wish to be able to be called (or in fact, invoked by the base class in
some way,) then you need to create a stub method in Fred.  I see this as
the base class defining a method that must be overridden, IOW a sort of
virtual method.  Mainly I implement the stub to raise an error if it is
invoked, i.e. in Fred we have:

  Public Sub Decode()
    Error.Raise("Decode not overridden correctly")
  End

In your case though (assuming that by "Form" you mean the native gambas
"Form" class), this will not work.  The only quick answer I can think of
is to use an event in the component that is going to (hopefully) be
handled adequately in the application.  Bit of a lottery though.

Or perhaps I haven't quite got your central issue here?

Bruce






More information about the User mailing list