Главная страница
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.344 c
2-1199472258
Васька
2008-01-04 21:44
2008.02.03
Получить все элементы с контролла


2-1199526363
Виноградов
2008-01-05 12:46
2008.02.03
Цвет


3-1190719104
oleg_v
2007-09-25 15:18
2008.02.03
DBF - как полностью удалить запись из таблицы


15-1199107075
Иксик
2007-12-31 16:17
2008.02.03
Посоветуйте русскую песню, чтобы немцам поставить :)


3-1190804341
Vazhik
2007-09-26 14:59
2008.02.03
Псевдоним БД