Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

уничтожение динамически созданных объектов [D6, Win95/98]


uses-mind.dll ©   (2004-11-04 19:16:00) 

возник такой трабл:

procedure TForm1.Button1Click(Sender: TObject);
var
 MyGrid: TStringGrid;
 n: integer;
begin
 {MyGrid.free; - если так писать, то уничтожается Button1.
  интересно почему ? :confused:}
 MyGrid:=TStringGrid.Create(self);
 MyGrid.Parent:=self;
 MyGrid.FixedCols:=0;
 MyGrid.ColCount:=n;
 MyGrid.RowCount:=n;
 MyGrid.Width:=(n*31+5);
 MyGrid.Height:=(n*21+5);
end;

а в действительности нужно, чтобы при создании Grid к примеру разсером (n-1)*(n-1) предыдущий Grid(тот который n*n) уничтожался, а кнопка при этом оставалась и могла повторять операции: уничтожение существующего грида и создание нового бесконечное количество раз (по нажатии на неё).
если кто знает - помогите. заранее благодарен ...


PVOzerski   (2004-11-05 10:34:00) [1]

Зато могу предположить, почему уничтожается Button1. Потому что ты вызываешь метод Free для объекта, который на самом деле - место, куда указывает 4 байта мусора. Сдается мне, что это регистр, в который перед вызовом TForm1.Button1Click положили Sender. Можешь проверить дизассемблированием :^)


KSergey   (2004-11-05 05:47:00) [2]

> KisaNetik   (05.11.04 04:37) [7]
> Да, согласен, но прблема должна решиться.

Вы вообще понимаете откуда у него проблема? Судя по этому утверждению - нет.

Автору: почитайте тут
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=342


KisaNetik   (2004-11-05 04:37:00) [3]


> Это дурной тон программирования!

Да, согласен, но прблема должна решиться. Если у него нет кучи динамически создаваемых форм с кнопкой на этих формах а всё на одной форме - всё будет пахать нормально...


Defunct   (2004-11-05 04:06:00) [4]

> MyGrid:=TStringGrid.Create(Form1);

что за глупость!
никогда не следует писать Form1, вообще надо избавляться от привычки использовать глобальные переменные. Более того никогда не надо советовать начинающим использовать глобальные пременные. Это дурной тон программирования!


KisaNetik   (2004-11-05 03:49:00) [5]


> MyGrid:=TStringGrid.Create(self);
>  MyGrid.Parent:=self;

Меня интересую вот эти строки, попробуй так:
MyGrid:=TStringGrid.Create(Form1);


Defunct   (2004-11-05 03:25:00) [6]

> 3. не знаю, как. я только начал учить дэльфи пару дней назад :)

опишите в объявлении класса формы, в секции public или private

TForm1 = class(TForm)
...
...
public
 MyGrid : TStringGrid;
end;


uses-mind.dll   (2004-11-04 21:23:00) [7]

to begin...end:
1. предполагалось MyGrid ... а если его нету, т.е. при первом нажатии на кнопку - ничего не уничтожается. так предполагалось ...
2. можно и уменьшать, только таблицу предполагается ещё и заполнять по алгоритму, что зависит от количества строк и столбцов.
3. не знаю, как. я только начал учить дэльфи пару дней назад :)


Anatoly Podgoretsky   (2004-11-04 19:56:00) [8]

Любые созданые объекты уничтожаются методом Free, но только после создания и всего один раз после создания.


begin...end   (2004-11-04 19:29:00) [9]

Во-первых: какой объект предполагалось уничтожить вот здесь:

> var
>  MyGrid: TStringGrid;
> MyGrid.free  

?

Во-вторых, зачем каждый раз уничтожать и создавать таблицы, когда в них можно уменьшать количество строк и столбцов?

В-третьих, если это действительно надо, то ссылку на объект (MyGrid) и текущий размер таблицы нужно хранить за пределами процедуры TForm1.Button1Click.


Наверх

Титульная страница Поиск, карта сайта Написать письмо