Главная страница
    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.147 c
14-1105457958
Kerk
2005-01-11 18:39
2005.01.30
LG G5400


14-1105508908
Копир
2005-01-12 08:48
2005.01.30
Пиво в России опять можно пить свободно!


1-1105945409
Robotz
2005-01-17 10:03
2005.01.30
Поиск в файле по заданной маске.


14-1105566216
OneFragLeft
2005-01-13 00:43
2005.01.30
настройка FTP в IIS


1-1105818577
lipskiy
2005-01-15 22:49
2005.01.30
Почему TWebBrowser не реагирует на флаги?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский