![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Каким образом можно воссоздать динамически создаваемые Button в n-ом количестве, с возможностью их уничтожения?
В общем есть Edit, где указывается количество кнопок, после нажатия рядом лежащего Button должны воссаздаться эти кнопки... При изменении числа в Edit нужно получить это число кнопок, вместо старого варианта... Прошу хотя бы упрощенного варианта... Я пробовал так: Код:
var kolvo,y:integer; But:array of TButton; procedure TForm1.Button3Click(Sender: TObject); var z,kl:integer; begin if kolvo<>99 then //При старте программы kolvo пока выставляется на 99 for z := 0 to kolvo do begin but[z].Free; //Вместо Free пробовал и Destroy... end; kl:=strtoint(edit3.text); //Читается количество элементов, введенное пользователем if (kl<50) and (kl>1) then begin kolvo:=(kl-1); //Вычитаю 1, так как при setlength(but,kolvo); //этой функции первым элементом явлется нулевой, а не первый... end; y:=190; //Высота первой кнопки if (kolvo<>99) then //Создаю кнопки for z := 0 to kolvo do begin //Создаем Button But[z] := TButton.Create(Self); But[z].Parent := Self; But[z].Tag:=z; But[z].Caption:='...'; But[z].Left:=280; But[z].Top:=y; But[z].Width:=33; But[z].OnClick:=BtnCl; y:=y+30; end; end; Проблема в том, что повторное нажатие кнопки выводит ошибку работы с памятью. Видимо проблемы с удалением кнопок... Либо я что-то недоделал... |
|
#2
|
||||
|
||||
|
глянь мой пример... там динамически создается определенное кол-во кнопок..!!! . : Panel Tools : .
|
|
#3
|
||||
|
||||
|
Удалять можно так, но предварительно всем элементам которые нужно будет удалить необходимо присвоить одинаковый Tag, например 1...
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: Byte;
begin
try
for i := ComponentCount - 1 downto 0 do
if (Components[i] is TButton) and ((Components[i] as TButton).Tag = 1) then
(Components[i] as TButton).Destroy;
except
end;
end; |
|
#4
|
||||
|
||||
|
Код:
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
b: TButton;
begin
for i:=ComponentCount-1 downto 0 do
if (Components[i] is TButton) and (Components[i].Name='') then
TButton(Components[i]).Free;
for i:=1 to StrToIntDef(Edit1.Text, 0) do
begin
b:=TButton.Create(Self);
b.Parent:=Self;
b.Left:=152;
b.Top:=56+i*b.Height;
b.Caption:='TButton'+IntToStr(i);
b.OnClick:=Button1Click;
b.Show;
end;
end; |