Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > Delphi

Ответ
 
Опции темы
Старый 31.08.2013, 23:50   #1
Kolobok
Оператор ЭВМ
 
Аватар для Kolobok
 
Регистрация: 02.07.2010
Сообщений: 30
Написано 0 полезных сообщений
(для 7 пользователей)
Сообщение Полное удаление динамического объекта

Созрел у меня ещё один вопрос, сложные у меня вопросы... =)

Я динамически создаю кнопку, храню её id и потом по id обращаюсь...
Почему после вроде как удаления кнопки, по её id, её свойства всё равно доступны!?
Ну а кнопка вроде с формы удаляется, визуально и вернуть вроде не получается, визуально...

А к свойствам могу обращаться и они ещё содержат те свойства, которые я задал ранее! Т.е. получается в памяти висят данные кнопки...
Вот только свойства доступны только для чтения, а для записи вроде уже не доступны...

Кто мне подскажет как удалить эти данные? А то за каждой динамически созданной и удалённой кнопкой будут висеть данные...

unit Unit1;

interface

uses
  Vcl.Forms,
  Vcl.Buttons,
  Vcl.Dialogs,
  System.SysUtils;

type
  TForm1 = class(TForm)
    procedure FormClick(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormClick(Sender: TObject);
var
  id: integer;
  str: string;
begin
  id := integer(TSpeedButton.create(Form1));
  TSpeedButton(id).Parent := Form1; // кнопка появилась
  TSpeedButton(id).Width := 50;
    str := str + inttostr(TSpeedButton(id).Width) + #13#10; // return 50
    TSpeedButton(id).Free; // вроде удаляем
    str := str + inttostr(TSpeedButton(id).Width) + #13#10; // return 50
  ShowMessage(str);
  { return:
    50
    50 }
end;

end.
(Offline)
 
Ответить с цитированием
Старый 01.09.2013, 09:42   #2
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Полное удаление динамического объекта

Дело в том, что удаление объекта производится внутри обработчика события этого же объекта. То ли это баг, то ли фича, но объект остается доступен вплоть до завершения обработчика (фактическое удаление производится только в конце обработчика или сохраняется некая локальная копия). Если же попытаться обратиться к тому же id после завершения обработчика, то будет выдано какое-то левое значение (хотя, как ни странно, исключение все равно не получим, несмотря на обращение к несуществующему объекту).
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 10:40.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com