Форум: "Основная";
Текущий архив: 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