Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.30;
Скачать: CL | DM;

Вниз

Свойство типа "record"   Найти похожие ветки 

 
ilya39 ©   (2005-01-20 11:14) [0]

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

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 и как тогда правильно их объявлять?


 
Skier ©   (2005-01-20 11:17) [1]

SomeType := tmp;


 
Style ©   (2005-01-20 11:23) [2]

Что-то я не видел такого чтобы из 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;


 
ilya39 ©   (2005-01-20 11:26) [3]

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

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

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


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


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

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


 
TUser ©   (2005-01-20 11:31) [5]

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


 
ilya39 ©   (2005-01-20 11:38) [6]


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


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


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


 
PVOzerski ©   (2005-01-20 12:15) [7]

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



Страницы: 1 вся ветка

Текущий архив: 2005.01.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.045 c
1-1106041608
ghg
2005-01-18 12:46
2005.01.30
передача параметров модальному окну


1-1106219675
Alcogol
2005-01-20 14:14
2005.01.30
левая панель


14-1105528663
Subdigger
2005-01-12 14:17
2005.01.30
xp, registry...


14-1105191129
Luba
2005-01-08 16:32
2005.01.30
конверсия форматов


6-1100692778
BFG9k
2004-11-17 14:59
2005.01.30
Ошибка определения размера файла в idFTP