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

📄 office11grouprowstyledemomain.pas

📁 DevExpress ExpressQuantumGrid Suite v5.9 Full Source
💻 PAS
字号:
unit Office11GroupRowStyleDemoMain;

{$I ..\..\cxVer.inc}

interface

uses
  Windows, Forms, Messages, SysUtils, Classes, ActnList, ImgList, Controls, Menus,
  StdCtrls, cxButtons, cxCheckBox, cxContainer, cxEdit, cxTextEdit,
  cxMaskEdit, cxSpinEdit, ExtCtrls, cxGridLevel, cxGridCustomTableView,
  cxGridCardView, cxGridDBCardView, cxClasses, cxControls,
  cxGridCustomView, cxGrid, ComCtrls, cxStyles, cxCustomData, cxGraphics,
  cxFilter, cxData, DB, cxDBData, cxDataStorage, cxLookAndFeelPainters,
  cxLookAndFeels, cxHyperLinkEdit, cxImageComboBox, cxDBLookupComboBox,
  cxMemo, cxGridTableView;

type
  TOffice11GroupRowStyleDemoMainForm = class(TForm)
    mmMain: TMainMenu;
    miAbout: TMenuItem;
    miFile: TMenuItem;
    miOptions: TMenuItem;
    miExit: TMenuItem;
    sbMain: TStatusBar;
    lbDescrip: TLabel;
    LookAndFeelController: TcxLookAndFeelController;
    imgImportance: TImageList;
    Grid: TcxGrid;
    tvMail: TcxGridTableView;
    tvMailImportance: TcxGridColumn;
    tvMailIcon: TcxGridColumn;
    tvMailAttachment: TcxGridColumn;
    tvMailFrom: TcxGridColumn;
    tvMailSubject: TcxGridColumn;
    tvMailReceived: TcxGridColumn;
    tvMailSent: TcxGridColumn;
    lvMail: TcxGridLevel;
    miOffice11GroupRowStyle: TMenuItem;
    miAlwaysExpandedGroups: TMenuItem;
    miGroupBySorting: TMenuItem;
    procedure miAboutClick(Sender: TObject);
    procedure miExitClick(Sender: TObject);
    procedure tvMailDataControllerCompare(
      ADataController: TcxCustomDataController; ARecordIndex1,
      ARecordIndex2, AItemIndex: Integer; const V1, V2: Variant;
      var Compare: Integer);
    procedure tvMailSentGetDisplayText(Sender: TcxCustomGridTableItem;
      ARecord: TcxCustomGridRecord; var AText: String);
    procedure tvMailStylesGetContentStyle(
      Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
      AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
    procedure miOffice11GroupRowStyleClick(Sender: TObject);
    procedure miAlwaysExpandedGroupsClick(Sender: TObject);
    procedure miGroupBySortingClick(Sender: TObject);
  private
    procedure AddRecordIntoTable(ARecordIndex: Integer);
    procedure AddRecordsIntoTable;
    function GetDateValueIndex(ADate: TDateTime): Integer;
    function GetGroupDateDisplayText(ADate: TDateTime): string;
    function tblPersons: TDataSet;
  public
    constructor Create(AOwner: TComponent); override;
  end;

var
  Office11GroupRowStyleDemoMainForm: TOffice11GroupRowStyleDemoMainForm;

implementation

{$R *.dfm}

uses
{$IFDEF DELPHI6}
  DateUtils,
{$ENDIF}
  Office11GroupRowStyleDemoData, Dialogs, AboutDemoForm, 
  cxVariants;

const
  DateValueIndexToday = 0;
  DateValueIndexYesterday = 1;
  DateValueIndexLastWeek = 2;
  DateValueIndexTwoWeeksAgo = 3;
  DateValueIndexOlder = 4;

{$IFNDEF DELPHI6}
// DateUtils

const
  HoursPerDay   = 24;
  MinsPerDay    = HoursPerDay * 60;

function IncDay(const AValue: TDateTime;
  const ANumberOfDays: Integer = 1): TDateTime;
begin
  Result := AValue + ANumberOfDays;
end;

function IncHour(const AValue: TDateTime;
  const ANumberOfHours: Int64): TDateTime;
begin
  Result := (AValue * HoursPerDay + ANumberOfHours) / HoursPerDay;
end;

function IncMinute(const AValue: TDateTime;
  const ANumberOfMinutes: Int64): TDateTime;
begin
  Result := (AValue * MinsPerDay + ANumberOfMinutes) / MinsPerDay;
end;

function DaysBetween(const ANow, AThen: TDateTime): Integer;
begin
  if ANow > AThen then
    Result := Trunc(ANow - AThen)
  else
    Result := Trunc(AThen - ANow);
end;
{$ENDIF}


procedure TOffice11GroupRowStyleDemoMainForm.miAboutClick(Sender: TObject);
begin
  ShowAboutDemoForm;
end;

procedure TOffice11GroupRowStyleDemoMainForm.miExitClick(Sender: TObject);
begin
  Close;
end;

procedure TOffice11GroupRowStyleDemoMainForm.AddRecordIntoTable(ARecordIndex: Integer);

  function GetImportance: Integer;
  begin
    Result := Random(10);
    if(Result > 2) then
      Result := 1;
  end;

  function GetIcon: Integer;
  begin
    Result := Random(4);
    if Result > 1 then
      Result := 1;
  end;

  function GetSent: TDateTime;
  begin
    Result := Now;
    if(Random(6) = 1) then exit;
    Result := IncDay(Result, -Random(50));
    Result := IncHour(Result, -Random(4));
    Result := IncMinute(Result, -Random(60));
  end;

  function GetReceived(ASent: TDateTime): TDateTime;
  begin
    Result := IncMinute(ASent, 10 + Random(120));
  end;

  function GetSubject: string;
  const
    Count = 21;
    Subjects : array[0..Count - 1] of string = (
      'Implementing the Developer Express MasterView control into an Accounting System.',
      'Web Edition: Data Entry Page. The date validation issue.',
      'Payables Due Calculator. It is ready for testing.',
      'Web Edition: Search Page. It is ready for testing.',
      'Main Menu: Duplicate Items. Somebody has to review all the menu items in the system.',
      'Receivables Calculator. Where can I find the complete specs',
      'Ledger: Inconsistency. Please fix it.',
      'Receivables Printing. It is ready for testing.',
      'Screen Redraw. Somebody has to look at it.',
      'Email System. What library are we going to use?',
      'Adding New Vendors Fails. This module doesn''t work properly!',
      'History. Will we track the sales history in our system?',
      'Main Menu: Add a File menu. File menu is missing!!!',
      'Currency Mask. The current currency mask is extremely inconvenient.',
      'Drag & Drop. In the schedule module drag & drop is not available.',
      'Data Import. What competitors databases will we support?',
      'Reports. The list of incomplete reports.',
      'Data Archiving. This features is still missing in our application',
      'Email Attachments. How to add multiple attachments? I can''t see how to do it.',
      'Check Register. We are using different paths for different modules.',
      'Data Export. Our customers asked for export into Excel');

  begin
    Result := Subjects[Random(Count)];
  end;

var
  ASent: TDateTime;
begin
  tvMail.DataController.SetValue(ARecordIndex, tvMailImportance.Index, GetImportance);
  tvMail.DataController.SetValue(ARecordIndex, tvMailIcon.Index, GetIcon);
  tvMail.DataController.SetValue(ARecordIndex, tvMailAttachment.Index, GetIcon);
  tvMail.DataController.SetValue(ARecordIndex, tvMailFrom.Index,
    Office11GroupRowStyleDemoDataDM.tblPersonsFullName.Text);
  tvMail.DataController.SetValue(ARecordIndex, tvMailSubject.Index, GetSubject);
  ASent := GetSent;
  tvMail.DataController.SetValue(ARecordIndex, tvMailReceived.Index, GetReceived(ASent));
  tvMail.DataController.SetValue(ARecordIndex, tvMailSent.Index, ASent);
end;

procedure TOffice11GroupRowStyleDemoMainForm.AddRecordsIntoTable;
const
  RecordCount = 5;
var
  J: Integer;
begin
  Randomize;
  tvMail.BeginUpdate;
  tblPersons.DisableControls;
  try
    tvMail.DataController.RecordCount := tblPersons.RecordCount * RecordCount;
    tblPersons.First;
    while not tblPersons.Eof do
    begin
      for J := 0 to RecordCount - 1 do
        AddRecordIntoTable((tblPersons.RecNo - 1) * RecordCount + J);
      tblPersons.Next;
    end;
  finally
    tblPersons.EnableControls;
    tvMail.EndUpdate;
  end;
end;

constructor TOffice11GroupRowStyleDemoMainForm.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  AddRecordsIntoTable;
end;

function TOffice11GroupRowStyleDemoMainForm.GetDateValueIndex(ADate: TDateTime): Integer;
var
  ADaysBetween: Integer;
begin
  ADaysBetween := DaysBetween(Date, Trunc(ADate));
  Result := DateValueIndexOlder;
  if ADaysBetween = 0 then
    Result := DateValueIndexToday
  else
    if ADaysBetween = 1 then
      Result := DateValueIndexYesterday
    else
      if ADaysBetween < 7 then
        Result := DateValueIndexLastWeek
      else
        if ADaysBetween < 14 then
          Result := DateValueIndexTwoWeeksAgo;
end;

function TOffice11GroupRowStyleDemoMainForm.GetGroupDateDisplayText(ADate: TDateTime): string;
const
   DisplayText: Array[DateValueIndexToday..DateValueIndexOlder] of String =
    ('Today', 'Yesterday', 'Last Week', 'Two Weeks Ago', 'Older');
begin
  Result := DisplayText[GetDateValueIndex(ADate)];
end;

function TOffice11GroupRowStyleDemoMainForm.tblPersons: TDataSet;
begin
  Result := Office11GroupRowStyleDemoDataDM.tblPersons;
end;

procedure TOffice11GroupRowStyleDemoMainForm.tvMailDataControllerCompare(
  ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2,
  AItemIndex: Integer; const V1, V2: Variant; var Compare: Integer);
begin
  if ((AItemIndex = tvMailSent.Index) and (tvMailSent.GroupIndex <> -1)) or
    ((AItemIndex = tvMailReceived.Index) and (tvMailReceived.GroupIndex <> -1)) then
    Compare := GetDateValueIndex(V1) - GetDateValueIndex(V2)
  else
    Compare := VarCompare(V1, V2);
end;

procedure TOffice11GroupRowStyleDemoMainForm.tvMailSentGetDisplayText(
  Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
  var AText: String);
begin
  if ARecord is TcxGridGroupRow then
    AText := GetGroupDateDisplayText(ARecord.Values[Sender.Index]);
end;

procedure TOffice11GroupRowStyleDemoMainForm.tvMailStylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
begin
  if ARecord is TcxGridDataRow then
  begin
    if ARecord.Values[tvMailIcon.Index] = 0 then
      AStyle := Office11GroupRowStyleDemoDataDM.UnreadStyle;
  end;
end;

procedure TOffice11GroupRowStyleDemoMainForm.miOffice11GroupRowStyleClick(
  Sender: TObject);
begin
  TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked;
  tvMail.OptionsView.GroupRowStyle :=
    TcxGridGroupRowStyle(TMenuItem(Sender).Checked);
end;

procedure TOffice11GroupRowStyleDemoMainForm.miAlwaysExpandedGroupsClick(
  Sender: TObject);
begin
  TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked;
  if TMenuItem(Sender).Checked then
    tvMail.DataController.Options :=
      tvMail.DataController.Options + [dcoGroupsAlwaysExpanded]
  else
    tvMail.DataController.Options :=
      tvMail.DataController.Options - [dcoGroupsAlwaysExpanded];
end;

procedure TOffice11GroupRowStyleDemoMainForm.miGroupBySortingClick(
  Sender: TObject);
begin
  TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked;
  tvMail.OptionsCustomize.GroupBySorting := TMenuItem(Sender).Checked;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -