Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: CL | DM;

Вниз

уничтожение динамически созданных объектов   Найти похожие ветки 

 
uses-mind.dll   (2004-11-04 19:16) [0]

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

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) уничтожался, а кнопка при этом оставалась и могла повторять операции: уничтожение существующего грида и создание нового бесконечное количество раз (по нажатии на неё).
если кто знает - помогите. заранее благодарен ...


 
begin...end ©   (2004-11-04 19:29) [1]

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

> var
>  MyGrid: TStringGrid;
> MyGrid.free  

?

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

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


 
Anatoly Podgoretsky ©   (2004-11-04 19:56) [2]

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


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

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


 
Defunct ©   (2004-11-05 03:25) [4]

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

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

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


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


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

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


 
Defunct ©   (2004-11-05 04:06) [6]

> MyGrid:=TStringGrid.Create(Form1);

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


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


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

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


 
KSergey ©   (2004-11-05 05:47) [8]

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

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

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


 
PVOzerski ©   (2004-11-05 10:34) [9]

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



Страницы: 1 вся ветка

Текущий архив: 2004.11.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.033 c
6-1091368838
sashapont
2004-08-01 18:00
2004.11.21
Кодировка


8-1086086905
g-l-u-k
2004-06-01 14:48
2004.11.21
DblClick в ListBox


14-1099652798
}|{yk
2004-11-05 14:06
2004.11.21
Курт Воннегут: Конец близок ("In These Times", США)


14-1099471256
1008
2004-11-03 11:40
2004.11.21
Опять политика, но с маленькой просьбой


9-1090683899
cyborg
2004-07-24 19:44
2004.11.21
Быстрые функции