Показать сообщение отдельно
  #2  
Старый 26.05.2023, 19:09
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Думаешь в правильном направлении. У этих фреймов должен быть общий предок, в котором данная фунция должна быть 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 сама отнаследует от выбраного элемента. Кстати, так и контролы будут наследоваться, так что если у тебя на фрейме есть общая часть, ее можно отдизайнить на общем предке и в потомках добавлять только различия.
Ответить с цитированием