Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: -0.976 c
1-1099752664
asdqwer
2004-11-06 17:51
2004.11.21
Поиск строки по маске


6-1091368838
sashapont
2004-08-01 18:00
2004.11.21
Кодировка


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


1-1100082530
frEEstyler
2004-11-10 13:28
2004.11.21
как передать имя открытого файла программе


1-1099510216
tormoz
2004-11-03 22:30
2004.11.21
Работа с Word (туда и обратно)




   Наверх