Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Свойство типа "record" [D6, Win2k]


ilya39 ©   (2005-01-20 11:14:00) 

В отдельном модуле пишем:

unit2;

type
 TSomeType = record
   p1: string;
   p2: string;
 end;

 TSomeClass = class(TObject)
 private
   FSomeType: TSomeType;
 public
   property SomeType: TSomeType read FSomeType write FSomeType;
 end;


В модуле главной формы:

uses Unit2;

procedure TForm1.Button1Click(Sender: TObject);
var tmp: TSomeType;
begin
 with TSomeClass.Create do
 begin
   tmp.p1 := 'что-то'; //так работает
   tmp.p2 := 'еще что-то'; //так работает
   SomeType := tmp; //и так работает
   tmp.p1 := SomeType.p1
   SomeType.p1 := 'что-то';//А так не работает: Left side cannot be assigned to
   Free;
 end;
end;

Почему поля свойства-записи получаются read-only и как тогда правильно их объявлять?


PVOzerski   (2005-01-20 12:15:00) [1]

И вот так можно (D3, по крайней мере):
with SomeClass.SomeType do
 p1:='Hello!';


ilya39   (2005-01-20 11:38:00) [2]


> Style ©  (20.01.05 11:23) [2]


> TUser ©   (20.01.05 11:31) [5]


Спасибо. Понравилось.


TUser   (2005-01-20 11:31:00) [3]

Можешь объявить TSomeType классом и прописать его создание при создании формы (лучше всего - в конструкторе).


Amoeba   (2005-01-20 11:28:00) [4]


> ilya39 ©   (20.01.05 11:26) [3]

Как ты хочешь нельзя.


ilya39   (2005-01-20 11:26:00) [5]

Можно конечно ... но для того что бы изменить SomeType.p1 не меняя других полей записи надо:

tmp := SomeType;
tmp.p1 := 'что то';
SomeType := tmp;

Сразу-то никак нельзя?


Style   (2005-01-20 11:23:00) [6]

Что-то я не видел такого чтобы из record делали property.
Не понимает такого..

либо так

type
PSomeType = ^TSomeType;

...

PSomeType(@SomeType)^.p1 := 'Что-то';

либо так

type
TSomeType = record
  p1: string;
  p2: string;
end;
PSomeType = ^TSomeType;

TSomeClass = class(TObject)
private
  FSomeType: PSomeType;

public
  property SomeType: PSomeType read FSomeType write FSomeType;
end;


Skier   (2005-01-20 11:17:00) [7]

SomeType := tmp;


Наверх

Титульная страница Поиск, карта сайта Написать письмо