Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.03.2011, 00:16
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию как создать объекты на форме? (кнопку)

здраствуйте.подскажите пожалуйста,как при нажатии на кнопку,создать N кол-во кнопок (кол-во вводим в Edit1)?

у меня получаеться создать тока одну кнопку
Код:
var
  Form1: TForm1;
  Button2 : Tbutton;
<...>
procedure TForm1.Button1Click(Sender: TObject);
begin
  Button2 := TButton.Create(Form1);
  Button2.Parent := Form1;
  Button2.Height := 25;
  Button2.left:=72 ;
  Button2.Top:=8;
   Form1.ActiveControl:=Button2;
  
 end;
если же я делаю так:
Код:
var
  Form1: TForm1;
  Button2 : Tbutton;
<...>
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
 for i:=1 to N do
 begin
  Button2 := TButton.Create(Form1);
  Button2.Parent := Form1;
  Button2.Height := 25;
  Button2.left:=20*i ;//с расположением пока не работал еще особо.это так для вида
  Button2.Top:=8;
  Form1.ActiveControl:=Button2;
 end;
  
 end;
если так сделать,то потом я могу обратиться тока к подследней созданной кнопке,всмысле не нажать ее (нажать можно любую) а изменить атрибут.(типа Button2.caption:='1')-атрибут измениться только у последней,а как у других менять?

Последний раз редактировалось Snake22, 09.03.2011 в 00:17. Причина: подписался на тему))
Ответить с цитированием
  #2  
Старый 09.03.2011, 02:37
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Нужен массив кнопок:
Код:
var
  MyButtons: array of TButton;
Создаёшь кнопки так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  SetLength(MyButtons, StrToInt(Edit1.Text)); // задаёшь разиер массива (кол-во кнопок)
  for I := 0 to Length(MyButtons) - 1 do 
  begin  // в цикле создаёшь кнопки и сохраняешь указатели на них в массиве
    MyButtons[i] := TButton.Create(Form1);
    // здесь делаешь с созданной кнопкой что нужно
    MyButtons[i].Parent := Form1;
    // и т. д.
  end;
end;
Потом работаешь с ними так:
Код:
MyButtons[0].Caption := 'My button 1';
MyButtons[1].Caption := 'My button 2';

Последний раз редактировалось ryderx34, 09.03.2011 в 02:40.
Ответить с цитированием
  #3  
Старый 09.03.2011, 11:28
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

Спасибо! с учебы приду заценю)
Ответить с цитированием
  #4  
Старый 09.03.2011, 17:23
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Или так:
Код:
var
  Form1: TForm1;
  Button2 : Tbutton;
<...>
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=1 to 10 do
 begin
   With Button2 do
     begin
       TButton.Create(Form1);
       Parent := Form1;
       Height := 25;
       left:=72 ;
       Top:=8;
       Name:='Btn'+IntToStr(i);
     end;
 end;
 end;
Потом производиш поиск по имени. Если кнопка нашлась присвоить ей какое-либо событие...

Последний раз редактировалось Janom, 09.03.2011 в 17:28.
Ответить с цитированием
  #5  
Старый 09.03.2011, 17:43
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Цитата:
Сообщение от Janom
Если кнопка нашлась присвоить ей какое-либо событие...
Вопрос тысячелетия: почему нельзя назначить кнопке эвент при создании? Причём, даже не на одну, а на все кнопки? И определять, какая из них нажата, по свойству Tag?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #6  
Старый 09.03.2011, 17:51
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Можно, но тэг тоже отслеживать надо...
Я про такой вариант:
Код:
var FindComp:TComponent;
...
for i:=0 to form1.componentcount-1 do
    begin
      if form1.components[i].name=('Btn7') then
        begin
           FindComp:=form1.findcomponent(form.components[i].name);
           TButton(FindComp).Caption:='Кнопка7';
        end;
    end;

Последний раз редактировалось Janom, 09.03.2011 в 18:02.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:30.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter