Читаем Советы по Delphi. Версия 1.4.3 от 1.1.2001 полностью

Delphi 1


…поможете мне создать функцию, с помощью которой я передам переменные в TFormClass? Проблема в том, что MyDlg.Execute не захотела компилироваться, поскольку, как сообщил мне компилятор, я не могу использовать MyDlg (определенный как: TForm).

Эта функция может выглядеть примерно так:

function ExecuteDialog(FormClass: TFormClass; var Data): Boolean;

Я могу вам дать еще один совет: сделать все ваши формы наследниками одного класса, в котором объявлены виртуальные методы SetData и GetData.

{ ----------------------- }

unit ExecFrms;

interface

uses Forms, Controls;

type TExecForm = class(TForm)

public

 procedure GetData(var Data); virtual; abstract;

 procedure SetData(var Data); virtual; abstract;

end;

TExecFormClass = class of TExecForm;


function ExecuteDialog(FormClass: TExecFormClass; var Data): Boolean;


implementation


function ExecuteDialog(FormClass: TExecFormClass; var Data): Boolean;

begin

 with FormClass.Create(Application) do try

  SetData(Data);

  Result := ShowModal = mrOK;

  if Result then GetData(Data);

 finally

  Release;

 end;

end;

end.

{ ----------------------- }

Как вы можете видеть, я поместил функцию ExecuteDialog в тот же самый модуль.

После того как Delphi создаст форму, вы должны в модуле формы сделать четыре вещи:

1. вручную измените предка формы, с TForm на TExecForm;

2. добавьте ExecFrms в список используемых модулей;

3. добавьте тип записи для хранения данных, необходимых диалогу; и

4. перекрыть методы SetData и GetData.

{ ----------------------- }

unit MyDlgs;

interface

uses WinTypes, WinProcs, Classes, Graphics, Forms,Controls, Buttons, StdCtrls, Spin, ExtCtrls, ExecFrms;


type

 { Запись для данных, необходимых модальной форме... }

 TMyDlgData = record

  FormCaption: string;

  FormWidth: Integer;

 end;


 TMyDlg = class(TExecForm)

  OKBtn: TBitBtn;

  CancelBtn: TBitBtn;

  HelpBtn: TBitBtn;

  Bevel1: TBevel;

  Edit1: TEdit;

  SpinEdit1: TSpinEdit;

 public

  procedure SetData(var Data); override;

  procedure GetData(var Data); override;

 end;


var MyDlg: TMyDlg;


implementation


{$R *.DFM}


procedure TMyDlg.SetData(var Data);

begin

 with TMyDlgData(Data) do begin

  Edit1.Text := FormCaption;

  SpinEdit1.Value := FormWidth;

 end;

end;


procedure TMyDlg.GetData(var Data);

begin

 with TMyDlgData(Data) do begin

  FormCaption := Edit1.Text;

  FormWidth := SpinEdit1.Value;

 end;

end;


end.

{ ----------------------- }

Затем создаем и выполняем диалог, который должен выглядеть приблизительно так:

{ Добавьте ExecFrms и MyDlgs в список USES вызывающего модуля. }

procedure TForm1.GetNewCaptionAndWidthBtnClick(Sender: TObject);

var Data: TMyDlgData;

begin

Data.FormCaption := Caption;

 Data.FormWidth := Width;

 if ExecuteDialog(TMyDlg, Data) then begin

  Caption := Data.FormCaption;

  Width := Data.FormWidth;

 end;

end;

Не поверите: данный код работает еще со времён Turbo Vision!

– Ed Jordan

Освобождение экземпляров формы

Delphi 1

В нашем примере для решения задачи мы передаем конструктору переменную формы. Затем, при закрытии формы, мы сбрасываем эту переменную.

Естественно, эта технология подразумевает написание некоторого кода, поэтому, если вы не расположены к этому действию, пропустите мое дальнейшее повествование.

TMyForm = class(TForm)

private

 FormVar: ^TMyForm;

public

 constructor Create(AOwner: TComponent; var AFormVar: TMyForm);

Перейти на страницу:

Похожие книги

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.

Гэри Розенцвейг

Программирование, программы, базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT