Форум: "Основная";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];
ВнизИзменение объектов одного модуля из другого модуля Найти похожие ветки
← →
Walrus (2003-11-25 20:33) [0]Вечер добрый всем! У меня есть объект форма1 типа TForm1, у формы1 - public поле fA типа А. А - это класс, у него есть public поле b типа integer. По нажатию кнопки на форме1 вызывается форма2, в обработчике событий которой меняется значение поля форма1.fA.b. Отработал обработчик, дальше нажали кнопку2 формы1 и появилась форма3, в её обработчиках мы пытаемся обратиться к полю форма1.fA.b. И что же? Оказывается, его значение не изменилось! Все модули связаны директивами uses и классы объявлены в интерфейсной части. Во время всех манипуляций форма1 не уничтожается. Занятно: Если же А - не класс, а целое поле, то его изменения сохраняются! Помогите советом!
Спасибо.
← →
default (2003-11-25 20:44) [1]покажи код
← →
Walrus (2003-11-25 21:50) [2]Прошу прощения, не спросишь - не додумаешься. Заработало. Просто у меня fa создавалось в обработчике OnActivate формы1, т.е. когда формы сменяли друг друга он вызывался и каждый раз обновлял fa исходным значением. Приведу код. Он - просто примерчик на тему нашей системы. Она из кучи модулей, там код затмевает суть проблемы.
///////////////////////////////////////////
unit Unit1;
interface
uses
Unit2, Unit3, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
fa : A;
end;
var
Form1: TForm1;
implementation
uses Unit4;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.Visible := true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form4.Visible := true;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
// fa := a.CreateMe( 1 ); //Вот тут мы и сглупили!!!
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
fa := a.CreateMe( 1 ); //Вот так надо!
end;
end.
/////////////////////////////////////////////////////////////
unit Unit2;
interface
uses
Unit3, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm2 = class(TForm)
BitBtn1: TBitBtn;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
uses Unit1;
procedure TForm2.Button1Click(Sender: TObject);
begin
form1.fa.b := 2;
form2.Visible := false;
end;
end.
/////////////////////////////////////////////////////////
unit Unit3;
interface
type
A = class
public b : integer;
constructor CreateMe( b1 : integer );
end;
implementation
constructor a.CreateMe( b1 : integer );
begin
b := b1;
end;
end.
////////////////////////////////////////////////////////
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm4 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
uses Unit1, Unit3;
procedure TForm4.Button1Click(Sender: TObject);
begin
form1.fa.b := 6;
end;
end.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c