Перейти к содержанию
Fire Monkey от А до Я
  • 0

Подскажите, Почему у меня не освобождается память при выполнении 3D переворота контекста 2D формы


aleksandrguru

Вопрос

Пытаюсь сделать форму по примеру ControlsDemo, как только по батону кликаю то все черный экран приложение работает скрина нет, копировал все с примера

function TControl.MakeScreenshot: TBitmap;
var
  SceneScale: Single;
begin
  if Scene <> nil then  ///// тут выскакивает ошибка
    SceneScale := Scene.GetSceneScale
  else

unit FMX.Controls;

Update 1:

Все нашел невнимательно смотрел ControlRoot

Update 2:

Теперь у меня скрин вместо программы))

// FreeAndNil(FViewport); несработало
FViewport.DisposeOf;  работает два раза потом живой скрин работает не начто не реагирует

как уничтожить его правильно??

Update 3:

Нашел ответ на форуме

FViewport.Parent:= nil;
FViewport.Free;

Update 4:

Пример заработал но память растет с каждым выполнение и фактически не очищается, испробовал все варианты но ничего не выходит

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

пробовал оперативка не очищается

Update 1:

все перепробовал не помогает нечего как решить проблему , хотел добавить 3d в программу

вот код полностью

procedure TForm1.SwitchTo3D;
var
  LImg: TImage;
begin
  { Create 3D viewport and layer }
  FViewport := TViewport3D.Create(Self);
  FViewport.Parent := Self;
  FViewport.Align := TAlignLayout.Client;
  FViewport.Color := claNull;
  FContainer := TLayer3D.Create(Self);
  FContainer.Parent := FViewport;
  FContainer.Projection := TProjection.Screen;
  FContainer.Align := TAlignLayout.Client;
  LImg := TImage.Create(Self);
  LImg.Align := TAlignLayout.Client;
  LImg.Bitmap.Assign(ControlRoot.MakeScreenshot);
  LImg.Margins := ControlRoot.Margins;
  LImg.Parent := FContainer;
  ControlRoot.Visible := False;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
   TButton(Sender).Enabled := false;
   SwitchTo3D;

  if Assigned(FContainer) then
  begin
    TAnimator.AnimateFloat(FContainer, 'Position.Y', 500, 1);
    TAnimator.AnimateFloatDelay(FContainer, 'Position.Y', 0, 1, 1);
    TAnimator.AnimateFloatWait(FContainer, 'RotationAngle.Y', 360, 2, TAnimationType.InOut, TInterpolationType.Back);
  end;
   SwitchTo2D;
   TButton(Sender).Enabled := true;
end;



procedure TForm1.SwitchTo2D;
var
LImg: TImage;
begin
  TRY
  FViewport.DisposeOf;
  FViewport.Parent:= nil;
  FViewport.Free;

  FINALLY
  END;
  ControlRoot.Visible := True;
end;

Update 2:

Всего нужно уничтожить объект и очистить память не пойму почему не работает

может в манифесте разрешения какие нужны??

вот проект

test.zip

Ссылка на комментарий
  • 0
  • Администраторы

Какая платформа?

 

Если iOS или Android. Вы держите ссылки на FContainer и FViewport в форме,

var
  Form15: TForm15;
  FViewport:TViewport3D;
  FContainer:TLayer3D; 

что не дает уничтожить FViewport, так как он в чилдах держит ссылку на FContainer.

procedure TForm15.SwitchTo2D;
var
LImg: TImage;
begin
  TRY
 // FViewport.DisposeOf;
    FViewport.Parent:= nil;
    FViewport.Free; // Не будет удален FViewport, так как RefCount = 1
    FContainer.Parent:= nil;
    FContainer.Free; // Не будет удален FContainer, так как RefCount = 2
  FINALLY
  END;
  ControlRoot.Visible := True;
end;
Ссылка на комментарий
  • 0
type
  TForm15 = class(TForm)
    MultiView1: TMultiView;
    ControlRoot: TLayout;
    Button1: TButton;
    Expander1: TExpander;

    procedure Button1Click(Sender: TObject);


  private
     FViewport:TViewport3D ;
     FContainer:TLayer3D;
     procedure SwitchTo2D;
     procedure SwitchTo3D;
  public
    { Public declarations }

  end;

как в примере 

Ссылка на комментарий
  • 0
  • Администраторы

Прочитайте, пожалуйста, эти темы. И я думаю вы сами сможете ответить на свой вопрос:

Ссылка на комментарий
  • 0

да дело не в уничтожение я читал эти стать другие объекты прекрасно уничтожаются и память очищается , если использовать примеры как в статьях то форма перестает работать , значит там есть ссылки на форму или на объекты которые на форме))

я просто не вижу почему я не могу уничтожить FViewport он не связан с формой никак, я только лишь делаю скриншот формы

 

 

 

Project14_2015-01-29.zip

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...