⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainform.pas

📁 delphi com深入编程,非常有收藏价值
💻 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 + -