Форум программистов, компьютерный форум CyberForum.ru

Delphi: FireMonkey

Войти
Регистрация
Восстановить пароль
 
SHiipa
0 / 0 / 0
Регистрация: 10.07.2011
Сообщений: 152
#1

Ошибка при повторном создании динамического объекта - Delphi FireMonkey

13.11.2016, 11:00. Просмотров 322. Ответов 10
Метки нет (Все метки)

Ошибка при повторной создании динамического объекта
причем текст ошибки пустой. и указывает на 15960 строку
Кликните здесь для просмотра всего текста

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
unit Unit1;
 
interface
 
uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts,
  FMX.StdCtrls;
 
type
  TForm1 = class(TForm)
    layContainer: TLayout;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  layW,layH:TLayout;
implementation
 
{$R *.fmx}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
   layW := TLayout.Create(self);
  layW.name := 'shirina';
  layW.parent := layContainer;
  layW.height := 45;
 
  layH := TLayout.Create(self);
  layH.name := 'vysita';
  layH.parent := layContainer;
  layH.height := 45;
  layH.position.Y := 46;
 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  layW.parent:=NIL;
  freeAndNil(layW);
  layH.parent:=NIL;
  freeAndNil(layH);
end;
 
end.

Кликните здесь для просмотра всего текста

Ошибка при повторном создании динамического объекта
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2016, 11:00     Ошибка при повторном создании динамического объекта
Посмотрите здесь:

Программа при повторном обращении на страницу (но уже с другими параметрами) отображает одно и тоже Delphi FireMonkey
Delphi FireMonkey Ошибка при Deploy
Ошибка при компиляции Android приложения Delphi FireMonkey
Ошибка при чтении ini файла Delphi FireMonkey
Delphi FireMonkey Полноэкранная форма - белая полоса при ее повторном открытии
Ошибка при Parent - нестабильная ошибка Access Violation Delphi FireMonkey
Delphi FireMonkey Ошибка при удалении объекта с Form
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
FIL
Модератор
3366 / 2504 / 476
Регистрация: 19.09.2012
Сообщений: 7,818
13.11.2016, 11:35     Ошибка при повторном создании динамического объекта #2
Если ошибка возникает при повторном создании, значит перед этим компоненты не были уничтожены.
SHiipa
0 / 0 / 0
Регистрация: 10.07.2011
Сообщений: 152
13.11.2016, 12:24  [ТС]     Ошибка при повторном создании динамического объекта #3
Под win они уничтожаются а под андроид нет. уничтожаю таким способом
Delphi
1
2
3
4
  layW.parent:=NIL;
  freeAndNil(layW);
  layH.parent:=NIL;
  freeAndNil(layH);
может под Андроид их нужно уничтожать каким то другим способом?
FIL
Модератор
3366 / 2504 / 476
Регистрация: 19.09.2012
Сообщений: 7,818
13.11.2016, 13:16     Ошибка при повторном создании динамического объекта #4
Попробуй вместо этого:
Delphi
1
2
layW.Release;
layH.Release;
Добавлено через 45 секунд
Кстати, это может быть глюком конкретной версии Дельфи.
SHiipa
0 / 0 / 0
Регистрация: 10.07.2011
Сообщений: 152
13.11.2016, 13:37  [ТС]     Ошибка при повторном создании динамического объекта #5
Имя убрал попробовал уничтожить с помощью Release не помогло. делфи xe5 версия 19,0,13476,4176. попробую скачать другую может поможет
FIL
Модератор
3366 / 2504 / 476
Регистрация: 19.09.2012
Сообщений: 7,818
13.11.2016, 14:30     Ошибка при повторном создании динамического объекта #6
В Дельфи 10 с Release работает.
krapotkin
2140 / 2078 / 535
Регистрация: 14.04.2014
Сообщений: 10,076
13.11.2016, 19:09     Ошибка при повторном создании динамического объекта #7
с гарантией деструктор вызовется obj.DisposeOf;
но это просто к сведению
в предыдущем посте забыл добавить
RemoveComponent, т.к. этот компонент еще и в списке владения у формы (lay:=TLayout.Create(Self))
надо было написать Create(NIL), но не забыть разрушить в конце...

итого
Delphi
1
2
3
4
5
6
  RemoveComponent(layH);
  RemoveComponent(layW);
  layH.Parent := nil;
  FreeAndNil(layH);
  layW.Parent := nil;
  FreeAndNil(layW);
SHiipa
0 / 0 / 0
Регистрация: 10.07.2011
Сообщений: 152
17.11.2016, 11:02  [ТС]     Ошибка при повторном создании динамического объекта #8
В общем установил я Делфи 10 . Теперь ошибка не только на андроиде но и под windows при повторном создании компонента. удаление не как неработает
Кликните здесь для просмотра всего текста

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
unit Unit1;
 
interface
 
uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts,
  FMX.StdCtrls, FMX.Objects, System.iOUtils, FMX.Controls.Presentation;
 
