![]() |
![]() ![]() ![]() ![]() |
|
Добавить процедурный тип в 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 прямо в свой смартфон. Подпишитесь на наш
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||