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 + -
显示快捷键?