![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите как удалять динамически созданные компоненты [D6, Win95/98, WinME]
yastal © (2002-05-10 19:25:00)Подскажите как удалять динамически созданные компоненты, например, я создаю много кнопок на форме во время выполнения моей программы, как можно удалить любую из кнопок? И еще, как запомнить расположение и все параметры этих кнопок после для повторного запуска программы с этими же кнопками
yastal (2002-05-14 19:48:00) [1]всем СПАСИБО!!!
Yuriy (2002-05-14 19:35:00) [2]Лично, у меня было нечто похожее - динамические массивы компонентов - т.е. я даже не мог знать заранее сколько их будет создано, но и решается это весьма просто -
var
MyButton: array of TButton;
......
MyButton[NN] := TButton.Create(Application);
MyButton[NN].Parent:=....;
.....
MyButton[NN].Tag := NN;
Теперь если нужно узнать на какую конкретно кнопку кликнули -
if (Sender is TButton) then
begin
R1 := TButton(Sender).Tag;
......
end;
Ну а уж удалить любую кнопку по прекрасному имени MyButton[NN], где NN порядковый номер кнопки, и он же Tag кнопки - :))
shane54 (2002-05-14 13:25:00) [3]Вот реальный пример - создаешь массив, в котором хранятся все кнопки, обращаешся к ним по [x, y].
var
But : array [0..7, 0..7] of TButton;
procedure TForm1.FormCreate(Sender: TObject);
var
B : TButton;
i, j : integer;
begin
for i := 0 to 7 do
for j := 0 to 7 do
begin
B := TButton.Create(Form1);
B.Left := i * 30 + 15;
B.Top := j * 30 + 15;
B.Width := 30;
B.Height := 30;
B.Parent := Form1;
B.Tag := i * 20 + j;
B.OnClick := MyClick;
But[i, j] := B;
end;
end;
procedure TForm1.MyClick(Sender : TObject);
var
T, x, y : integer;
begin
T := (Sender as TButton).Tag;
x := T div 20;
y := T mod 20;
But[5, 5].Free; // Указываешь сдесь нужную тебе кнопку
end;
Johnny Smith (2002-05-14 12:23:00) [4]2yastal (10.05.02 21:45)
Но у меня их несколько, а удалять надо не все, а по выбору.
как узнать MyButton.Name?
Можешь генерить имена при создании кнопки (кто мешает-то?). Найти нужную кнопку можешь следующим образом:
for i:=form1.ControlCount-1 downto 0 do
if form1.Controls[i] is TButton then
if TButton(form1.Controls[i]).Name="ButtonXXX" then
begin
.....
end;
yastal (2002-05-14 12:05:00) [5]Хорошо, я пробую.
Song (2002-05-11 11:24:00) [6]Parent указывает не на это. Собственник-разрушитель передаётся в качестве параеметра конструктора Create
Pat (2002-05-11 11:20:00) [7]При создании новой кнопки, ставь NewButton.Parent:=form1. Тогда при уничтожении формы уничтожатся кнопки.
Song (2002-05-11 10:05:00) [8]2yastal (10.05.02 21:45)
Странный у Вас вопрос. А создавали-то как?
Pat (2002-05-10 22:50:00) [9]Используй TObjectList
yastal (2002-05-10 21:45:00) [10]Но у меня их несколько, а удалять надо не все, а по выбору.
как узнать MyButton.Name?
Song (2002-05-10 19:39:00) [11]MyButton.Free