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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2006, 22:30   #1
Gambler
Игрок
Форумчанин
 
Аватар для Gambler
 
Регистрация: 29.10.2006
Сообщений: 367
Восклицание события на динамически созданные кнопки.

Привет всем! Без лирических отступлений, сразу к делу!

вот таким кодом я создаю новую кнопку:

Код:
var 
Button: TButton; 
begin 
Button:= Tbutton.Create(self);
Button.Parent := self; 
Button.Left :=10; 
Button.Top :=10; 
Button.Caption := 'Новая кнопка';  
end;
Теперь сам вопрос: как сделать так, чтобы при нажатие созданной кнопки выполнялся какой то код.
Жизнь всегда игра. Но смерть - не всегда поражение.

#define true (Math.random()>0.5) //Удачной отладки

Последний раз редактировалось Stilet; 26.11.2009 в 11:33.
Gambler вне форума Ответить с цитированием
Старый 19.11.2006, 13:41   #2
X=Vitamin=X
Пользователь
 
Аватар для X=Vitamin=X
 
Регистрация: 18.11.2006
Сообщений: 32
По умолчанию

Т. к. твоя переменная напрямую создается по self то естественно она и методы унаследует и обработчики событий, тоесть все, в принципе можешь смело писать Button.OnClick:=Some_Click_Procedur e;
Дерзай! ! !

З.Ы.
О дефектах, и ошибках большая просьба сообщить ! ! !
Незнание - рабство, знание - свобода ! ! !
X=Vitamin=X вне форума Ответить с цитированием
Старый 19.11.2006, 22:40   #3
nova-alex
Пользователь
 
Регистрация: 06.11.2006
Сообщений: 51
По умолчанию

интересно, а если кнопок будет хотя-бы две (или больше)? как с ними разобраться?
nova-alex вне форума Ответить с цитированием
Старый 20.11.2006, 08:18   #4
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Код:
Button1.OnClick:=Some_Click_Procedure1;
Button2.OnClick:=Some_Click_Procedure2;
Button3.OnClick:=Some_Click_Procedure3;
Button4.OnClick:=Some_Click_Procedure4;
Лишь бы имена были разные , ну и конечно для каждой кнопки своя процедура.

Последний раз редактировалось Stilet; 26.11.2009 в 11:33.
zetrix вне форума Ответить с цитированием
Старый 20.11.2006, 12:44   #5
selenux
Пользователь
 
Регистрация: 14.11.2006
Сообщений: 23
По умолчанию

Не проще ли установить один обработчик для всех кнопок, а различать их по хвостам.

Идентифицируешь кнопку Button.Tag := Уникальное_число;

а в обработчике

case (Sender as TButton).Tag of
...

end;
selenux вне форума Ответить с цитированием
Старый 20.11.2006, 15:13   #6
RastMadestov
 
Аватар для RastMadestov
 
Регистрация: 17.11.2006
Сообщений: 4
Лампочка

А если кнопке присвоить имя типа
Button.Name:='MyButton1';
RastMadestov вне форума Ответить с цитированием
Старый 20.11.2006, 16:18   #7
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

MyButton1.OnClick:=Some_Click_Proce dure1;

вообще, Some_Click_Procedure1 - это название тоже можно заменить на любое название существующей в программе функции.
Alar вне форума Ответить с цитированием
Старый 20.11.2006, 19:35   #8
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Цитата:
Button.Name:='MyButton1';
Я бы не советовал так делать в твоей программе, лучше изначално в инспекторе объектов всё задать.
zetrix вне форума Ответить с цитированием
Старый 23.11.2006, 22:24   #9
Gambler
Игрок
Форумчанин
 
Аватар для Gambler
 
Регистрация: 29.10.2006
Сообщений: 367
По умолчанию

Только не тыкайте в меня пальцем, но я не въехал!!! Delphi я изучал по книжкам и поэтому знания у меня урывками. Растолкуйте по подробнее если можно.
Жизнь всегда игра. Но смерть - не всегда поражение.

#define true (Math.random()>0.5) //Удачной отладки
Gambler вне форума Ответить с цитированием
Старый 23.11.2006, 23:59   #10
nova-alex
Пользователь
 
Регистрация: 06.11.2006
Сообщений: 51
По умолчанию

Вот то, что сам попробовал и проверил - работает.

Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure changetext(sender:Tobject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Button: TButton;
begin
Button:= Tbutton.Create(self);
Button.Parent := self;
Button.Left :=10;
Button.Top :=10;
Button.Caption := 'Новая кнопка';
Button.OnClick:=form1.changetext;
end;
procedure tform1.changetext(Sender: TObject);
begin
edit1.Text:='Новый текст';
end;
end.
Changetext - процедура для выполнения при нажатии созданной кнопки. При ее объявлении (Sender:Tobject) - обязательно, а то компилятор ругается.

Последний раз редактировалось Stilet; 26.11.2009 в 11:35.
nova-alex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка события нажатия кнопки masm Microsoft Office Access 6 22.08.2011 11:21
Кликая на нужный Image, необходимо менять именно его, а не все динамически созданные. МаксMorfey Компоненты Delphi 2 04.01.2009 17:43
Как изменять динамически созданные Label МаксMorfey Компоненты Delphi 2 03.01.2009 10:23
Как сделать чтобы динамически созданные объекты оставались после закрытия формы? AHAPXUCT2007 Общие вопросы Delphi 7 28.09.2007 08:46
События в динамически созданном компоненте Biowulf86 Общие вопросы Delphi 2 17.09.2007 12:44