二十三、详测 Generics Collections TQueue (3): OnNotify、Extract

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.

posted on 2009-11-05 14:54  jxgxy  阅读(378)  评论(0编辑  收藏  举报

导航