Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.04;
Скачать: CL | DM;

Вниз

Изменение объектов одного модуля из другого модуля   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.008 c
8-11614
simmoril
2003-08-03 14:51
2003.12.04
считывание данных из bmp файла


9-11578
8bit
2003-05-19 15:29
2003.12.04
Солкновения


11-11600
Kladov
2003-03-10 19:14
2003.12.04
Версия 1.70


4-11747
npAKTuk
2003-10-07 09:03
2003.12.04
Реализация DragNDrop в API


6-11651
Verg
2003-10-09 13:37
2003.12.04
closesocket