type
  TForm1 = class(TForm)
    layContainer: TLayout;
    Button1: TButton;
    Button2: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  layW,layH:TLayout;
  image: TImage;
  shirina_kletki:integer;
 
implementation
 
{$R *.fmx}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
shirina_kletki:=10;
   layW := TLayout.Create(Self);
  layW.name := 'shirina';
  layW.parent := layContainer;
   layW.Align := TAlignLayout.alHorzCenter;  //Выравнивание
  layW.height := 100;
  layW.Width :=100;
 
  layH := TLayout.Create(Self);
  layH.name := 'vysita';
  layH.parent := layW;
   layH.Align := TAlignLayout.alHorzCenter;  //Выравнивание
  layH.height := 100;
  layH.Width := 100;
  //layH.position.Y := 46;
 
  image := TImage.Create(Self); //Создание Лайаута  //Задать владельца
        image.Parent := layH;       //Поместить в лайаут  //Задать родителя
        image.Align := TAlignLayout.alNone;  //Выравнивание
        image.Width := shirina_kletki;
        image.Height := shirina_kletki;
        image.Position.X := (1*shirina_kletki);
        image.Position.Y := (1*shirina_kletki);
        image.BringToFront;
 
        //image.Name := 'igrok_p';
        image.Bitmap.LoadFromFile(TPath.GetDocumentsPath + PathDelim + 'fon.png');
        image.WrapMode:= TImageWrapMode.iwStretch;
 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
//  layW.Release;
//  layW.parent:=NIL;
//  freeAndNil(layW);
  //layH.parent:=NIL;
  //freeAndNil(layH);
 
  layW.Release;
  layH.Release;
 
  RemoveComponent(layH);
  RemoveComponent(layW);
  layH.Parent := nil;
  FreeAndNil(layH);
  layW.Parent := nil;
  FreeAndNil(layW);
end;
 
end.
Вложения
Тип файла: rar 1.rar (54.6 Кб, 1 просмотров)
SHiipa
0 / 0 / 0
Регистрация: 10.07.2011
Сообщений: 152
17.11.2016, 11:49  [ТС]     Ошибка при повторном создании динамического объекта #9
Насколько я понимаю ( layW.Free; ) должна удалить компонент и все его дочерние компоненты но этого непроисходит
krapotkin
2140 / 2078 / 535
Регистрация: 14.04.2014
Сообщений: 10,076
17.11.2016, 19:43     Ошибка при повторном создании динамического объекта #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
procedure TForm1.b1Click(Sender: TObject);
begin
  CreateLO;
end;
 
procedure TForm1.b2Click(Sender: TObject);
begin
  DestroyLO;
end;
 
procedure TForm1.CreateLO();
var r:TREctangle;
begin
  layH:=TLayout.Create(Self);
  layH.Parent := lay1;
  layH.Align := TAlignLayout.Top;
  layH.Height := 45;
  layH.Name := 'layH';
  r:=TRectangle.Create(self);
  r.Parent := layH;
  r.Name := 'r1';
  r.Align := TAlignLayout.Client;
 
  layW:=TLayout.Create(Self);
  layW.Parent := lay1;
  layW.Align := TAlignLayout.Top;
  layW.Height := 45;
  layW.Name := 'layW';
  layW.Position.Y := 46;
 
  r:=TRectangle.Create(self);
  r.Parent := layW;
  r.Name := 'r2';
  r.Align := TAlignLayout.Client;
end;
 
procedure TForm1.DestroyLO();
begin
  RemoveComponent(layH);
  RemoveComponent(layW);
  layH.Parent := nil;
  FreeAndNil(layH);
  layW.Parent := nil;
  FreeAndNil(layW);
end;
Миниатюры
Ошибка при повторном создании динамического объекта  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2016, 20:46     Ошибка при повторном создании динамического объекта
Еще ссылки по теме:

Delphi FireMonkey Ошибка при компиляции ms access
Delphi FireMonkey Size динамического компонента
Ошибка при загрузке программы Delphi FireMonkey
Delphi FireMonkey Ошибка при очистке Layout
Delphi FireMonkey Ошибка при компиляции

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
SHiipa
0 / 0 / 0
Регистрация: 10.07.2011
Сообщений: 152
18.11.2016, 20:46  [ТС]     Ошибка при повторном создании динамического объекта #11
В Delphi 10 этот код работает (при условии того что компоненты layH, layW безымянные)
Кликните здесь для просмотра всего текста

Delphi
1
2
3
4
5
6
7
8
9
if layW <> nil then
    begin
      RemoveComponent(layH);
      RemoveComponent(layW);
      layH.Parent := Nil;
      FreeAndNil(layH);
      layW.Parent := Nil;
      FreeAndNil(layW);
    end;
Yandex
Объявления
18.11.2016, 20:46     Ошибка при повторном создании динамического объекта
Ответ Создать тему
Опции темы

Текущее время: 09:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru