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

Вниз

Передача record a в форму   Найти похожие ветки 

 
ВВВ2   (2008-01-04 22:11) [0]

У меня есть некий record и есть вторая форма, в которую нужно передать этот record и возвратить измененный.

Я изменил у дополнительной формы констурктор, добавив в него передачу этого record"a по ссылке (var):

constructor TForm2.CreateWithRecord(AOwner:TComponent; var MyRecord: TMyRecord);
begin
 inherited Create(AOwner);
 FMyRecord := MyRecord;
 ...
end;


FMyRecord - это TMyRecord но уже у TForm2. Он мне нужен что бы потом в любой момент на TForm2 отредактировать запись.

Ну т.е.:
procedure TForm2.OnClick;
begin
 FMyRecord.Int1 := 11;
 ...
end;


Но при закрытии формы, оригинальный record (который я передавал в конструкторе) остается без изменения. Почему так, ведь я везде передавал ссылки на этот record? И как это исправить?

Спасибо.


 
{RASkov} ©   (2008-01-04 22:14) [1]

> [0] ВВВ2   (04.01.08 22:11)

Зачем все ити извращения?
Сделай пременную с твоим рекордом видимой во второй форме и все....


 
ВВВ2   (2008-01-04 22:18) [2]

Ну можно конечно и так, но уже просто стало интересно, почему не работает.


 
{RASkov} ©   (2008-01-04 22:37) [3]

или вот так:
type PMyRecord = ^TMyRecord;
..............
 private
   FMyRecord: PMyRecord;
.....................
constructor TForm2.CreateWithRecord(AOwner:TComponent; var MyRecord: TMyRecord);
begin
inherited Create(AOwner);
FMyRecord := @MyRecord;
...
end;

но лучше не извращаться :)


 
ВВВ2   (2008-01-04 22:42) [4]

Хммм... странно, сейчас попробовал предложенный вариант -- ну просто перенес мою переменную во Form2 в public, и после создания формы передавал record в эту переменную.
Но опять, после закрытия формы record остается не измененным.

Создаю форму:
with TForm2.Create(Self) do
 try
    FMyRecord := MyRecord;
    ShowModal;
  finally
    Free;


Что может быть не так?


 
ВВВ2   (2008-01-04 22:44) [5]


> FMyRecord := @MyRecord;

А почему так? Я думал что присвоение одной record"овой переменной другой такой-же ведет к копированию ссылки, а не созданию новой. Я не прав?


 
Johnmen ©   (2008-01-04 22:47) [6]

А это что, разве не копирование?


 
{RASkov} ©   (2008-01-04 22:47) [7]

> [4] ВВВ2   (04.01.08 22:42)

Не верно понял)

Unit Unit1;
....

type
 TForm1=class()
 .........
 public
  MyRecord: TMyRecord
 end;
...............

with TForm2.Create(Self) do
 try
  ShowModal;
 finally
  Free;
.................

А во второй форме просто используй напрямую TForm1(Owner).MyRecord если вторая форма создана с родителем "первая форма"


 
{RASkov} ©   (2008-01-04 22:49) [8]

> [5] ВВВ2   (04.01.08 22:44)

Да, но ссылка после конструктора теряется.... и остается копия данных, но не оригинал


 
{RASkov} ©   (2008-01-04 23:00) [9]

> [2] ВВВ2   (04.01.08 22:18)

Вот нечто такое и у тебя получилось:
var K: Integer;
procedure SetData(var N: Integer);
begin
 K:=N;
 K:=777;
end;

var I: Integer;
begin
 I:=10;
 SetData(I);
 ShowMessage(IntToStr(I));
end;

:о)
Как думаешь, что будет в сообщении?)


 
Reindeer Moss Eater ©   (2008-01-04 23:00) [10]

type
PMyRec = ^TMyRec;
TMyRec = record
 ...
end;
.....

constructor CreateWithRecord(AOwner:TComponent; ARec : PMyRec);
begin
....
end;


 
Плохиш ©   (2008-01-04 23:36) [11]


> ВВВ2   (04.01.08 22:44) [5]


>  FMyRecord := MyRecord;

Здесь идёт копирование одной переменной типа рекорд в другую. Учи описание языка...



Страницы: 1 вся ветка

Текущий архив: 2008.02.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
2-1200078093
Макар
2008-01-11 22:01
2008.02.03
Свойство ListBox


15-1198422204
Sergey Masloff
2007-12-23 18:03
2008.02.03
А почему просто не удалять мусорные ветки?


2-1200053220
Yasha
2008-01-11 15:07
2008.02.03
Windows form application в RAD 2007


15-1199109800
DillerXX
2007-12-31 17:03
2008.02.03
Новогодняя задачка


6-1179759600
Nucer
2007-05-21 19:00
2008.02.03
Как определить, что соединение разорвано?