Обработка событий компонент, созданных во время работы приложения
Дата: 15.10.2011 | Комментариев: 0 | Просмотров: 3584
Как обрабатывать события компонент, созданных в run-time?
Этот вопрос очень часто задают начинающие программисты. Почему-то принцип создания компонент все понимают, а с обработкой их событий возникают вопросы.
Давайте создадим десяток кнопок и обработаем их событие onclick.
Добавьте в глобальные переменные массив из 10 кнопок:
var
myButton: array [1 .. 10] of TButton;
Положите на форму кнопку и для ee события onclick напишите такой код:
procedure TfrmMain.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := 1 to 10 do
begin
myButton[i] := TButton.Create(frmMain);{создаем кнопку}
with myButton[i] do
begin
Parent := frmMain;
Top := i * myButton[i].Height;
Left := 5;
Width := 100;
Caption := 'Кнопка № ' + inttostr(i);
Name := myButton[i].ClassName + inttostr(i);
Tag := i;
ShowHint:= True;
Hint:= Caption;
onclick := myButtonclick;{присваиваем событие}
end;
end;
end;
Как видите, в этом коде событию onclick вновь созданных кнопок присвоена процедура myButtonclick. Такой процедуры еще нет. Создайте ее:
procedure TfrmMain.myButtonclick(Sender: TObject);
begin
ShowMessage('Нажата ' + (Sender as TButton).Caption);
end;
И, конечно, задекларируйте:
private
{ Private declarations }
procedure myButtonclick(Sender: TObject);
Скомпилируйте приложение и проверьте его в работе.
В процедуре myButtonclick есть обращение к заголовку кнопки. Такая конструкция не совсем удобна. Не писать же в самом деле так:
if (Sender as TButton).Caption = 'Кнопка № 1' then {...}
Именно для этого при создании кнопок всем кнопкам присвоено свойство tag. Очень полезное свойство, про которое почему-то все забывают и редко используют. А зря.
Перепишите процедуру myButtonclick вот так:
procedure TfrmMain.myButtonclick(Sender: TObject);
begin
case TButton(Sender).Tag of
1:
begin
{ Обрабатываем событие для кнопки 1 };
end;
2:
begin
{ Обрабатываем событие для кнопки 2 };
end;
3:
begin
{ Обрабатываем событие для кнопки 3 };
end;
{ И так далее... }
end;
end;
Все оказалось просто. Аналогично присваиваются любые другие события.
Автор Delphi_Coder
Специально для delphi-z.ru.
Октябрь, 2011 г.
При перепечатке любых статей с сайта ссылка на сайт delphi-z.ru обязательна.
Все используемые на сайте статьи, файлы и логотипы компаний принадлежат их законным владельцам. Если вы являетесь правообладателем "Обработка событий компонент, созданных во время работы приложения" и не желаете, чтобы ваша информация находилась на нашем сайте, напишите нам и эта информация будет удалена.
Категория: Публикации » Публикации - Мои статьи
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.