To allow easy extension of kol-mck objects I use this:
procedure New{ObjectName}(var Result: P{ObjectName}; AParent: PControl; inheriting : Boolean = false);
begin
if not inheriting then
begin
{$IFDEF KOLCLASSES}
Result := P{ObjectName}.Create;
{$ELSE OBJECTS}
New( Result, Create );
{$ENDIF KOL CLASSES/OBJECTS}
end;
end;
...
end;
It doesn't break any existing software and allow extension as easy as this;
TMyControl = TControl
fNewMember : integer;
preocedure doSomething;
end;
procedure NewMyControl(var Result; AParent: PControl; inheriting=false);
begin
New(Result, Create);
NewControl(Result,AParent,true);
fNewMember := 33;
...
end;
On mirror.pas of mck :
SL.Add( 'procedure New' + FormName + '( var Result: P' + FormName +
'; AParent: PControl; inheriting: boolean = false );' );
SL.Add( 'begin' );
SL.Add( '' );
SL.Add( ' if not inheriting then' );
SL.Add( ' begin' );
SL.Add( ' {$IFDEF KOLCLASSES}' );
SL.Add( ' Result := P' + FormName + '.Create;' );
SL.Add( ' {$ELSE OBJECTS}' );
SL.Add( ' New( Result, Create );' );
SL.Add( ' {$ENDIF KOL CLASSES/OBJECTS}' );
SL.Add( ' end;' );