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

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

Инициализация объектов


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.


Наверх

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