unit
Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Generics.Collections;
type
TForm1 = class (TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure MyQueueNotify(Sender: TObject; const Item: Integer;
Action: TCollectionNotification);
end ;
var
Form1: TForm1;
implementation
{ $R *.dfm }
// uses Generics.Collections;
{ 准备给 TQueue.OnNotify 调用的事件过程 }
procedure TForm1.MyQueueNotify(Sender: TObject; const Item: Integer;
Action: TCollectionNotification);
begin
case Action of
cnAdded : ShowMessageFmt( ' Add: %d ' , [Item]);
cnRemoved : ShowMessageFmt( ' Remove: %d ' , [Item]);
cnExtracted : ShowMessageFmt( ' Extract: %d ' , [Item]);
end ;
end ;
procedure TForm1.Button1Click(Sender: TObject);
var
Queue: TQueue < Integer > ;
begin
Queue : = TQueue < Integer > .Create();
Queue.OnNotify : = MyQueueNotify;
Queue.Enqueue( 11 ); { Add: 11 }
Queue.Enqueue( 22 ); { Add: 22 }
Queue.Enqueue( 33 ); { Add: 33 }
Queue.Dequeue; { Remove: 11 }
// Extract 和 Dequeue 功能一致, 区别只是在驱动 OnNotify 事件时传递的参数有区别, 没多大意义
Queue.Extract; { Extract: 22 }
// Queue.OnNotify : = nil ;
Queue.Free; { Remove: 33 }
end ;
end .
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Generics.Collections;
type
TForm1 = class (TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure MyQueueNotify(Sender: TObject; const Item: Integer;
Action: TCollectionNotification);
end ;
var
Form1: TForm1;
implementation
{ $R *.dfm }
// uses Generics.Collections;
{ 准备给 TQueue.OnNotify 调用的事件过程 }
procedure TForm1.MyQueueNotify(Sender: TObject; const Item: Integer;
Action: TCollectionNotification);
begin
case Action of
cnAdded : ShowMessageFmt( ' Add: %d ' , [Item]);
cnRemoved : ShowMessageFmt( ' Remove: %d ' , [Item]);
cnExtracted : ShowMessageFmt( ' Extract: %d ' , [Item]);
end ;
end ;
procedure TForm1.Button1Click(Sender: TObject);
var
Queue: TQueue < Integer > ;
begin
Queue : = TQueue < Integer > .Create();
Queue.OnNotify : = MyQueueNotify;
Queue.Enqueue( 11 ); { Add: 11 }
Queue.Enqueue( 22 ); { Add: 22 }
Queue.Enqueue( 33 ); { Add: 33 }
Queue.Dequeue; { Remove: 11 }
// Extract 和 Dequeue 功能一致, 区别只是在驱动 OnNotify 事件时传递的参数有区别, 没多大意义
Queue.Extract; { Extract: 22 }
// Queue.OnNotify : = nil ;
Queue.Free; { Remove: 33 }
end ;
end .