![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Свойство типа "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;