Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Присвоить одно событие всем компонентам

Delphi , Компоненты и Классы , Свойства и События

Присвоить одно событие всем компонентам


{ 
  This example shows how to assign a OnContextPopup event 
  handler to all components at runtime using SetMethodProp(). 
  (Here: OnContextPopup event handler) 
} 

  private 
    { Private declarations } 
    procedure AssignOnContextPopupEvent; 
    procedure OnContextPopup(Sender: TObject; MousePos: TPoint; 
     var Handled: Boolean); 
  public 
    { Public declarations } 
  end; 

var 
  Form1: TForm1; 

implementation 

{$R *.dfm} 

uses 
  TypInfo; 

procedure TForm1.OnContextPopup(Sender: TObject; MousePos: TPoint; 
  var Handled: Boolean); 
begin 
  with Sender as TComponent do 
    ShowMessage(Name + ' right-clicked!'); 
end; 

procedure TForm1.AssignOnContextPopupEvent; 
var 
  i: Integer; 
  PropInfo: PPropInfo; 
  Method: TMethod; 
  PEvent: ^TContextPopupEvent; 
begin 
  for i := 0 to ComponentCount - 1 do 
  begin 
    PropInfo := GetPropInfo(Components[i].ClassInfo, 'OnContextPopup'); 
    if (PropInfo <> nil) and (PropInfo^.PropType^^.Kind = tkMethod) then 
    begin 
      Method := GetMethodProp(Components[i], PropInfo); 
      if not Assigned(Method.Code) then 
      begin 
        PEvent := @Method.Code; 
        PEvent^ := OnContextPopup; 
        Method.Data := Self; 
        SetMethodProp(Components[i], PropInfo, Method); 
      end; 
    end; 
  end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  AssignOnContextPopupEvent; 
end;

Программный код на Delphi, который присваивает обработчик события OnContextPopup всем компонентам в форме при выполнении программы.

Обзор кода:

  1. Обработчик события OnContextPopup объявлен как процедура, принимающая три параметра: Sender, которое является компонентом, который инициировал событие; MousePos, которое является координатами клика мыши; и Handled, которое является булевым переменной, указывающей, было ли событие обработано.
  2. Процедура AssignOnContextPopupEvent перебирает все компоненты в форме с помощью свойства ComponentCount и массива Components.
  3. Для каждого компонента она получает структуру PropInfo для свойства OnContextPopup с помощью функции GetPropInfo. Эта структура содержит информацию о свойстве,such as its type and whether it's a method or not.
  4. Если свойство является методом (т.е., его тип - tkMethod), процедура получает код метода с помощью функции GetMethodProp и проверяет, был ли код метода уже присвоен. Если нет, она присваивает обработчик события (OnContextPopup) коду метода и устанавливает свойство Data метода в Self, которое ссылается на форму.
  5. Наконец, процедура вызывает функцию SetMethodProp, чтобы установить новый код метода для свойства OnContextPopup.

Обработчик события будет инициирован, когда компонент в форме будет правым кликом мыши (т.е., его событие OnContextPopup будет инициировано). Обработчик события отображает сообщение об ошибке с именем компонента и сообщением "right-clicked!" с помощью функции ShowMessage.

Для использования этого кода просто поместите его в раздел реализации формы и вызовите процедуру AssignOnContextPopupEvent, когда вы хотите присвоить обработчик события всем компонентам. Например:

procedure TForm1.Button1Click(Sender: TObject);
begin
  AssignOnContextPopupEvent;
end;

Этот код присваивает обработчик события всем компонентам в форме, когда кнопка кликается.

Присваивается событие OnContextPopup всем компонентам приложения на лету, используя метод SetMethodProp класса TComponent.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Свойства и События ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:45:48/0.0055220127105713/1