15.08.2010, 19:24
|
Активный
|
|
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
|
|
Когда в приложении много форм и держать их постоянно открытыми накладно, то как вариант :
Код:
================================
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
//Application.CreateForm(TForm2, Form2); //Форма НЕ создается при запуске приложения
Application.Run;
end.
================================
================================
unit Unit1;
interface
uses
Unit2,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
public
//---------------------------------------------------
//свойства, которые должны быть обработаны в другой форме
i1 : integer;
i2 : integer;
//---------------------------------------------------
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('До вызова: '+'i1='+IntToStr(i1)+' i2='+IntToStr(i2));
Unit2.Form2_Execute(i1, i2); //Вызываем форму и передаем ей свойства (переменные) "нашей" формы
ShowMessage('После вызова: '+'i1='+IntToStr(i1)+' i2='+IntToStr(i2));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
i1 := 100;
i2 := 2;
end;
end.
================================
================================
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin;
type
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
SpinEdit_i1: TSpinEdit; //здесь меняем i1 (из формы Form1)
SpinEdit_i2: TSpinEdit; //здесь меняем i2 (из формы Form1)
Label1: TLabel;
Label2: TLabel;
private
public
function Execute(Var i1, i2 : integer) : boolean;
end;
{
Эта форма вызывается эпизодически и объявление ее в качестве глобальной переменной не актуально
var
Form2: TForm2;
}
function Form2_Execute(Var i1, i2 : integer) : boolean;
implementation
{$R *.dfm}
function Form2_Execute(Var i1, i2 : integer) : boolean;
Var
FormX : TForm2;
begin
Result:=false;
FormX:=TForm2.Create(nil);
TRY
Result:=FormX.Execute(i1,i2);
FINALLY
FreeAndNil(FormX);
END;
end;
function TForm2.Execute(Var i1, i2 : integer) : boolean;
begin
Result:=false;
SpinEdit_i1.Value:=i1; //Получили i1 из Form1
SpinEdit_i2.Value:=i2; //Получили i2 из Form1
if ShowModal=mrOk then begin
Result:=true;
i1:=SpinEdit_i1.Value; //вернули i1 в Form1
i2:=SpinEdit_i2.Value; //вернули i2 в Form1
end;
end;
end.
================================
|