Главная страница
    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.042 c
2-1200229743
GhoulMaster
2008-01-13 16:09
2008.02.03
событи принятия сообщени в TTcpServer


2-1199868237
DevilDevil
2008-01-09 11:43
2008.02.03
Почему может возникать неправильная максимизация ?


15-1198843903
Wolf
2007-12-28 15:11
2008.02.03
Подскажите какие файлы в проекте отвечают за хранение версии


11-1183061021
[e]Bu$ter
2007-06-29 00:03
2008.02.03
UNICODE_CTRLS и TextAlign


3-1190642401
novill
2007-09-24 18:00
2008.02.03
Как без UDF реализоывать в IB7.5 обрезать строки до нужной длины?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский