Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.23;
Скачать: CL | DM;

Вниз

Подскажите как удалять динамически созданные компоненты   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
3-73014
maxim2
2002-04-25 21:08
2002.05.23
Как в отчете сделать вертикальные полосы?


6-73329
TAlexey
2002-01-03 16:37
2002.05.23
NMPOP3


1-73275
Vladislav
2002-05-07 09:44
2002.05.23
Локализация приложения


1-73288
Ivan Kohut
2002-05-11 15:18
2002.05.23
Вопрос о броузере.


1-73238
IronHawk
2002-05-09 01:05
2002.05.23
Приветствую Мастеров! Очень нужная задача, есть.