Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите как удалять динамически созданные компоненты [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо