Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.08.2009, 00:16
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Вопрос Удаление переменных

Здравствуйте, у меня вопрос, с которым вот уже несколько дней не могу разобраться.
Переделал всё на максимально простой уровень, чтобы всем было понятно.
Допустим у нас есть процедура:
----------
Случай 1
----------
Код:
Procedure AddObject;
var
myObject:TButton;
begin
myObject:=TButton.Create(Form1);
myObject.Caption:='Test Button';
myObject.Parent:=Form1;
AddToList(myObject);
// и т.п.
end;
Этот объект используется до какого-то момента, но как его затем удалить не из этой процедуры ?
может нужно как-то создать массив, в котором будут указатели(но у меня не получается) .
----------
Случай 2
----------
Если этот объект объявлен в глобальных переменных:
Код:
var
  myObject:TButton;
  Ptr:^TButton;
и я его создаю в этой процедуре, то я могу его удалить, модернизировав эту процедуру так:
Код:
 Procedure AddToList(var Obj:TButton);
 begin
 Ptr:=Addr(Obj);
 end;


Procedure AddObject;
begin
myObject:=TButton.Create(Form1);
myObject.Caption:='Test Button';
myObject.Parent:=Form1;
AddToList(myObject);
// и т.п.
end;


Procedure DeleteObj;
begin
FreeAndNil(Ptr^);
end;
Так всё прекрасно работает, но только в том случае, если объект этот глобальный, а если он локальный, то как тогда быть ???
______________________
немного другой вопрос:
----------
Случай 3
----------
допустим у нас это переменная глобальная:
Код:
var
myObject:TButton;
а я с помощью той процедуры добавления создаю несколько один их тех же объектов, но уже создал предварительно массив указателей:
Код:
var // глобальные переменные
  myObject:TButton; 
  Ptr:array[1..100] of ^TButton; 
  Count:Integer;
теперь наш код выглядит вот так:
Код:
 Procedure AddToList(var Obj:TButton);
 begin
 Inc(Count);
 Ptr[Count]:=Addr(Obj);
 end;

Procedure AddObject;
begin
myObject:=TButton.Create(Form1);
myObject.Caption:='Test Button'+IntToStr(Random(1000));
myObject.Parent:=Form1;
myObject.Left:=Random(100);
MyObject.Top:=Random(50);
AddToList(myObject);
// и т.п.
end;


Procedure DeleteObj;
var
i:integer;
begin
For i:=1 to Count do
FreeAndNil(Ptr[i]^);
end;
Помогите пожалуйста разобраться как реализовать нормальное удаление, а то если использовать последний случай, то удаляется лишь один объект(добавленный последним) и всё
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей

Последний раз редактировалось Oleg, 17.08.2009 в 20:34. Причина: возник вопрос, который не дает покоя :(
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:43.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025