Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.013 c
1-73135
RaZEr_
2002-05-13 10:52
2002.05.23
Кто-нибудь поделитесь ieconst.pas


1-73263
Gnom
2002-05-10 20:34
2002.05.23
CTRL+C и Shift+Ins


14-73391
Yaro
2002-04-15 10:11
2002.05.23
Основы написания ВИЗУАЛЬНЫХ компонентов...


1-73193
tovSuhov
2002-05-09 15:01
2002.05.23
TEdit в ActiveX форме...


1-73269
s@shka
2002-05-10 15:09
2002.05.23
DLL Delphi и C++ Builder




   Наверх