Delphi 1
…поможете мне создать функцию, с помощью которой я передам переменные в TFormClass? Проблема в том, что MyDlg.Execute не захотела компилироваться, поскольку, как сообщил мне компилятор, я не могу использовать MyDlg (определенный как: TForm).
Эта функция может выглядеть примерно так:
function
Я могу вам дать еще один совет: сделать все ваши формы наследниками одного класса, в котором объявлены виртуальные методы SetData и GetData.
{ ----------------------- }
unit
interface
uses Forms, Controls;
type
public
procedure
procedure
end
TExecFormClass = class of
function
implementation
function
begin
with
SetData(Data);
Result := ShowModal = mrOK;
if
finally
Release;
end
end
end
{ ----------------------- }
Как вы можете видеть, я поместил функцию ExecuteDialog в тот же самый модуль.
После того как Delphi создаст форму, вы должны в модуле формы сделать четыре вещи:
1. вручную измените предка формы, с TForm на TExecForm;
2. добавьте ExecFrms в список используемых модулей;
3. добавьте тип записи для хранения данных, необходимых диалогу; и
4. перекрыть методы SetData и GetData.
{ ----------------------- }
unit
interface
uses
type
{ Запись для данных, необходимых модальной форме... }
TMyDlgData = record
FormCaption: string
FormWidth: Integer;
end
TMyDlg = class
OKBtn: TBitBtn;
CancelBtn: TBitBtn;
HelpBtn: TBitBtn;
Bevel1: TBevel;
Edit1: TEdit;
SpinEdit1: TSpinEdit;
public
procedure
procedure
end
var
implementation
{$R *.DFM}
procedure
begin
with
Edit1.Text := FormCaption;
SpinEdit1.Value := FormWidth;
end
end
procedure
begin
with
FormCaption := Edit1.Text;
FormWidth := SpinEdit1.Value;
end
end
end
{ ----------------------- }
Затем создаем и выполняем диалог, который должен выглядеть приблизительно так:
{ Добавьте ExecFrms и MyDlgs в список USES вызывающего модуля. }
procedure
var
begin
Data.FormCaption := Caption;
Data.FormWidth := Width;
if
Caption := Data.FormCaption;
Width := Data.FormWidth;
end
end
Не поверите: данный код работает еще со времён Turbo Vision!
– Ed Jordan
Освобождение экземпляров формы
Delphi 1
В нашем примере для решения задачи мы передаем конструктору переменную формы. Затем, при закрытии формы, мы сбрасываем эту переменную.
Естественно, эта технология подразумевает написание некоторого кода, поэтому, если вы не расположены к этому действию, пропустите мое дальнейшее повествование.
TMyForm = class
…
private
FormVar: ^TMyForm;
public
constructor
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT