Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача record'a в форму [D7]


ВВВ2 ©   (2008-01-04 22:11:00) 

У меня есть некий 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? И как это исправить?

Спасибо.


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


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


>  FMyRecord := MyRecord;

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


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

> [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:00) [3]

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

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


{RASkov}   (2008-01-04 22:49:00) [4]

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

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


Johnmen   (2008-01-04 22:47:00) [5]

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


{RASkov}   (2008-01-04 22:47:00) [6]

> [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 если вторая форма создана с родителем "первая форма"


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


> FMyRecord := @MyRecord;

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


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

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

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


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


{RASkov}   (2008-01-04 22:37:00) [9]

или вот так:
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:18:00) [10]

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


{RASkov}   (2008-01-04 22:14:00) [11]

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо