Показать сообщение отдельно
  #12  
Старый 15.08.2010, 19:24
roamer roamer вне форума
Активный
 
Регистрация: 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.
================================
Ответить с цитированием