Форум: "Основная";
Текущий архив: 2002.05.23;
Скачать: [xml.tar.bz2];
ВнизПодскажите как удалять динамически созданные компоненты Найти похожие ветки
← →
yastal (2002-05-10 19:25) [0]Подскажите как удалять динамически созданные компоненты, например, я создаю много кнопок на форме во время выполнения моей программы, как можно удалить любую из кнопок? И еще, как запомнить расположение и все параметры этих кнопок после для повторного запуска программы с этими же кнопками
← →
Song (2002-05-10 19:39) [1]MyButton.Free
← →
yastal (2002-05-10 21:45) [2]Но у меня их несколько, а удалять надо не все, а по выбору.
как узнать MyButton.Name?
← →
Pat (2002-05-10 22:50) [3]Используй TObjectList
← →
Song (2002-05-11 10:05) [4]2yastal (10.05.02 21:45)
Странный у Вас вопрос. А создавали-то как?
← →
Pat (2002-05-11 11:20) [5]При создании новой кнопки, ставь NewButton.Parent:=form1. Тогда при уничтожении формы уничтожатся кнопки.
← →
Song (2002-05-11 11:24) [6]Parent указывает не на это. Собственник-разрушитель передаётся в качестве параеметра конструктора Create
← →
yastal (2002-05-14 12:05) [7]Хорошо, я пробую.
← →
Johnny Smith (2002-05-14 12:23) [8]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;
← →
shane54 (2002-05-14 13:25) [9]Вот реальный пример - создаешь массив, в котором хранятся все кнопки, обращаешся к ним по [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;
← →
Yuriy (2002-05-14 19:35) [10]Лично, у меня было нечто похожее - динамические массивы компонентов - т.е. я даже не мог знать заранее сколько их будет создано, но и решается это весьма просто -
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 кнопки - :))
← →
yastal (2002-05-14 19:48) [11]всем СПАСИБО!!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c