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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2013, 17:50   #1
lexo
 
Регистрация: 07.01.2012
Сообщений: 7
По умолчанию Обработчик на динамически созданный компонент

Доброго всем дня! И с первым днём лета. Вопрос вот в чём.
Создаю вот так форму и компоненты (динамически) при нажатии на кнопку на главной форме:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
Var
  frmUser: TForm;
  btnUser: TButton;
  edUser:TEdit;
  memUser:TMemo;
begin
 frmUser := TForm.Create(Self);
 frmUser.Caption := 'Message';
 frmUser.Left := 290;
 frmUser.Top := 196;
 frmUser.Width := 368;
 frmUser.Height := 437;
 btnUser := TButton.Create(frmUser);
 btnUser.Left := 296;
 btnUser.Top := 344;
 btnUser.Width := 25;
 btnUser.Height := 25;
 btnUser.Caption := '>';
 btnUser.Parent := frmUser;

 edUser := TEdit.Create(frmUser);
 edUser.Left := 32;
 edUser.Top := 344;
 edUser.Width := 257;
 edUser.Height := 25;
 edUser.Text := '';
 edUser.Parent := frmUser;

 memUser:=TMemo.Create(frmUser);
 memUser.Left := 32;
 memUser.Top := 32;
 memUser.Width := 289;
 memUser.Height := 297;
 memUser.Parent := frmUser;
 memUser.Lines.Clear;

 frmUser.Show;
end;

end.
Мне нужно создать обработчик события нажатия кнопки, которая была создана динамически на динамически созданной форме. Помогите: как это сделать? Заранее благодарю!

Последний раз редактировалось Stilet; 01.06.2013 в 20:50.
lexo вне форума Ответить с цитированием
Старый 01.06.2013, 18:12   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Объявляешь прототип метода OnClick, и там пишешь нужный код.
Каждой динам. кнопке ставишь обработчик:
ByButton.OnClick:=@MyBtnClick;

Последний раз редактировалось Человек_Борща; 01.06.2013 в 18:16.
Человек_Борща вне форума Ответить с цитированием
Старый 01.06.2013, 18:27   #3
lexo
 
Регистрация: 07.01.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Объявляешь прототип метода OnClick, и там пишешь нужный код.
Каждой динам. кнопке ставишь обработчик:
ByButton.OnClick:=@MyBtnClick;
Исправьте пожалуйста мой код таким образом чтобы потом на динамически созданной форме при нажатии на кнопку в edit выводился текст какой нибудь. Кнопка и edit созданы динамически на динамической форме.

Код кнопки должен быть примерно такой :
Цитата:
procedure Click(Sender:TObject);
begin
frmUser.edUser:='блаблабла';
end;
Просто с ходу не очень понял.

Последний раз редактировалось lexo; 01.06.2013 в 18:45.
lexo вне форума Ответить с цитированием
Старый 01.06.2013, 18:50   #4
kventin_zhuk
БНТУ ФИТР
Форумчанин
 
Аватар для kventin_zhuk
 
Регистрация: 20.05.2012
Сообщений: 315
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  btn: TButton;
begin
  btn := TButton.Create(Form1);

  btn.Width := 40;
  btn.Height := 20;

  btn.Left := random(Form1.Width);
  btn.Top := random(Form1.Height);
  btn.Parent := Form1;
  btn.OnClick := Button2Click;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    Form1.Edit1.Text := IntToStr(random(99999));
end;
по нажатию на button1 - на форме будет создаваться другая кнопка, которая будет выполнять обработчик button2
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты
kventin_zhuk@live.com
kventin_zhuk вне форума Ответить с цитированием
Старый 01.06.2013, 19:03   #5
lexo
 
Регистрация: 07.01.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от kventin_zhuk Посмотреть сообщение
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  btn: TButton;
begin
  btn := TButton.Create(Form1);

  btn.Width := 40;
  btn.Height := 20;

  btn.Left := random(Form1.Width);
  btn.Top := random(Form1.Height);
  btn.Parent := Form1;
  btn.OnClick := Button2Click;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    Form1.Edit1.Text := IntToStr(random(99999));
end;
по нажатию на button1 - на форме будет создаваться другая кнопка, которая будет выполнять обработчик button2
у меня создаётся при нажатии на главной форме ДРУГАЯ форма, с кнопкой и edit-ом. И вот при нажатии на кнопку на новой форме , в edit выводится текст. Код должен быть в юните главной формы !
lexo вне форума Ответить с цитированием
Старый 01.06.2013, 20:27   #6
lexo
 
Регистрация: 07.01.2012
Сообщений: 7
По умолчанию

Цитата:
procedure MyButtonClick(Self : TComponent; Sender : TButton);
begin
(Self.FindComponent('edUser') as TEdit).Text := 'hello';
end;

procedure TForm1.Button1Click(Sender: TObject);
Var
frmUser: TForm;
btnUser: TButton;
edUser:TEdit;
memUser:TMemo;
Method : TMethod;
begin
frmUser := TForm.Create(Self);
frmUser.Caption := 'Message';
frmUser.Left := 290;
frmUser.Top := 196;
frmUser.Width := 368;
frmUser.Height := 437;
btnUser := TButton.Create(frmUser);
btnUser.Left := 296;
btnUser.Top := 344;
btnUser.Width := 25;
btnUser.Height := 25;
btnUser.Caption := '>';
btnUser.Parent := frmUser;

Method.Code := @MyButtonClick;
method.Data := frmUser; // Self будет твоя форма
btnUser.OnClick := TNotifyEvent (Method);

edUser := TEdit.Create(frmUser);
edUser.Name := 'edUser'; // Вот имя - обязательно. По нему будет обращение к компоненту
edUser.Left := 32;
edUser.Top := 344;
edUser.Width := 257;
edUser.Height := 25;
edUser.Text := '';
edUser.Parent := frmUser;

memUser:=TMemo.Create(frmUser);
memUser.Left := 32;
memUser.Top := 32;
memUser.Width := 289;
memUser.Height := 297;
memUser.Parent := frmUser;
memUser.Lines.Clear;

frmUser.Show;
end;
вот решение. всем спасибо. тема закрыта
lexo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое добавление столбцов в динамически созданный DBGrid Desha БД в Delphi 8 09.12.2012 17:33
FindComponent не находит созданный компонент DIgorevich Общие вопросы Delphi 2 26.08.2012 00:12
Перетаскиавние формы за динамически созданный компонент MyIE Общие вопросы Delphi 1 10.10.2010 11:15
Динамически созданный обьект, процедуры heart Общие вопросы Delphi 3 09.05.2009 17:32
Динамически созданный tabSheet S@fer Общие вопросы Delphi 7 08.04.2009 12:03