![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как динамически добавить компонент на форму [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, то вообще мрак.