После метода Show формы нужно сделать "некоторые действия". Эта форма также должна быть модальной. Какие есть решения данного вопроса? Callback функция - тяжеловатое решение: не хочется создавать тип функции, хранить параметры ф-ии, условие вызова (т.к. не всегда после show нужно выполнять "некоторые действия"). Есть ли какая-то информация по Callback методам? Или надо сделать фиктивную ф-ию, содержащую данный метод?
// Магия - если надо стандартное поведение - вызываем DoShowModal без параметров // если надо что-то добавить - добавляем. Ниже увидишь, как. function DoShowModal (Params : TParams = nil) : Integer; end;
// ...
{ TModalForm } procedure TModalForm.func(s: string); // Это будет выполняться после Show begin Edit1.Text := s; end;
procedure TModalForm.ShowWithFunc(Sender: TObject); // Ну, это твоя функция begin FormShow(Self); func(param); Self.OnShow := FormShow; end;
function TModalForm.DoShowModal(Params: TParams): Integer; begin if Assigned(Params) then // Что-то передали? Значит, делаем доп. действия begin param := Params.p; OnShow := ShowWithFunc; end;
ShowModal;
if Assigned(Params) then // не забываем очистить память иначе будет утечка Params.Free; end;
procedure TModalForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caHide; // Чтобы быть уверенным, что форма не разрушится, а только скроется end;
procedure TModalForm.FormShow(Sender: TObject); begin // end;
{ TParams } constructor TParams.Create(param: string); begin p := param; // Собственно, ты можешь сделать гораздо больше одного конструктора // и передавать любые данные, включая и процедуры обработки тоже end;
А вот как это выглядит из главной формы:
// Это вызывает доп. действие после Show procedure TForm1.BitBtn1Click(Sender: TObject); begin ModalForm.DoShowModal(TParams.Create('123')); end;
// Это - вызовет только стандартный метод ShowModal procedure TForm1.Button1Click(Sender: TObject); begin ModalForm.DoShowModal; end;