好久没写代码了,更久没上博客园的博客了,无聊写几行试一下新语法。
1 unit Main;
2
3 interface
4
5 uses
6 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
7 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls,
8
9 iHome.Helper.Telegram,
10 Generics.Collections;
11
12 type
13 TMainForm = class(TForm)
14 ListView_Queue: TListView;
15 btEnQueue: TButton;
16 btDeQueue: TButton;
17 procedure btEnQueueClick(Sender: TObject);
18 private
19 { Private declarations }
20 FPriorityQueue:TQueue<PTelegram>;
21
22 procedure SetupListView(ListView:TListView);
23 procedure ViewQueue(ListView:TListView;PriorityQueue:TQueue<PTelegram>);
24 public
25 { Public declarations }
26 end;
27
28 var
29 MainForm: TMainForm;
30
31 implementation
32
33 {$R *.dfm}
34
35
36 procedure TMainForm.SetupListView(ListView: TListView);
37 procedure SetupListViewColumns(Columns:TListColumns);
38 begin
39 Columns.Clear;
40 TListColumn(Columns.Add).Caption:='Caption';
41 TListColumn(Columns.Add).Caption:='Message';
42 TListColumn(Columns.Add).Caption:='Sender';
43 TListColumn(Columns.Add).Caption:='Receiver';
44 TListColumn(Columns.Add).Caption:='DispatchTime';
45 TListColumn(Columns.Add).Caption:='ExtraInfo';
46 end;
47 begin
48 ListView.ViewStyle:=vsReport;//报表格式显示
49 SetupListViewColumns(ListView.Columns); //设置显示列名
50 end;
51
52 procedure TMainForm.ViewQueue(ListView:TListView;PriorityQueue:TQueue<PTelegram>);
53 var
54 FpTelegram:PTelegram;
55 procedure ViewQueueItem(ListItem:TListItem);
56 begin
57 with ListItem do
58 begin
59 Caption := IntToStr(FpTelegram^.msg);
60 SubItems.Add(IntToStr(FpTelegram^.msg));
61 SubItems.Add(IntToStr(FpTelegram^.Sender));
62 SubItems.Add(IntToStr(FpTelegram^.Receiver));
63 SubItems.Add(IntToStr(FpTelegram^.DispatchTime));
64 SubItems.Add(IntToStr(FpTelegram^.ExtraInfo));
65 end;
66 end;
67 begin
68 try
69 ListView.Items.BeginUpdate;
70 ListView.Clear;
71 SetupListView(ListView);//设置ListView显示设置
72 for FpTelegram in PriorityQueue do ViewQueueItem(ListView.Items.Add);//显示队列项目
73 finally
74 ListView.Items.EndUpdate
75 end;
76 end;
77
78 procedure TMainForm.btEnQueueClick(Sender: TObject);
79 var
80 FTelegram:PTelegram;
81
82 function MakerQueue(Max:Integer):TQueue<PTelegram>;
83 var
84 i:Integer;
85 begin
86 Result:=TQueue<PTelegram>.Create;//创建优先队列
87 for I := 0 to Max do
88 begin
89 New(FTelegram);
90 with FTelegram^ do
91 begin
92 DispatchTime:=GetTickCount;
93 Sender:=Self.Handle;
94 Receiver:=Self.Handle;
95 Msg:=i;
96 ExtraInfo:=0;
97 end;
98 Result.Enqueue(FTelegram);//入队
99 end;
100 end;
101
102 begin
103 if FPriorityQueue=nil then
104 FPriorityQueue:=MakerQueue(15);//创建15个队列项目
105 ViewQueue(ListView_Queue,FPriorityQueue);//ListView显示队列
106 end;
107
108 end.