[Lazarus] Is it meaningful or possible to change the visibility or the properties and events in a form or datamodule, ie make the private or protected?

michael.vancanneyt at wisa.be michael.vancanneyt at wisa.be
Fri Mar 23 15:38:57 CET 2012



On Fri, 23 Mar 2012, Frank Church wrote:

> On 23 March 2012 14:15,  <michael.vancanneyt at wisa.be> wrote:
>>
>>
>> On Fri, 23 Mar 2012, Michael Fuchs wrote:
>>
>>> Am 23.03.2012 14:55, schrieb Frank Church:
>>>>
>>>> [...]  I'd prefer to look only at the public section and say, Oh,
>>>> this is what it does for the program's other modules. Whatever isn't
>>>> there is not relevant to the rest of the application.
>>>>
>>>> I understand that it comes from a Delphi legacy as RAD tool dating
>>>> from a time when the principles underlying object orientation had not
>>>> properly sunk in. [...]
>>>
>>>
>>> You can already do this by changing the way you are programming. Just
>>> write a class which only publish the needed methods and properties to the
>>> outside.
>>> Don't let the Application create and control your forms, move this to your
>>> class. So, your class hides the forms, datampdules and other stuff.
>>
>>
>> That's what I do too.
>>
>> unit appforms;
>>
>> type
>>  TBaseMyForm = Class(TForm)
>>    // Define public interface
>>  end;
>>  TBaseMyFormClass = Class of TBaseMyForm;
>>
>> Var
>>  MyFormClass : TBaseMyFormClass = Nil
>>
>> And then somewhere:
>>
>>
>>
>> Type
>>  TForm = TBaseMyForm;
>>
>>  TMyForm = Class(TForm);
>>   // Regular lazarus definition of form
>>  end;
>>
>> initialization
>>  MyFormClass = TMyForm; end;
>>
>> And then, whenever I need an instance of TBaseMyForm:
>>
>> F:=MyFormClass.Create(Self);
>>
>> You could even substitute the complete TMyForm form with another one,
>> depending on
>> configuration options.
>>
>> Michael.
>>
>>
>
> Do you have a good working sample of this approach?

Yes, all my apps at work.  But they are not open source :/

It's really not much more than what I wrote above.

Just one large unit with a lot of 'base form' definitions and class pointers
for each of them.

Michael.


More information about the Lazarus mailing list