![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача 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)
Зачем все ити извращения?
Сделай пременную с твоим рекордом видимой во второй форме и все....