cxdxgridconverter.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,743 行 · 第 1/5 页

PAS
1,743
字号
{*******************************************************************}
{                                                                   }
{       Developer Express Cross Platform Component Library          }
{       ExpressQuantumGrid                                          }
{                                                                   }
{       Copyright (c) 2001-2008 Developer Express Inc.              }
{       ALL RIGHTS RESERVED                                         }
{                                                                   }
{   The entire contents of this file is protected by U.S. and       }
{   International Copyright Laws. Unauthorized reproduction,        }
{   reverse-engineering, and distribution of all or any portion of  }
{   the code contained in this file is strictly prohibited and may  }
{   result in severe civil and criminal penalties and will be       }
{   prosecuted to the maximum extent possible under the law.        }
{                                                                   }
{   RESTRICTIONS                                                    }
{                                                                   }
{   THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES           }
{   (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE    }
{   SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS   }
{   LICENSED TO DISTRIBUTE THE EXPRESSQUANTUMGRID AND ALL           }
{   ACCOMPANYING VCL AND CLX CONTROLS AS PART OF AN EXECUTABLE      }
{   PROGRAM ONLY.                                                   }
{                                                                   }
{   THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED      }
{   FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE        }
{   COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE       }
{   AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT  }
{   AND PERMISSION FROM DEVELOPER EXPRESS INC.                      }
{                                                                   }
{   CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON       }
{   ADDITIONAL RESTRICTIONS.                                        }
{                                                                   }
{*******************************************************************}
unit cxDXGridConverter;

interface

{$I cxVer.inc}

uses
  Forms, Classes, SysUtils, cxConverterFactory, cxGridConverter, cxGridCustomView,
  cxGridDBTableView, cxGridDBBandedTableView, cxGridBandedTableView, DB, Controls,
  cxCustomData, cxGraphics, cxGridCustomTableView, cxFilter, cxGrid, cxLookAndFeels,
  cxEdit, cxBlobEdit, cxButtonEdit, cxCalc, cxCalendar, cxCheckBox, cxCurrencyEdit,
  cxDropDownEdit, cxHyperLinkEdit, cxImage, cxImageComboBox, cxDBLookupComboBox,
  cxMaskEdit, cxMemo, cxMRUEdit, cxSpinEdit, cxTimeEdit, cxTextEdit, StdCtrls, Graphics,
  cxGridTableView, cxDBData, cxStyles, cxConverterUtils, cxCustomConverter,
  cxPropertiesConverters;

type
  { TcxDXGridConverter }
  TcxDXGridConverter = class(TcxCustomGridConverter)
  protected
    procedure DoRealImport; override;
    procedure DoImportStyles; override;
    function GetGridViewClass: TcxCustomGridViewClass; override;
  public
    class function GetSourceClassName: string; override;
  end;

  { TcxDXGridLayoutConverter }
  TcxDXGridLayoutConverter = class(TcxDXGridConverter)
  private
    FdxDBGrid: TComponent;
    FComponent: TComponent;
  protected
    procedure DoRealImport; override;
    function GetGridViewClass: TcxCustomGridViewClass; override;
    procedure PostImport; override;
    procedure PreImport; override;
    function TestIntermediary: Boolean; override;    
  public
    class function GetIntermediaryClassName: string; override;
    class function GetSourceClassName: string; override;
  end;

implementation

type
  { TcxRealConverterToTableView }
  TcxRealConverterToTableView = class
  private
    FColor: Integer;
    FFont: TFont;
    FHeaderColor: Integer;
    FHeaderFont: TFont;
    FcxSummaryGroups: TStringList;
    function DefaultPreviewFont(AFont: TFont): Boolean;
    function GetColumn(const AName: string): TComponent;
    procedure GetColumns(AColumns: TList);
    function GetCXColumnByFieldName(const AFieldName: string): TcxGridDBColumn;
    function GetcxGrid: TcxCustomGrid;
    function GetcxGridView: TcxGridTableView;
  protected
    Converter: TcxDXGridConverter;
    procedure AssignColumn(AColumn: TcxGridColumn; ADXColumn: TObject; AIndex: Integer); virtual;
    procedure AssignDXOptionsView(AList: TStringList); virtual;
    procedure AssignGrid; virtual;
    procedure AssignSummaryItem(AColumn: TcxGridColumn; ADXColumn: TObject); virtual;
    function CreateColumn: TcxGridColumn; virtual;
    function ConvertColumnShowEditButtons(const AStyle: string): TcxGridItemShowEditButtons;
    function GetSummaryKind(const AType: string): TcxSummaryKind;
    procedure ImportAutoDataSetFilter(const AValue: Boolean); virtual;
    procedure ImportColumn(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportColumns;
    procedure ImportColumnsStyles;
    procedure ImportColumnSummaryGroups; virtual;
    procedure ImportDXFilter;
    procedure ImportDXOptionsBehavior;
    procedure ImportDXOptionsCustomize; virtual;
    procedure ImportDXOptionsDB;
    procedure ImportDXOptionsView;
    procedure ImportGrid;
    procedure ImportGridStyles;
    procedure ImportPreview;
    procedure ImportPropertiesBlobEdit(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesButtonEdit(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesCalcEdit(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesCheckBox(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesComboBox(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesCurencyEdit(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesDateEdit(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesHyperLinkEdit(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesImage(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesImageComboBox(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesLookupComboBox(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesExLookupComboBox(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesMaskEdit(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesMemo(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesMRUEdit(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesPopupEdit(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesSpinEdit(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesTextEdit(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportPropertiesTimeEdit(AdxColumn: TObject; AcxColumn: TcxGridColumn);
    procedure ImportSummaryGroups; virtual;
    procedure ImportSyncMode(const AValue: Boolean); virtual;
    function TestPreviewFieldName(AIndex: Integer; const APreview: string): Boolean; virtual;
    property cxGrid: TcxCustomGrid read GetcxGrid;
    property cxGridView: TcxGridTableView read GetcxGridView;
  public
    constructor Create(AConverter: TcxDXGridConverter);
    destructor Destroy; override;
    procedure DoImport; virtual;
    procedure DoImportStyles; virtual;
  end;

  { TcxRealConverterToBandedTableView }
  TcxRealConverterToBandedTableView = class(TcxRealConverterToTableView)
  private
    FBandHeaderWidth: Boolean;
    function GetCXColumnByFieldName(const AFieldName: string): TcxGridDBBandedColumn;
    function GetcxGridView: TcxGridBandedTableView;
  protected
    procedure AssignColumn(AColumn: TcxGridColumn; ADXColumn: TObject; AIndex: Integer); override;
    procedure ImportAutoDataSetFilter(const AValue: Boolean); override;
    procedure ImportColumnSummaryGroups; override;
    procedure ImportDXOptionsCustomize; override;
    procedure AssignDXOptionsView(AList: TStringList); override;
    procedure AssignGrid; override;
    procedure AssignSummaryItem(AColumn: TcxGridColumn; ADXColumn: TObject); override;
    function CreateColumn: TcxGridColumn; override;
    procedure ImportColumnsStyles;
    procedure ImportBands;
    procedure ImportBandsStyles;
    procedure ImportSummaryGroups; override;
    procedure ImportSyncMode(const AValue: Boolean); override;
    function TestPreviewFieldName(AIndex: Integer; const APreview: string): Boolean; override;
    property cxGridView: TcxGridBandedTableView read GetcxGridView;
  public
    procedure DoImport; override;
    procedure DoImportStyles; override;
  end;

  { TcxDXGridLayoutDataReader }
  TcxDXGridLayoutDataReader = class(TReader)
  protected
    procedure SetName(Component: TComponent; var Name: string); override;
  end;

  { TcxDXGridLayoutDummy }
  TcxDXGridLayoutDummy = class(TComponent)
  private
    FComponent: TComponent;
    FdxDBGrid: TComponent;
    FIntermediary: TComponent;
    procedure ReadData(Stream: TStream);
  protected
    procedure DefineProperties(Filer: TFiler); override;
  public
    constructor Create(AOwner: TComponent); override;
    property Component: TComponent read FComponent write FComponent;
    property dxDBGrid: TComponent read FdxDBGrid write FdxDbGrid;
    property Intermediary: TComponent read FIntermediary write FIntermediary;
  end;

{ TcxRealConverterToTableView }

constructor TcxRealConverterToTableView.Create(AConverter: TcxDXGridConverter);
begin
  FcxSummaryGroups := TStringList.Create;
  Converter := AConverter;
end;

destructor TcxRealConverterToTableView.Destroy;
begin
  FcxSummaryGroups.Free;
  inherited Destroy;
end;

procedure TcxRealConverterToTableView.DoImport;
begin
  TcxGridDBTableView(cxGridView).DataController.DataSource :=
    Converter.GetClassProperty(nil, 'DataSource') as TDataSource;
  ImportDXOptionsView;
  ImportDXFilter;
  ImportColumns;
  TcxGridDBTableView(cxGridView).DataController.KeyFieldNames :=
    Converter.GetStringProperty(nil, 'KeyField', '');
  ImportGrid;
end;

procedure TcxRealConverterToTableView.DoImportStyles;
begin
  ImportGridStyles;
  ImportColumnsStyles;
end;

procedure TcxRealConverterToTableView.AssignColumn(AColumn: TcxGridColumn; ADXColumn: TObject;
  AIndex: Integer);
var
  ASortOrder: string;
begin
  with TcxGridDBColumn(AColumn) do
  begin
    DataBinding.FieldName := Converter.GetStringProperty(ADXColumn, 'FieldName', 'Field' + IntToStr(AIndex));
    Name := Converter.UniqueColumnName(AColumn, DataBinding.FieldName);
    Caption := Converter.GetStringProperty(ADXColumn, 'Caption', Caption);
    Visible := Converter.GetBooleanProperty(ADXColumn, 'Visible', Visible);
    GroupIndex := Converter.GetIntegerProperty(ADXColumn, 'GroupIndex', GroupIndex);
    Width := Converter.GetIntegerProperty(ADXColumn, 'Width', Width);
    ASortOrder := Converter.GetEnumProperty(ADXColumn, 'Sorted');
    if ASortOrder = 'csDown' then
      SortOrder := soDescending
    else if ASortOrder = 'csNone' then
      SortOrder := soNone
    else if ASortOrder = 'csUp' then
      SortOrder := soAscending;
    Options.Moving := not Converter.GetBooleanProperty(ADXColumn, 'DisableDragging', Options.Moving);
    Options.Editing := not Converter.GetBooleanProperty(ADXColumn, 'DisableEditor', Options.Editing);
    Options.Grouping := not Converter.GetBooleanProperty(ADXColumn, 'DisableGrouping', Options.Grouping);
    Options.Focusing := True;
    Options.Filtering := cxGridView.DataController.Filter.Active;
    Options.HorzSizing := Converter.GetBooleanProperty(ADXColumn, 'Sizing', Options.HorzSizing);
    HeaderAlignmentHorz := ConvertAlignment(Converter.GetEnumProperty(ADXColumn, 'HeaderAlignment'));
    MinWidth := Converter.GetIntegerProperty(ADXColumn, 'MinWidth', MinWidth);
    Tag := Converter.GetIntegerProperty(ADXColumn, 'Tag', Tag);
    AssignSummaryItem(AColumn, ADXColumn);
    ImportColumn(ADXColumn, AColumn);
  end;
end;

procedure TcxRealConverterToTableView.AssignDXOptionsView(AList: TStringList);
var
  I: Integer;
begin
  with cxGridView do
  begin
    OptionsView.Indicator := AList.Find('edgoIndicator', I);
    OptionsView.CellAutoHeight := AList.Find('edgoRowAutoHeight', I);
    OptionsView.HeaderAutoHeight := AList.Find('edgoAutoHeaderPanelHeight', I);
    OptionsView.ColumnAutoWidth := AList.Find('edgoAutoWidth', I);
    OptionsSelection.HideFocusRect := AList.Find('edgoHideFocusRect', I);
    OptionsSelection.CellSelect := not AList.Find('edgoRowSelect', I);
    OptionsSelection.InvertSelect := AList.Find('edgoInvertSelect', I);
    OptionsView.GroupFooters := gfVisibleWhenExpanded;
    Preview.Visible := AList.Find('edgoPreview', I);
    if AList.Find('edgoShowButtonAlways', I) then
      OptionsView.ShowEditButtons := gsebForFocusedRecord
    else
      OptionsView.ShowEditButtons := gsebNever;
  end;
end;

procedure TcxRealConverterToTableView.AssignGrid;
var
  ALookAndFeel: string;
begin
  with cxGridView do
  begin
    if Converter.GetBooleanProperty(nil, 'ShowGrid', False) then
      OptionsView.GridLines := glBoth
    else
      OptionsView.GridLines := glNone;
    OptionsView.Header := Converter.GetBooleanProperty(nil, 'ShowHeader', OptionsView.Header);
    OptionsView.NewItemRow := Converter.GetBooleanProperty(nil, 'ShowNewItemRow', OptionsView.NewItemRow);
    OptionsView.Footer := Converter.GetBooleanProperty(nil, 'ShowSummaryFooter', OptionsView.Footer);
    OptionsView.IndicatorWidth := Converter.GetIntegerProperty(nil, 'GrIndicatorWidth', OptionsView.IndicatorWidth);
    OptionsSelection.HideSelection := Converter.GetBooleanProperty(nil, 'HideSelection', OptionsSelection.HideSelection);
    Preview.LeftIndent := Converter.GetIntegerProperty(nil, 'IndentDesc', Preview.LeftIndent);
    ALookAndFeel := Converter.GetEnumProperty(nil, 'LookAndFeel');
    if ALookAndFeel = 'lfFlat' then
      cxGrid.LookAndFeel.Kind := lfFlat
    else if ALookAndFeel = 'lfStandard' then
      cxGrid.LookAndFeel.Kind := lfStandard
    else if ALookAndFeel = 'lfUltraFlat' then
      cxGrid.LookAndFeel.Kind := lfUltraFlat;
    OptionsView.GroupByBox := Converter.GetBooleanProperty(nil, 'ShowGroupPanel', OptionsView.GroupByBox);
  end;
end;

procedure TcxRealConverterToTableView.AssignSummaryItem(AColumn: TcxGridColumn; ADXColumn: TObject);
var
  ASummaryFooterType: string;
  AcxSummaryFooterItem: TcxGridDBTableSummaryItem;
begin
  ASummaryFooterType := Converter.GetEnumProperty(ADXColumn, 'SummaryFooterType', 'cstNone');
  if ASummaryFooterType <> 'cstNone' then
  begin
    AcxSummaryFooterItem := TcxGridDBTableSummaryItem(
      TcxGridDBTableView(cxGridView).DataController.Summary.FooterSummaryItems.Add);
    AcxSummaryFooterItem.FieldName := Converter.GetStringProperty(ADXColumn, 'SummaryFooterField', '');
    AcxSummaryFooterItem.Format := Converter.GetStringProperty(ADXColumn, 'SummaryFooterFormat', AcxSummaryFooterItem.Format);
    AcxSummaryFooterItem.Kind := GetSummaryKind(ASummaryFooterType);
    AcxSummaryFooterItem.Column := TcxGridDBColumn(AColumn);
  end;
end;

function TcxRealConverterToTableView.CreateColumn: TcxGridColumn;
begin
  Result := TcxGridDBTableView(cxGridView).CreateColumn;
end;

procedure TcxRealConverterToTableView.ImportAutoDataSetFilter(const AValue: Boolean);
begin
  TcxGridDBTableView(cxGridView).DataController.Filter.AutoDataSetFilter := AValue; 
end;

procedure TcxRealConverterToTableView.ImportColumn(AdxColumn: TObject; AcxColumn: TcxGridColumn);
begin
  if AdxColumn.ClassName = 'TdxDBGridColumn' then
    ImportPropertiesTextEdit(AdxColumn, AcxColumn)
  else if AdxColumn.ClassName = 'TdxDBGridMaskColumn' then
    ImportPropertiesMaskEdit(AdxColumn, AcxColumn)
  else if AdxColumn.ClassName = 'TdxDBGridButtonColumn' then
    ImportPropertiesButtonEdit(AdxColumn, AcxColumn)
  else if AdxColumn.ClassName = 'TdxDBGridDateColumn' then
    ImportPropertiesDateEdit(AdxColumn, AcxColumn)
  else if AdxColumn.ClassName = 'TdxDBGridCheckColumn' then

⌨️ 快捷键说明

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