stylessimpledemostylesdialog.pas

来自「delphi的的三方控件」· PAS 代码 · 共 207 行

PAS
207
字号
unit StylesSimpleDemoStylesDialog;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, cxStyles, cxTextEdit, cxInplaceContainer, cxControls,
  cxButtonEdit, cxClasses, StdCtrls, cxMRUEdit, cxMaskEdit,
  cxDBLookupComboBox, cxCurrencyEdit, cxMemo, cxCheckBox,
  cxLookAndFeelPainters, cxButtons, cxGraphics, cxCustomData, cxVGrid,
  cxEdit, cxEditRepositoryItems, ActnList;

type
  TStyles = (sBackground, sCategory, sContent, sHeader, sInactive, sIncSearch, sSelection);

  TStylesSimpleDemoStylesDialogForm = class(TForm)
    btnRestore: TcxButton;
    cxVerticalGrid: TcxVerticalGrid;
    cxEditRepository: TcxEditRepository;
    cxEditRepositoryMRUItem: TcxEditRepositoryMRUItem;
    ActionList1: TActionList;
    cxVerticalGridBackground: TcxEditorRow;
    cxVerticalGridCategory: TcxEditorRow;
    cxVerticalGridContent: TcxEditorRow;
    cxVerticalGridHeader: TcxEditorRow;
    cxVerticalGridInactive: TcxEditorRow;
    cxVerticalGridIncSearch: TcxEditorRow;
    cxVerticalGridSelection: TcxEditorRow;
    cxVerticalGridCaption: TcxMultiEditorRow;
    cxStyleRepository1: TcxStyleRepository;
    cxVerticalGridStyleSheetDevExpress: TcxVerticalGridStyleSheet;
    cxStyle1: TcxStyle;
    cxStyle2: TcxStyle;
    cxStyle3: TcxStyle;
    cxStyle4: TcxStyle;
    cxStyle5: TcxStyle;
    cxStyle6: TcxStyle;
    cxStyle7: TcxStyle;
    procedure FormCreate(Sender: TObject);
    procedure OnButtonClick(Sender: TObject);
    procedure btnRestoreClick(Sender: TObject);
    procedure OnEditValueChanged(Sender: TObject);
    procedure cxVerticalGridStylesGetContentStyle(Sender: TObject;
      AEditProp: TcxCustomEditorRowProperties; AFocused: Boolean;
      ARecordIndex: Integer; var AStyle: TcxStyle);
    procedure cxVerticalGridStylesGetHeaderStyle(Sender: TObject;
      ARow: TcxCustomRow; var AStyle: TcxStyle);
  private
    FRestoreDefaults: TNotifyEvent;
    function GetSelectedStyle: TcxStyle;
    procedure RefreshBinding;
    function GetCurrentStyle(AStyleID: TStyles): TcxStyle;
    procedure SetCurrentStyle(const AStyle: TcxStyle; AStyleID: TStyles);
  public
    property RestoreDefaults: TNotifyEvent read FRestoreDefaults write FRestoreDefaults;
  end;

var
  StylesSimpleDemoStylesDialogForm: TStylesSimpleDemoStylesDialogForm;

implementation

uses StylesSimpleDemoData, StylesSimpleDemoEdit, StylesSimpleDemoMain;

{$R *.dfm}

function ChangeStyleBinding(ACallback: TNotifyEvent): Boolean;
begin
  with TStylesSimpleDemoStylesDialogForm.Create(Application) do
  try
    RestoreDefaults := ACallback;
    Result := ShowModal = mrOK;
  finally
    Free;
  end;
end;

procedure TStylesSimpleDemoStylesDialogForm.FormCreate(Sender: TObject);
var
  i: integer;
  AStyle: TcxStyle;
begin
  OnClose := StylesSimpleDemoMainForm.StylesFormClosed;
  with cxEditRepositoryMRUItem.Properties.LookupItems, StylesSimpleDemoDataDM do
  begin
    Clear;
    for i := 0 to StyleRepository.Count - 1  do
    begin
       AStyle := TcxStyle(StyleRepository[i]);
       AddObject(AStyle.Name, AStyle);
    end;
  end;
  RefreshBinding;
end;

procedure TStylesSimpleDemoStylesDialogForm.OnButtonClick(
  Sender: TObject);
begin
  ChangeStyle(GetSelectedStyle);
end;

