![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Инициализация объектов
homm © (2005-11-20 14:47:00)Имею объект
TGRushData = object(TObj)
fPSDef: TPaintState;
fPSOver: TPaintState;
...
end;
и вот такую константу...
DefGRushData: TGRushData = (
fPSDef: (
ColorFrom: clWhite;
ColorTo: $D1beaf;
...
fResultNeedUpdate: TRUE;
);
Раньше TGRushData был RECORD, и инициализировался так
var Data: PGRushData;
begin
GetMem(Data, Sizeof(TGRushData));
Move(DefGRushData, Data^ , Sizeof(TGRushData));
Но теперь есть острая необходимость именно в объекте.
Извратится с Move мне так и не удалось, а этот код...
var Data: PGRushData;
begin
New(Data, Create(AControl));
Data^ := DefGRushData;
... вызывает внутренюю ошибку компиляции. Может кто знает как
проинициализировать Объект нужными значениями, не присваивая каждое.
homm (2005-11-20 22:37:00) [1]
> This already contains fields, so it points wrong in your
> code.
А ведб точно, совсем забыл о такой "мелочи".
> Did you actually write a constructor that takes aControl
> as parameter?
А по другому то как он такой вызов скомпилит?
New(Data, Create(AControl));
> Your code should work if you derive from object, not object(Tobj)!
Неа, все-же TObj нужен (это для CustomObj).
Я это дело так организовал:
TGRushFake= record
fPSDef: TPaintState;
fPSOver: TPaintState;
...
DefGRushData: TGRushFake= (
fPSDef: (
ColorFrom: clWhite;
...
New(Result, Create(AControl));
Move(DefGRushData, Result.fPSDef, Sizeof( TGRushFake));
Thaddy (2005-11-20 21:50:00) [2]You are using Tobj as base. This already contains fields, so it points wrong in your code.
Also:
Did you actually write a constructor that takes aControl as parameter? Only Tcontrol has one, not Tobj!
Your code should work if you derive from object, not object(Tobj)!
PTest = ^ TTest;
TTest = object
a,b:integer;
end;
var Test:PTest;
New(Test);
......
Will work as you expect.