Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Вниз

Неразрешимая проблема из 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.042 c
1-1106117467
WinLamka
2005-01-19 09:51
2005.01.30
dll и обьекты


14-1105304252
Fin
2005-01-09 23:57
2005.01.30
Снежный человек!


14-1105492871
aus
2005-01-12 04:21
2005.01.30
Антивирус


1-1105814428
kai
2005-01-15 21:40
2005.01.30
Преобразование форматной строки SQL-запроса


11-1088618446
Red Wind
2004-06-30 22:00
2005.01.30
CloseQuery





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский