Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2008, 14:25   #1
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию Как программно удалить компонент от формы или другого компонента (контейнера)?

Добрый день! Создаю на компоненте ScrollBox или форме (это не принципиально) нужное количество компонентов TEdit и TLabel программно по нажатию кнопки. Создаю нормально, но вот когда я повторно вызываю InputBox, чтобы изменить количество TEdit и TLabel, например, от 20 до 5 единиц, то старые не уничтожаются. На ScrollBox лежат все 20 созданные первоначально TEdit и TLabel! А почему? Что в моей процедуре не так? Спасибо!
Код:
procedure TForm1.Button1Click(Sender: TObject);
      var c : String;
          i, n : Integer;
          Arr1 : array of TLabel;
          Arr2 : array of TEdit;
begin
  c := InputBox('Введите', 'число:', '20');
  try
      n := StrToInt(c);
  except
     on EConvertError do ShowMessage('Error...');
  end;

  if (Arr1 <> nil) and (Arr2 <> nil) then
  begin
    for i := 0 to High(Arr1) do
    begin
      if (Arr2[i] is TEdit) then
         (Arr2[i] as TEdit).Destroy;

      if (Arr1[i] is TLabel) then
         (Arr1[i] as TLabel).Destroy;
    end;
    SetLength(Arr1, 0);
    SetLength(Arr2, 0);
  end;

  SetLength(Arr1, n);
  SetLength(Arr2, n);
  for i := 0 to n-1 do
  begin
    Arr1[i] := Label.Create(Self);
    Arr1[i].Parent := ScrollBox1;
    Arr1[i].Top := 14 + i*(Arr1[i].Height + 11);
    Arr1[i].Left := 7;
    Arr1[i].Caption := 'Поле ' + IntToStr(i);

    Arr2[i] := TEdit.Create(Self);
    Arr2[i].Parent := ScrollBox1;
    Arr2[i].Top := 8 + i*(Arr2[i].Height+3);
    Arr2[i].Left := 100;
    Arr2[i].Width := ScrollBox1.Width - 130;
    Arr2[i].Text := 'Поле ' + IntToStr(i);
  end;
end;

Последний раз редактировалось Stilet; 27.05.2008 в 14:42.
SkAndrew вне форума Ответить с цитированием
Старый 27.05.2008, 14:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
(Arr2[i] as TEdit).Destroy;
Лучше Free.

Я бы перед тем как делать SetLength FREE'кал те которые уходят из массива, те которые ты хочеш удалить.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2008, 14:58   #3
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

Не совсем понял Вашу мысль - можно примерчик. Еще нашел такую процедуру RemoveComponent, но она почему -то не удаляет компоненты. почему?
SkAndrew вне форума Ответить с цитированием
Старый 27.05.2008, 15:20   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я имею ввиду примерно такое:
Код:
var a:array of TButton;
...............
procedure TForm1.Button1Click(Sender: TObject);
var e,i:integer;
begin
i:=StrToIntDef(Edit1.Text,0);
if i<high(a) then
 for e :=i+1  to High(a)  do
  a[e].Free;
SetLength(a,i+1);
//********* FOR ******************
for e :=0  to High(a)  do
begin
 //********** WITH **********
if a[e]=nil then begin
a[e]:=TButton.Create(form1);
 with a[e] do  begin
   Parent:=Form1;
   Top:=e*10;Left:=100;
   Width:=10;Height:=10;
   Show;
 end;
 //********** END WITH ****** {}
end;
end;
//******* END FOR ****************{}

end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
использование компонента TreeWiev другой формы White Общие вопросы Delphi 2 29.08.2008 10:25
Перемещение формы за компонент Zeraim Общие вопросы Delphi 2 20.05.2008 09:26
Подскажите как программно удалить все записи Worms БД в Delphi 3 04.03.2008 16:30
Как программно перечислить все формы приложения? Avron Общие вопросы Delphi 5 07.09.2007 08:51
DLL:переменная-ссылка на компонент формы Саня Общие вопросы Delphi 9 03.08.2007 10:38