[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