Форум: "Начинающим";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];
ВнизПередача 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.039 c