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

Delphi: FireMonkey

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

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

13.11.2016, 11:00. Просмотров 354. Ответов 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 Ошибка при удалении объекта с Form
Delphi FireMonkey Полноэкранная форма - белая полоса при ее повторном открытии
Программа при повторном обращении на страницу (но уже с другими параметрами) отображает одно и тоже Delphi FireMonkey
Ошибка при Parent - нестабильная ошибка Access Violation Delphi FireMonkey
Delphi FireMonkey Ошибка при Deploy
Delphi FireMonkey Ошибка при компиляции
Delphi FireMonkey Size динамического компонента
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
FIL
Модератор
3366 / 2504 / 476
Регистрация: 19.09.2012
Сообщений: 7,819
13.11.2016, 11:35     Ошибка при повторном создании динамического объекта #2
Если ошибка возникает при повторном создании, значит перед этим компоненты не были уничтожены.
SHiipa
0 / 0 / 0
Регистрация: 10.07.2011
Сообщений: 158
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,819
13.11.2016, 13:16     Ошибка при повторном создании динамического объекта #4
Попробуй вместо этого:
Delphi
1
2
layW.Release;
layH.Release;
Добавлено через 45 секунд
Кстати, это может быть глюком конкретной версии Дельфи.
SHiipa
0 / 0 / 0
Регистрация: 10.07.2011
Сообщений: 158
13.11.2016, 13:37  [ТС]     Ошибка при повторном создании динамического объекта #5
Имя убрал попробовал уничтожить с помощью Release не помогло. делфи xe5 версия 19,0,13476,4176. попробую скачать другую может поможет
FIL
Модератор
3366 / 2504 / 476
Регистрация: 19.09.2012
Сообщений: 7,819
13.11.2016, 14:30     Ошибка при повторном создании динамического объекта #6
В Дельфи 10 с Release работает.
krapotkin
2340 / 2241 / 575
Регистрация: 14.04.2014
Сообщений: 10,764
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
Сообщений: 158
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
Сообщений: 158
17.11.2016, 11:49  [ТС]     Ошибка при повторном создании динамического объекта #9
Насколько я понимаю ( layW.Free; ) должна удалить компонент и все его дочерние компоненты но этого непроисходит
krapotkin
2340 / 2241 / 575
Регистрация: 14.04.2014
Сообщений: 10,764
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 Ошибка при компиляции приложения
Ошибка при загрузке программы Delphi FireMonkey
Delphi FireMonkey Ошибка при очистке Layout
Создание и удаление динамического компонента Delphi FireMonkey

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

Или воспользуйтесь поиском по форуму:
SHiipa
0 / 0 / 0
Регистрация: 10.07.2011
Сообщений: 158
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     Ошибка при повторном создании динамического объекта
Ответ Создать тему
Опции темы

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