Добавить процедурный тип в TListDelphi , Компоненты и Классы , СпискиДобавить процедурный тип в TList
Оформил: DeeCo 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. Основные компоненты проекта:
Вот что делает каждая часть кода: Button1Click Эта процедура создает новый экземпляр класса TEventObject и устанавливает свойство Event в значение Button1Click (другой обработчик события). Затем объект-событие добавляется в элементы списка с помощью метода AddObject. ListBox1Click Эта процедура проверяет, был ли кликнут элемент в списке. Если да, то она получает объект-событие, связанный с этим элементом, используя свойство Items.Objects и выполняет его свойство Event. Button2Click Эта процедура добавляет указатель на Button1Click (обработчик события) в список TList FList. Button3Click Эта процедура получает первое событие из списка FList, преобразует его адрес в тип TNotifyEvent и выполняет его, вызывая его с аргументом Sender. Второй вариант решения похож, но использует список TList вместо пользовательского класса для хранения событий. Он также включает процедуры FormCreate и FormDestroy для создания и освобождения экземпляра списка. Вот что можно улучшить:
В целом, это хороший пример хранения и выполнения событий в Delphi, но можно улучшить код с помощью лучшей организации, комментариев и имен переменных. Добавить процедурный тип в TList, позволяющий хранить и вызывать события. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |