Все бесплатно
    Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.



Вопросы
  Удалить свой же exe-шник
   Категория: Приложение
  Компоненты CoolBar и ControlBar
   Категория: Компоненты
  Корректное колесико мыши
   Категория: Приложение
  Как удалить не пустой каталог
   Категория: Файловая система
  Компонент PopupMenu
   Категория: Компоненты
  Удалить лишние символы из строки
   Категория: Текст и строки
  Что такое хук (hook)?
   Категория: Приложение
  Удалить пробелы в начале и конце
   Категория: Текст и строки
  Компонент StatusBar
   Категория: Компоненты

Публикации: Мои статьи

Обработка событий компонент, созданных во время работы приложения

Дата: 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 обязательна.
Все используемые на сайте статьи, файлы и логотипы компаний принадлежат их законным владельцам. Если вы являетесь правообладателем "Обработка событий компонент, созданных во время работы приложения" и не желаете, чтобы ваша информация находилась на нашем сайте, напишите нам и эта информация будет удалена.

Теги: мои статьи

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.