procedure TStylesSimpleDemoStylesDialogForm.btnRestoreClick(
  Sender: TObject);
begin
  if Assigned(FRestoreDefaults) then FRestoreDefaults(Sender);
  RefreshBinding;
end;

procedure TStylesSimpleDemoStylesDialogForm.RefreshBinding;
var
  I: Integer;
  AStyle: TcxStyle;
begin
  for i:=1 to cxVerticalGrid.Rows.Count - 1 do
  begin
    AStyle := GetCurrentStyle(TStyles(i-1));
    if AStyle <> nil then
      TcxEditorRow(cxVerticalGrid.Rows[i]).Properties.Value :=
        AStyle.Name;
  end;
end;

function TStylesSimpleDemoStylesDialogForm.GetSelectedStyle: TcxStyle;
var
  ItemIndex: Integer;
begin
  ItemIndex := cxEditRepositoryMRUItem.Properties.LookupItems.
    IndexOf(TcxEditorRow(cxVerticalGrid.FocusedRow).Properties.Value);
  Result := TcxStyle(cxEditRepositoryMRUItem.Properties.LookupItems.Objects[ItemIndex]);
end;

function TStylesSimpleDemoStylesDialogForm.GetCurrentStyle(AStyleID: TStyles): TcxStyle;
begin
  Result := nil;
  with StylesSimpleDemoMainForm do
  case AStyleID of
    sBackground:
      Result := cxDBVerticalGrid.Styles.Background;
    sCategory:
      Result := cxDBVerticalGrid.Styles.Category;
    sHeader:
      Result := cxDBVerticalGrid.Styles.Header;
    sContent:
      Result := cxDBVerticalGrid.Styles.Content;
    sInactive:
      Result := cxDBVerticalGrid.Styles.Inactive;
    sIncSearch:
      Result := cxDBVerticalGrid.Styles.IncSearch;
    sSelection:
       Result := cxDBVerticalGrid.Styles.Selection;
  end;
end;

procedure TStylesSimpleDemoStylesDialogForm.SetCurrentStyle(
  const AStyle: TcxStyle; AStyleID: TStyles);
begin
  with StylesSimpleDemoMainForm do
    case AStyleID of
      sBackground:
        cxDBVerticalGrid.Styles.Background := AStyle;
      sCategory:
        cxDBVerticalGrid.Styles.Category := AStyle;
      sHeader:
        cxDBVerticalGrid.Styles.Header := AStyle;
      sContent:
        cxDBVerticalGrid.Styles.Content := AStyle;
      sInactive:
        cxDBVerticalGrid.Styles.Inactive := AStyle;
      sIncSearch:
        cxDBVerticalGrid.Styles.IncSearch := AStyle;
      sSelection:
        cxDBVerticalGrid.Styles.Selection := AStyle;
    end;
end;

procedure TStylesSimpleDemoStylesDialogForm.OnEditValueChanged(
  Sender: TObject);
var
  ItemIndex: Integer;
  AStyle: TcxStyle;
begin
  ItemIndex := cxEditRepositoryMRUItem.Properties.LookupItems.IndexOf(TcxCustomMRUEdit(Sender).EditValue);
  AStyle := TcxStyle(cxEditRepositoryMRUItem.Properties.LookupItems.Objects[ItemIndex]);
  SetCurrentStyle(AStyle, TStyles(cxVerticalGrid.FocusedRow.VisibleIndex - 1));
end;

procedure TStylesSimpleDemoStylesDialogForm.cxVerticalGridStylesGetContentStyle(
  Sender: TObject; AEditProp: TcxCustomEditorRowProperties;
  AFocused: Boolean; ARecordIndex: Integer; var AStyle: TcxStyle);
begin
  if TcxEditorRow(AEditProp.Row).VisibleIndex = 0 then
    AStyle := cxVerticalGridStyleSheetDevExpress.Styles.Category
  else
    AStyle := cxVerticalGridStyleSheetDevExpress.Styles.Content;
end;

procedure TStylesSimpleDemoStylesDialogForm.cxVerticalGridStylesGetHeaderStyle(
  Sender: TObject; ARow: TcxCustomRow; var AStyle: TcxStyle);
begin
  if ARow.VisibleIndex = 0 then
    AStyle := cxVerticalGridStyleSheetDevExpress.Styles.Category
  else
    AStyle := cxVerticalGridStyleSheetDevExpress.Styles.Header;
end;

end.

⌨️ 快捷键说明

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