Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как динамически добавить компонент на форму [D7, WinXP]


Cherrex ©   (2005-08-29 16:19:00) 

Нужно сделать так: по нажатию на кнопку появляласьеще одна. Не мспользуя конечно свойства Visible.


tesseract   (2005-08-30 22:28:00) [1]

>> a[High(a)] := TButton.Create(self);
Думаешь a[length(a)-1] будет работать не стабильнее :-)


afanasic   (2005-08-30 14:42:00) [2]

var
 a: array of TButton;
...

procedure TForm1.btClick(Sender: TObject);
begin
 ShowMessage('Новая кнопка!');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 SetLength(a,Length(a)+1);
 a[High(a)] := TButton.Create(self);
 with a[High(a)] do
   try
     Width := btWidth;
     Height := btHeight;
     Left := btLeft;
     Right := btRight;
     Parent := self;
     OnClick := btClick;
   except
     on E: Exception do
       ShowMessage('Блин...');
   end;
end;


tesseract   (2005-08-30 13:49:00) [3]

Проще Так
var butArray:Tlist;

procedure Tform1.FormShow(Sender:Tobject);
var tempButton:Tbutton;
begin
buArray:=Tlist.create;
tempButton:=Tbutton.create(form1);
with tempButton do
 begin
  parent:=form1; //(или panel1)
  width:=NeedBtWitdh;
  height:=NeedBtHeight;
  top:=NeedBtTop;
  left:=NeedBtLeft;
  onClick:=MybtClick;// Внимательней здесь без этого параметра кнопка ни фига делать не будет;
 end;
 butArray.add(tempButton);
end.

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin
for i:=0 to butArray.count-1 do
(butArray as Tbutton).free;

end;


Reindeer Moss Eater   (2005-08-30 09:47:00) [4]

Ага. Щаз.


Александр Иванов   (2005-08-30 09:45:00) [5]

count:=Form1.Components.Count-1;
for i:=0 to count do
 if (Form1.Components[i] is TButton) then
   (Form1.Components[i] as TButton).Free;


злобная танька   (2005-08-30 09:44:00) [6]


> Cherrex ©   (30.08.05 09:39) [9]

делаем как в [2], только переменную b делаем глобальной. Если надо удалить - b.free


Cherrex   (2005-08-30 09:39:00) [7]

Добавить понятно  А удолить можно?


Desdechado   (2005-08-29 18:51:00) [8]

Pearled
указатель на твою кнопку потеряется нафиг, а память останется занятой
добраться только через свойства формы можно будет до такой кнопки


Reindeer Moss Eater   (2005-08-29 17:04:00) [9]

Pearled
А при чем здесь переменная Form1?

Экземпляров класса TForm1 может быть великое множество и создающий эти экземпляры вовсе не обязан инициализировать глобальную переменную Form1.


Александр Иванов   (2005-08-29 16:44:00) [10]

Pearled ©   (29.08.05 16:41) [5]

Решил, что под "еще одна", он подразумевает форму, похоже ошибся.


Pearled   (2005-08-29 16:41:00) [11]

Александр Иванов
а при чем тут создание формы?


Александр Иванов   (2005-08-29 16:36:00) [12]

var MyForm:TForm1;
begin
 MyForm:=TMyForm.Create(Application);
 try
   MyForm.Show;
 finally
   MyForm.Free;
 end;
end;


Александр Иванов   (2005-08-29 16:36:00) [13]

var MyForm:TForm1;
begin
 MyForm:=TMyForm.Create(Application);
 try
   MyForm.Show;
 finally
   MyForm.Free;
 end;
end;


Pearled   (2005-08-29 16:28:00) [14]

Пример:
procedure TForm1.Button1Click(Sender: TObject);
var
  b: TButton;
begin
b:= TButton.Create(Form1);
b.Parent:= Form1;
b.Left:= 10;
b.Top:= 10;
b.Width:= 100;
b.Height:= 30;
b.Caption:= 'Button2';
end;


Reindeer Moss Eater   (2005-08-29 16:24:00) [15]

Ну ты и задачку подкинул.
Это же на нобелевскую тянет.
Да еще если без visible, то вообще мрак.


Наверх

Титульная страница Поиск, карта сайта Написать письмо