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

Добавить процедурный тип в TList

Delphi , Компоненты и Классы , Списки

Добавить процедурный тип в TList

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

unit Unit1;

 interface

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

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

 var
   Form1: TForm1;

 implementation

 {$R *.DFM}

 type
   TEventObject = class
   protected
     FEvent: TNotifyEvent;
   published
     property Event: TNotifyEvent read FEvent write FEvent;
   end;

   // Zur Liste hinzufugen 
  // To add to the list 
procedure TForm1.Button1Click(Sender: TObject);
 var
    A: TEventObject;
 begin
   A       := TEventObject.Create;
   A.Event := Button1Click; // or any TNotifyEvent 
  ListBox1.Items.AddObject('Button1Click', A);
 end;

 // Den Event aufrufen 
// To call the event 
procedure TForm1.ListBox1Click(Sender: TObject);
 begin
   if ListBox1.ItemIndex <> -1 then
     TEventObject(ListBox1.Items.Objects[ListBox1.ItemIndex]).Event(Self);
 end;

 end.



 // 2. Losung 
// 2nd solution 

{....}
   private
     FList: TList;
   end;
 {....}


 procedure TForm1.FormCreate(Sender: TObject);
 begin
   FList := TList.Create;
 end;

 procedure TForm1.FormDestroy(Sender: TObject);
 begin
   FList.Free;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   ShowMessage('event');
 end;

 procedure TForm1.Button2Click(Sender: TObject);
 var
   P: TNotifyEvent;
 begin
   // Get pointer to event 
  // Pointer des Events holen 
  P := Button1Click;
   // Add Pointer to List 
  // Pointer zur Liste hinzufugen 
  FList.Add(@P);
 end;

 procedure TForm1.Button3Click(Sender: TObject);
 var
   P: TNotifyEvent;
 begin  // Get first event from list 
  // Den ersten Event aus der Liste holen 
    @P := FList[0];
   // Execute event 
  // Event ausfuhren 
  P(Sender);
 end;

Here's the translation of the content into Russian:

Проект на Delphi, демонстрирующий добавление и выполнение событий, хранящихся в списке TList. Основные компоненты проекта:

  1. TForm1: это основная форма приложения, содержащая три кнопки (Button1, Button2 и Button3) и список (ListBox1).
  2. TEventObject: это пользовательская класс, представляющая событие. У неё есть одна свойство, называемая Event, которое типа TNotifyEvent.
  3. ListBox1Click: это обработчик события для компонента ListBox1. Когда в списке кликается элемент, эта процедура выполняется.

Вот что делает каждая часть кода:

Button1Click Эта процедура создает новый экземпляр класса TEventObject и устанавливает свойство Event в значение Button1Click (другой обработчик события). Затем объект-событие добавляется в элементы списка с помощью метода AddObject.

ListBox1Click Эта процедура проверяет, был ли кликнут элемент в списке. Если да, то она получает объект-событие, связанный с этим элементом, используя свойство Items.Objects и выполняет его свойство Event.

Button2Click Эта процедура добавляет указатель на Button1Click (обработчик события) в список TList FList.

Button3Click Эта процедура получает первое событие из списка FList, преобразует его адрес в тип TNotifyEvent и выполняет его, вызывая его с аргументом Sender.

Второй вариант решения похож, но использует список TList вместо пользовательского класса для хранения событий. Он также включает процедуры FormCreate и FormDestroy для создания и освобождения экземпляра списка.

Вот что можно улучшить:

  1. Добавьте комментарии, объясняющие, что делает каждая часть кода.
  2. Используйте более описательные имена переменных (например, eventObject вместо A).
  3. Рассмотрите использование более надежного метода хранения и извлечения событий, например, словаря или пользовательского класса для управления событиями.

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

Добавить процедурный тип в TList, позволяющий хранить и вызывать события.


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

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




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


:: Главная :: Списки ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-10-08 18:22:22/0.0058779716491699/1