📄 mainform.pas
字号:
unit MainForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, IntfUnit, EmpUnit, InvUnit;
const
MAX_EMPLOYEES = 5;
MAX_INVENTORYITEMS = 3;
type
TfrmMain = class(TForm)
PageControl1: TPageControl;
tabBubbleSort: TTabSheet;
tabListView: TTabSheet;
lbEmployees: TListBox;
Label1: TLabel;
btnByName: TButton;
btnBySalary: TButton;
lvInventory: TListView;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure btnByNameClick(Sender: TObject);
procedure btnBySalaryClick(Sender: TObject);
procedure lvInventoryColumnClick(Sender: TObject;
Column: TListColumn);
procedure lvInventoryCompare(Sender: TObject;
Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
private
{ Private declarations }
FEmpArray: Array[1 .. MAX_EMPLOYEES] of IUnknown;
FInvArray: Array[1 .. MAX_INVENTORYITEMS] of IUnknown;
procedure LoadListBox;
procedure CreateInventoryItem(AIndex: Integer; APartNo,
ADescription: string; AInStock: Integer; AUnitPrice: Double);
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.DFM}
procedure TfrmMain.CreateInventoryItem(AIndex: Integer;
APartNo: string; ADescription: string; AInStock: Integer;
AUnitPrice: Double);
var
ListItem: TListItem;
begin
FInvArray[AIndex] := TInventoryItem.Create(APartNo, ADescription,
AInStock, AUnitPrice);
ListItem := lvInventory.Items.Add;
ListItem.Caption := APartNo;
ListItem.SubItems.Add(ADescription);
ListItem.SubItems.Add(FloatToStrF(AUnitPrice, ffCurrency, 5, 2));
ListItem.SubItems.Add(IntToStr(AInStock));
ListItem.Data := Pointer(FInvArray[AIndex]);
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
// Create some employees
FEmpArray[1] := TEmployee.Create('Smith, Tom', 19200.00);
FEmpArray[2] := TEmployee.Create('Doe, John', 38000.00);
FEmpArray[3] := TEmployee.Create('Williams, Fred', 26500.00);
FEmpArray[4] := TEmployee.Create('Jones, Bob', 90000.00);
FEmpArray[5] := TEmployee.Create('Adams, Tim', 42500.00);
// Load employees into the list box
LoadListBox;
// Create some inventory items
CreateInventoryItem(1, 'P5409', 'Widget', 35, 1.19);
CreateInventoryItem(2, 'X1234', 'Gadget', 4, 14.95);
CreateInventoryItem(3, 'J7749', 'Doodad', 17, 8.79);
end;
procedure TfrmMain.LoadListBox;
var
Index: Integer;
Emp: IEmployee;
begin
lbEmployees.Items.BeginUpdate;
try
lbEmployees.Items.Clear;
for Index := 1 to MAX_EMPLOYEES do begin
Emp := FEmpArray[Index] as IEmployee;
lbEmployees.Items.Add(Emp.GetName + #9 +
FloatToStrF(Emp.GetSalary, ffCurrency, 8, 2));
end;
finally
lbEmployees.Items.EndUpdate;
end;
end;
procedure TfrmMain.btnByNameClick(Sender: TObject);
begin
SortArray(FEmpArray, Ord(eoName));
LoadListBox;
end;
procedure TfrmMain.btnBySalaryClick(Sender: TObject);
begin
SortArray(FEmpArray, Ord(eoSalary));
LoadListBox;
end;
procedure TfrmMain.lvInventoryColumnClick(Sender: TObject;
Column: TListColumn);
begin
lvInventory.CustomSort(nil, Column.Index)
end;
procedure TfrmMain.lvInventoryCompare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
var
I1, I2: IUnknown;
begin
I1 := IUnknown(Item1.Data);
I2 := IUnknown(Item2.Data);
Compare := (I1 as ICompare).CompareWith(
(I2 as ICompare), Data);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -