![]() |
|
|
Регистрация | << Правила форума >> | 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; |