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

Вниз

Неразрешимая проблема из GLScene ? Сохранение float-значения   Найти похожие ветки 

 
TGLDummyCube   (2005-01-18 02:38) [0]

Есть компоенент TGLDummyCube
Вот часть кода :
TGLDummyCube = class (TGLCameraInvariantObject)
 private
   FCubeSize : TGLFloat;
...
 protected
   procedure SetCubeSize(const val : TGLFloat);
...
 public
   constructor Create(AOwner : TComponent); override;
...
 published
   property CubeSize : TGLFloat read FCubeSize write SetCubeSize;
end;

...

// Create
//
constructor TGLDummyCube.Create(AOwner : TComponent);
begin
 inherited;
 ...
 FCubeSize:=1;
 ...
end;


Проблема в том, что CubeSize невозможно сохранить как равное нулю. Потому, что Дельфи по умолчанию считает, что Флоаты равны нулю, и поэтому, если установить CubeSize в ноль, и сохранить программу, то Дельфи не сохранит CubeSize вообще, так как его значение равно значению по умолчанию, а когда мы загрузим программу, то выполниться конструктор, который устоновит CubeSize
в единицу.

Такая проблема. Её в принципе можно разрешить ? Или она неразрешима в принципе ?


 
TGLDummyCube   (2005-01-18 03:48) [1]

type
 TGLfloat = Single;


 
TGLDummyCube   (2005-01-18 03:51) [2]

В общем проблема наверное сводится к тому, можно ли определить кто вызвал конструктор ? Дельфи, когда загружала программу, или пользователь, когда своими руками ( мышами ) создал TGLDummyCube.


 
Юрий Зотов ©   (2005-01-18 05:49) [3]

...
private
 function IsCubeSizeStored: boolean;    
 ...
published
 property CubeSize: TGLFloat read FCubeSize write SetCubeSize stored IsCubeSizeStored;
 ...

function TGLDummyCube.IsCubeSizeStored: boolean;
begin
 Result := FCubeSize <> 1
end;


 
Kerk ©   (2005-01-18 05:56) [4]

Может стоит stored True и не воротить столько?


 
Юрий Зотов ©   (2005-01-18 06:12) [5]

> Kerk ©   (18.01.05 05:56) [4]

Функция - несколько байт 1 раз.
Безусловное сохранение - по 4 байта несколько раз.


 
TGLDummyCube   (2005-01-18 07:00) [6]


> Юрий Зотов ©   (18.01.05 05:49) [3]

Так, если параметр установить в ноль, то он начинает сохраняться !
Но к сожалению, сохраняется как равный единице. Видать чего-то ещё ему не хаватает.


 
Юрий Зотов ©   (2005-01-18 07:17) [7]

> TGLDummyCube   (18.01.05 07:00) [6]

Что-то накручено. Приведите код метода SetCubeSize.


 
TGLDummyCube   (2005-01-18 07:53) [8]

// SetCubeSize
//
procedure TGLDummyCube.SetCubeSize(const val : TGLFloat);
begin
if val<>FCubeSize then begin
 FCubeSize:=val;
 StructureChanged;
end;
end;


 
TGLDummyCube   (2005-01-18 07:55) [9]

Ещё раз проверил. Нет. Ноль не сохраняется. Или это глюк ? Пойду ещё перекомпилирую.


 
VMcL ©   (2005-01-18 08:14) [10]

>>TGLDummyCube  (18.01.05 07:55) [9]

Если не ошибаюсь, подобная или такая же проблема когда-то обсуждалась в разделе "Компоненты". По-моему, пришли к выводу, что это баг Delphi.


 
VMcL ©   (2005-01-18 08:14) [11]

P.S. Можно попробовать поискать по архивам форума.


 
TGLDummyCube   (2005-01-19 01:11) [12]


> VMcL ©   (18.01.05 08:14) [11]
> P.S. Можно попробовать поискать по архивам форума.

Они слишком большие, я немогу столько скачивать.
Так, проблеа точно неразрешима ? Может есть какой обходной путь ?


 
TGLDummy   (2005-01-20 03:45) [13]

Облом, да ? Облом ?


 
Набережных С.   (2005-01-20 09:00) [14]


 private
....
   procedure ReaderProc(Reader: TReader);
   procedure WriterProc(Writer: TWriter);
 protected
   procedure DefineProperties(Filer: TFiler); override;
...
 published
  property CubeSize : TGLFloat read FCubeSize write SetCubeSize stored false;
 end;

procedure TTestComponent.DefineProperties(Filer: TFiler);
begin
 inherited;
 Filer.DefineProperty("CubeSize", ReaderProc, WriterProc, FCubeSize <> 1);
end;

procedure TTestComponent.ReaderProc(Reader: TReader);
begin
 FCubeSize:=Reader.ReadFloat;
end;

procedure TTestComponent.WriterProc(Writer: TWriter);
begin
 Writer.WriteFloat(FCubeSize);
end;
</code



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

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

Наверх




Память: 0.5 MB
Время: 0.046 c
1-1105858601
DDDeN
2005-01-16 09:56
2005.01.30
Защита программного пакета


3-1104254172
Чеширский_Кот
2004-12-28 20:16
2005.01.30
MySQL Database


1-1105961360
Кабан
2005-01-17 14:29
2005.01.30
Где взять иконки с палитры компонентов Delphi?


3-1104211490
slart
2004-12-28 08:24
2005.01.30
Delphi+Mysql


1-1106224690
WhiteGuy
2005-01-20 15:38
2005.01.30
Name of the File