Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.057 c
5-1166288613
Aleksandr
2006-12-16 20:03
2008.02.03
Создание свойства нового компонента


2-1199304844
aha
2008-01-02 23:14
2008.02.03
зашился в вычислениях CRC , полистал кучу литературы, пообращался


15-1198921024
asd
2007-12-29 12:37
2008.02.03
принцип работы телефона(обычнрго)


10-1142832134
Alex_C
2006-03-20 08:22
2008.02.03
Создание многопоточных приложений на COM


4-1182958417
sergeii
2007-06-27 19:33
2008.02.03
как можно послать локальному активному пользователю сообщение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский