Delphi. Обработка событий компонент, созданных в Run-Time

Автор: Topol Воскресенье, Апрель 15th, 2012 Нет комментариев

Рубрика: Программирование

В начале мне хотелось бы просто рассказать об общем принципе, на простом примере. Мы создадим в Run-Time кнопку и будем обрабатывать ее событие OnClick. Кнопка у нас будет создаваться по нажатию на кнопку Button1.

procedure TForm1.Button1Click(Sender: TObject);
var New: TButton;
begin
New:=TButton.Create(Form1);
New.parent:=form1;
New.Top:=100;
New.Left:=100;
New.Caption:='Нажми меня';
New.Name:=New.ClassName+'1';
TButton(New).OnClick:=OnClickButton; // Вот что нас здесь больше всего интересует!!!
end;

Здесь нет ничего сложного. Мы просто создаем объект типа TButton и задаем его свойства. Но самое главное, что мы присвоили обработчику процедуры OnClick для нашей кнопки процедуру OnClickButton, которая и будет выполнять все необходимые действия. Нам осталось только описать эту процедуру.

Помещаем объявление процедуры в поле Private:

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);

private
{ Private declarations }
Procedure OnClickButton( Sender : TObject );

public
{ Public declarations }
end;

Ну а теперь остается самое простое — написать саму процедуру OnClickButton. Самое простое что может прийти в голову — это вывести сообщение о нажатии на кнопку. Теперь в теле программы мы пишем примерно следующее:

Procedure TForm1.OnClickButton( Sender : TObject );
Begin
ShowMessage('Нажали на кнопку');
End;

Вот и все!!! По-моему невероятно просто.

Но в первой статье мы рассматривали еще и создание массива компонент в Run-Time. Сейчас мы разберем обработку событий для этих компонент. Рассмотрим это на примере поля ввода класса TEdit. Т.е. по нажатию на кнопку у нас будет создаваться массив из 10 компонент TEdit.

Для разнообразия, объявим наш массив, как глобальную переменную:

var
Form1: TForm1;
mas:array[1..10] of TEdit;
implementation

{$R *.DFM}

Изменим описание процедуры OnClick для кнопки Button1, что создавались наши компоненты TEdit:

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:= 1 to 10 do begin
Mas[i]:=TEdit.Create(Form1);
Mas[i].parent:=form1;
Mas[i].Top:=100+i*20;
Mas[i].Left:=100;
Mas[i].Text:='пробный текст';
Mas[i].Name:=Mas[i].ClassName+inttostr(i); //задаем имя компонентам

TEdit(Mas[i]).OnChange:=OnEditChange; //присваиваем процедуру для обработчика события
end;
end;

Объявим процедуру OnEditChange в разделе Private (собственно это можно сделать и в разделе Public):

Procedure OnEditChange( Sender : TObject );

И, наконец, напишем саму процедуру OnEditChange:

Procedure TForm1.OnEditChange( Sender : TObject );
Begin
Form1.caption:=TEdit(sender).text;
End;

В результате работы этой процедуры заголовок формы будет содержать текст того компонента TEdit, в котором производится ввод. С помощью Sender мы как раз и указываем какой компонент инициировал это событие. Видите, все опять оказалось просто :) )

Ну вот, надеюсь что разрешил (хотя бы немного :) ) проблему с обработкой событий компонент, созданных в Run-Time.

Источник: webcorp.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты