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

Delphi: FireMonkey

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

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

13.11.2016, 11:00. Просмотров 389. Ответов 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.

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

Ошибка при повторном создании динамического объекта
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2016, 11:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при повторном создании динамического объекта (Delphi FireMonkey):

Ошибка при динамическом создании данных - Delphi
Приветству.Ррешил я поставить альфа скин в программе, заменил pagecontrol на TsPageControl, listview на slistview, сменил их name на старые...

TList. Ошибка Access Violation при создании. - Delphi
Имеется такая структура данных: type TMyList = class private FMyList: TList; public property MyList: TList read FMyList...

ошибка при вызове метода объекта - Delphi
Здравствуйте, ребят, у меня тут вот какое дело - программа запускается, я в ней работаю, дохожу до определенного места и у меня вылетает...

Ошибка при удалении объекта с Form - Delphi FireMonkey
Ребят,всем халло. Такая трабла. Я пишу на паскале давно, решил заюзать Delphi XE7. Вообщем,при создании Multi-Application проекта, я не...

Полноэкранная форма - белая полоса при ее повторном открытии - Delphi FireMonkey
Вот в чём дело: создал приложение на Android (Fullscreen), при первом запуске всё нормально, но если через него открыть галерею и вернутся...

Программа при повторном обращении на страницу (но уже с другими параметрами) отображает одно и тоже - Delphi FireMonkey
Проблема вроде в том что программа при повторном обращении на страницу(но уже с другими параметрами) отображает одно и тоже :( ...

10
FIL
Модератор
3375 / 2513 / 478
Регистрация: 19.09.2012
Сообщений: 7,843
13.11.2016, 11:35 #2
Если ошибка возникает при повторном создании, значит перед этим компоненты не были уничтожены.
0
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);
может под Андроид их нужно уничтожать каким то другим способом?
0
FIL
Модератор
3375 / 2513 / 478
Регистрация: 19.09.2012
Сообщений: 7,843
13.11.2016, 13:16 #4
Попробуй вместо этого:
Delphi
1
2
layW.Release;
layH.Release;
Добавлено через 45 секунд
Кстати, это может быть глюком конкретной версии Дельфи.
0
SHiipa
0 / 0 / 0
Регистрация: 10.07.2011
Сообщений: 158
13.11.2016, 13:37  [ТС] #5
Имя убрал попробовал уничтожить с помощью Release не помогло. делфи xe5 версия 19,0,13476,4176. попробую скачать другую может поможет
0
FIL
Модератор
3375 / 2513 / 478
Регистрация: 19.09.2012
Сообщений: 7,843
13.11.2016, 14:30 #6
В Дельфи 10 с Release работает.
1
krapotkin
2629 / 2507 / 632
Регистрация: 14.04.2014
Сообщений: 12,140
Записей в блоге: 7
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);
1
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.
0
Вложения
Тип файла: rar 1.rar (54.6 Кб, 1 просмотров)
SHiipa
0 / 0 / 0
Регистрация: 10.07.2011
Сообщений: 158
17.11.2016, 11:49  [ТС] #9
Насколько я понимаю ( layW.Free; ) должна удалить компонент и все его дочерние компоненты но этого непроисходит
0
krapotkin
2629 / 2507 / 632
Регистрация: 14.04.2014
Сообщений: 12,140
Записей в блоге: 7
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;
1
Миниатюры
Ошибка при повторном создании динамического объекта  
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;
0
18.11.2016, 20:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2016, 20:46
Привет! Вот еще темы с ответами:

Ошибки при создании класса - Delphi
Хотел бы узнать об ошибках при создании классов, о том как не надо создавать класс, разбивать код на методы и пр.

Курсор при создании формы - Delphi
На форме есть кнопка и эдит. Как при создании формы сделать так, что бы выделение (курсор ввода) был в строке эдита? т.е. форма создалась...

Событие при создании компоненты. - Delphi
Мне нужно описать событиe MouseDown при создании компоненты, не могу понять как его объявить. Как объявлено ниже в коде не работает....

Ошибка при повторном динамическом создании кнопки - Delphi
создаю кнопку procedure Tlogic.crbutn(butn: TsBitBtn; str1,str2: string; t, l,w,h,i: integer; parnt: TComponent); begin ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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