Думаешь в правильном направлении. У этих фреймов должен быть общий предок, в котором данная фунция должна быть virtual; abstract;
Код:
unit frmEditFrameBase;
type
TEditFrameBase = class(TFrame)
...
public
function EditAndSave() : Boolean; virtual; abstract;
Код:
unit frmEditFrameA;
uses frmEditFrameBase;
type
TEditFrameA = class(TEditFrameBase)
...
public
function EditAndSave() : Boolean; override;
...
function TEditFrameA.EditAndSave() : Boolean;
begin
// Do for FrameA
// Do not call inherited here due to this method is abstract in the parent
end;
Код:
unit frmEditFrameB;
uses frmEditFrameBase;
type
TEditFrameB = class(TEditFrameBase)
...
public
function EditAndSave() : Boolean; override;
...
function TEditFrameB.EditAndSave() : Boolean;
begin
// Do for FrameB
// Do not call inherited here due to this method is abstract in the parent
end;
Теперь в основной программе можно создать переменную типа базового фрейма:
Код:
var
myFrame : TEditFrameBase;
begin
myFrame := TEditFrameA.Create(Nil);
myFrame.EditAndSave;
myFrame.Free;
...
myFrame := TEditFrameB.Create(Nil);
myFrame.EditAndSave;
myFrame.Free;
PS. Для того, что бы не мучаться с ручным редактированием предка для фрейма (а его надо указать и в .pas и в .dfm файлах), есть визуальное наследование. Когда создаешь новую форму/фрейм, там в диалоге есть раздел с именем твоего приложения, в нем все формы и фреймы, которые ты уже создал. Просто кликаешь на нужной форме/фрейме и Delphi сама отнаследует от выбраного элемента. Кстати, так и контролы будут наследоваться, так что если у тебя на фрейме есть общая часть, ее можно отдизайнить на общем предке и в потомках добавлять только различия.