Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.25;
Скачать: CL | DM;

Вниз

Как динамически добавить компонент на форму   Найти похожие ветки 

 
Cherrex ©   (2005-08-29 16:19) [0]

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


 
Reindeer Moss Eater ©   (2005-08-29 16:24) [1]

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


 
Pearled ©   (2005-08-29 16:28) [2]

Пример:
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;


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

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


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

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


 
Pearled ©   (2005-08-29 16:41) [5]

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


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

Pearled ©   (29.08.05 16:41) [5]

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


 
Reindeer Moss Eater ©   (2005-08-29 17:04) [7]

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

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


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

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


 
Cherrex ©   (2005-08-30 09:39) [9]

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


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


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

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


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

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


 
Reindeer Moss Eater ©   (2005-08-30 09:47) [12]

Ага. Щаз.


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

Проще Так
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;


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

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 22:28) [15]

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



Страницы: 1 вся ветка

Текущий архив: 2005.09.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.032 c
2-1124199768
Гость22
2005-08-16 17:42
2005.09.25
Как не дать закрыть форму?


14-1125126358
kot andrei
2005-08-27 11:05
2005.09.25
Логическая цепочка чисел....


14-1124950374
dr Tr0jan
2005-08-25 10:12
2005.09.25
Форум по FreeBSD


2-1124355965
Гость22
2005-08-18 13:06
2005.09.25
Как в поле DBLookupComboBox1 уствновить необходимое ...


3-1124142361
Adolis
2005-08-16 01:46
2005.09.25
Вопросы по БД.