Перейти к содержанию
  • Регистрация
  • 0
Alisson R Oliveira

Уничтожить TLayout

Вопрос

Сначала извините за создание этого поста здесь, так как я не нашел форум для TLayout

Мои сомнения и следующие у меня есть TVertScrollBox, где я добавляю карты (TRectangle) и некоторые макеты (TLayout) во время выполнения. У меня проблемы с удалением макетов, которые они выдают из-за приложения. DisposeOf просто не работает

 

First sorry for creating this post here as I didn't find a forum for TLayout

My doubt and the following I have a TVertScrollBox where I add cards (TRectangle) and some layouts (TLayout) at runtime. i'm having trouble destroying the layouts they app gives me an error DisposeOf just doesn't work

 

procedure TForm1.Button1Click(Sender: TObject);
var
  I, II: Integer;
begin
  for I := VertScrollBox1.ControlsCount - 1 downto 0 do
  begin
    if VertScrollBox1.Controls.ClassType = TScrollContent then
    begin
      for II := VertScrollBox1.Controls.ControlsCount - 1 downto 0 do
      begin

        if VertScrollBox1.Controls.Controls[II].ClassType = TRectangle then
        begin

          VertScrollBox1.Controls.Controls[II].DisposeOf;

        end;

        if VertScrollBox1.Controls.Controls[II].ClassType = TLayout then
        begin
//          VertScrollBox1.Controls.Controls[II].DisposeOf;
        end;

        if VertScrollBox1.Controls.Controls[II].ClassType = TCalloutRectangle then
        begin
          VertScrollBox1.Controls.Controls[II].Parent := nil;
        end;
      end;
    end;
  end;

end;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

  • 0

You shouldn't do it this way

Follow the simple rules.

1. Create your components without Owner   ==>    Aaa := TAAA.Create(NIL);

2. Keep the links to created objects.   Use them to destroy objects after.

L:=TLayout.Create(NIL);
L.parent := ContainerComponent;
....

L.Parent := NIL;
FreeAndNil(L);
// now it works the same way in desktop and mobile !!

3. Don't call DisposeOf manually.

ARC should do it for you automatically! If you didn't provide conditions for automatic destruction and killed the object yourself, it means that some links to your object are keeped somewhere inside and can be utilized at any moment, so you'll get an Access Violation...

 

Good alternative to your scenario is using Frames! Construct the frame from several components and use it as single unit instead of creating Layout, then rectanlge inside it then ... then ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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


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

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

×
×
  • Создать...