Форум: "Основная";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
Внизуничтожение динамически созданных объектов Найти похожие ветки
← →
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 или privateTForm1 = 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c