![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Задана глобальная переменная
Код:
var bt: TButton; затем в какойто процедуре создаем несколько кнопок Код:
bt:= TButton.Create(Panel1); bt.Parent:= Panel1; bt.Name:= 'but1'; bt:= TButton.Create(Panel1); bt.Parent:= Panel1; bt.Name:= 'but2'; bt:= TButton.Create(Panel1); bt.Parent:= Panel1; bt.Name:= 'but3'; в другой процедуре нужно узнать если кнопкИ созданы то уничтожить их все Код:
if Assigned(bt) then FreeAndNil(bt); Как удалить but1, but2 ? Может мой подход в корне неверный и проще объявить сразу три переменные для кнопок? Но может возникнуть ситуация с созданием сотни динамических компонент, все их описывать поименно? |
#2
|
||||
|
||||
![]() Цитата:
Код:
var bt1, bt2, bt3: TButton; ... bt1:= TButton.Create(Panel1); bt1.Parent:= Panel1; bt1.Name:= 'but1'; bt2:= TButton.Create(Panel1); bt2.Parent:= Panel1; bt2.Name:= 'but2'; bt3:= TButton.Create(Panel1); bt3.Parent:= Panel1; bt3.Name:= 'but3'; ... FreeAndNil(bt1); FreeAndNil(bt2); FreeAndNil(bt3); UPD. Цитата:
Последний раз редактировалось poli-smen, 05.12.2014 в 12:52. Причина: Дополнил ответ |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Евгений79 (05.12.2014)
|
#3
|
|||
|
|||
![]() Так смущает то, что вариант с одной переменной тоже работает. Кнопки создаются, можно задать разные Caption положение цвет, и т.д. Присвоить обработчики событий.
Например в обработчике клика проверяю кто кликнул и соотвественно действия разные Код:
if (Sender as TButton).name = 'but1' then blabla1; if (Sender as TButton).name = 'but2' then toptop2; |
#4
|
||||
|
||||
![]() Цитата:
Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Евгений79 (05.12.2014)
|
#5
|
|||
|
|||
![]() Понятно.
Если зайти с другого конца. Т.к. владелец кнопок Panel1 можно как-то найти и уничтожить все его объекты? |
#6
|
||||
|
||||
![]() Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Евгений79 (05.12.2014)
|
#7
|
|||
|
|||
![]() только не забывать, что при удалении в таком цикле
Код:
for i:=0 to Panel1.ComponentCount-1 do Panel1.Components[i].Free; Поэтому надо делать так Код:
for i:=Panel1.ComponentCount-1 downto 0 do Panel1.Components[i].Free; |
Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
Евгений79 (05.12.2014)
|
#8
|
|||
|
|||
![]() А если сразу удалить панель, то автоматически удалятся все компоненты, которые на ней лежат.
|
#9
|
||||
|
||||
![]() Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Евгений79 (05.12.2014)
|
#10
|
|||
|
|||
![]() Да да да, про массив тоже уже подумал. И менять только его длину туды сюды SetLength. Завтра проверю.
Спасибо товарищ poli-smen, всегда мне разжуете понятно! ![]() |
#11
|
||||
|
||||
![]() Есть подозрение, что вот так будет проще
Код:
var i: integer; begin // /Создать for i := 1 to 3 do with TButton.Create(Panel1) do begin Parent:= Panel1; Name:= 'but'+ IntToStr(i); end; ... // Удалить for i := 1 to 3 do (FindComponent( 'but'+ IntToStr(i))as TButton).Free; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#12
|
|||
|
|||
![]() Удаление кнопок не срабатывает в таком раскладе.
Но если сделать так Код:
for i:=Panel1.ComponentCount-1 downto 0 do if pos('but', Panel1.Components[i].name) > 0 then Panel1.Components[i].free; И да, такой расклад получается вообще идеальным. Спасибо Alegun! с глобальным массивом кнопок тоже работает Код:
var b: array of tbutton; procedure TForm1.CreateButtons; var i: integer; begin setlength(b,3); for i := 0 to 2 do begin b[i]:= TButton.Create(panel1); b[i].Parent:= panel1; b[i].Name:= 'but'+ IntToStr(i); end; end; procedure TForm1.RemoveButtons; var i,c: integer; begin c:= length(b); for i:=0 to c-1 do FreeAndNil(b[i]); SetLength(b,0); end; |
#13
|
||||
|
||||
![]() Точно, забыл что кнопки динамические
![]() Но всё же можно ещё и так свободить Код:
for i := 1 to 3 do with Panel1.FindChildControl('but'+inttostr(i)) as TButton do Free; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Евгений79 (06.12.2014)
|