...поможете мне создать функцию, с помощью которой я передам
переменные в TFormClass? Проблема в том, что MyDlg.Execute() не захотела
компилироваться, поскольку, как сообщил мне компилятор, я не могу использовать
MyDlg (определенный как: TForm).
Эта функция может выглядеть примерно так:
function ExecuteDialog( FormClass: TFormClass; var Data ): Boolean;
Я могу вам дать еще один совет: сделать все ваши формы наследниками одного
класса, в котором объявлены виртуальные методы SetData и GetData.
{ ----------------------- }unit ExecFrms;
interfaceuses Forms, Controls;
type
TExecForm = class(TForm)
publicprocedure GetData(var Data); virtual; abstract;
procedure SetData(var Data); virtual; abstract;
end;
TExecFormClass = classof TExecForm;
function ExecuteDialog(FormClass: TExecFormClass;
var Data): Boolean;
implementationfunction ExecuteDialog(FormClass: TExecFormClass;
var Data): Boolean;
beginwith FormClass.Create(Application) dotry
SetData(Data);
Result := ShowModal = mrOK;
if Result then
GetData(Data);
finally
Release;
end;
end;
end.
{ ----------------------- }
Как вы можете видеть, я поместил функцию ExecuteDialog в тот же самый модуль.
После того как Delphi создаст форму, вы должны в модуле формы сделать четыре
вещи:
вручную измените предка формы, с TForm на TExecForm;
добавьте ExecFrms в список используемых модулей;
добавьте тип записи для хранения данных, необходимых диалогу; и
Затем создаем и выполняем диалог, который должен выглядеть приблизительно
так:
{ Добавьте ExecFrms и MyDlgs в список USES вызывающего модуля. }procedure TForm1.GetNewCaptionAndWidthBtnClick(Sender: TObject);
var
Data: TMyDlgData;
begin
Data.FormCaption := Caption;
Data.FormWidth := Width;
if ExecuteDialog(TMyDlg, Data) thenbegin
Caption := Data.FormCaption;
Width := Data.FormWidth;
end;
end;
Не поверите: данный код работает еще со времён Turbo Vision!
Передача переменных форме с помощью наследования и виртуальных методов.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.