cxdxgridconverter.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,743 行 · 第 1/5 页
PAS
1,743 行
var
AColumns: TList;
AColumn: TcxGridDBBandedColumn;
I: Integer;
AColor: Integer;
AFont: TFont;
AStyle: TcxCustomStyle;
begin
AColumns := TList.Create;
try
GetColumns(AColumns);
for I := 0 to AColumns.Count - 1 do
begin
AColumn := GetCXColumnByFieldName(Converter.GetStringProperty(AColumns[I], 'FieldName', ''));
AColor := Converter.GetIntegerProperty(TComponent(AColumns[I]), 'Color');
AFont := Converter.GetClassProperty(TComponent(AColumns[I]), 'Font') as TFont;
if ((AColor <> clWindow) and (AColor <> FColor)) or
(not DefaultFont(AFont) and not CompareFonts(AFont, FFont)) then
begin
AStyle := Converter.CreateStyleItem;
(AStyle as TcxStyle).Color := AColor;
(AStyle as TcxStyle).Font.Assign(AFont);
(AStyle as TcxStyle).TextColor := (AStyle as TcxStyle).Font.Color;
AColumn.Styles.Content := AStyle as TcxStyle;
end;
end;
finally
AColumns.Free;
end;
end;
procedure TcxRealConverterToBandedTableView.ImportBands;
var
ABands: TObject;
AcxGridBand: TcxGridBand;
I: Integer;
AFixed: string;
begin
cxGridView.Bands.Clear;
ABands := Converter.GetClassProperty(nil, 'Bands');
if ABands <> nil then
begin
if ABands is TCollection then
with TCollection(ABands) do
begin
for I := 0 to Count - 1 do
begin
AcxGridBand := cxGridView.Bands.Add;
if FBandHeaderWidth then
AcxGridBand.Width := 0
else
AcxGridBand.Width := Converter.GetIntegerProperty(Items[I], 'Width', AcxGridBand.Width);
AcxGridBand.Caption := Converter.GetStringProperty(Items[I], 'Caption', AcxGridBand.Caption);
AcxGridBand.Alignment := ConvertAlignment(Converter.GetEnumProperty(Items[I], 'Alignment'));
AcxGridBand.Visible := Converter.GetBooleanProperty(Items[I], 'Visible', AcxGridBand.Visible);
AcxGridBand.Options.Sizing := Converter.GetBooleanProperty(Items[I], 'Sizing', AcxGridBand.Options.Sizing);
AcxGridBand.Options.Moving := not Converter.GetBooleanProperty(Items[I], 'DisableDragging', AcxGridBand.Options.Moving);
AFixed := Converter.GetEnumProperty(Items[I], 'Fixed');
if AFixed = 'bfLeft' then
AcxGridBand.FixedKind := fkLeft
else if AFixed = 'bfNone' then
AcxGridBand.FixedKind := fkNone
else if AFixed = 'bfRight' then
AcxGridBand.FixedKind := fkRight;
end;
end;
end;
cxGridView.OptionsView.BandHeaders := Converter.GetBooleanProperty(nil, 'ShowBands', cxGridView.OptionsView.BandHeaders);
end;
procedure TcxRealConverterToBandedTableView.ImportBandsStyles;
var
ABandColor: Integer;
ABandFont: TFont;
AStyle: TcxCustomStyle;
begin
ABandColor := Converter.GetIntegerProperty(nil, 'BandColor');
ABandFont := Converter.GetClassProperty(nil, 'BandFont') as TFont;
if (ABandColor <> clBtnFace) or not DefaultFont(ABandFont) then
begin
AStyle := Converter.CreateStyleItem;
(AStyle as TcxStyle).Color := ABandColor;
(AStyle as TcxStyle).Font.Assign(ABandFont);
(AStyle as TcxStyle).TextColor := (AStyle as TcxStyle).Font.Color;
cxGridView.Styles.BandHeader := AStyle as TcxStyle;
end;
end;
procedure TcxRealConverterToBandedTableView.ImportSummaryGroups;
var
ASummaryGroups: TObject;
ASummaryItems: TObject;
AcxSummaryGroup: TcxDataSummaryGroup;
AcxSummaryItem: TcxGridDBTableSummaryItem;
I, J, K: Integer;
ASeparator: string;
AFieldName: string;
AIsDefaultGroup: Boolean;
AdxColumn: TComponent;
ABeginText, AEndText: string;
begin
ASeparator := Converter.GetStringProperty(nil, 'SummarySeparator', '');
ASummaryGroups := Converter.GetClassProperty(nil, 'SummaryGroups');
if ASummaryGroups <> nil then
begin
if ASummaryGroups is TCollection then
with TCollection(ASummaryGroups) do
begin
for I := 0 to Count - 1 do
begin
ABeginText := Converter.GetStringProperty(Items[I], 'BeginSummaryText', '');
AEndText := Converter.GetStringProperty(Items[I], 'EndSummaryText', '');
AIsDefaultGroup := Converter.GetBooleanProperty(Items[I], 'DefaultGroup', false);
if AIsDefaultGroup then
begin
cxGridView.DataController.Summary.DefaultGroupSummaryItems.BeginText := ABeginText;
cxGridView.DataController.Summary.DefaultGroupSummaryItems.EndText := AEndText;
cxGridView.DataController.Summary.DefaultGroupSummaryItems.Separator := ASeparator;
AcxSummaryGroup := nil;
end
else
begin
AcxSummaryGroup := cxGridView.DataController.Summary.SummaryGroups.Add;
AcxSummaryGroup.SummaryItems.BeginText := ABeginText;
AcxSummaryGroup.SummaryItems.EndText := AEndText;
AcxSummaryGroup.SummaryItems.Separator := ASeparator;
end;
if AcxSummaryGroup <> nil then
FcxSummaryGroups.AddObject(Converter.GetStringProperty(Items[I], 'Name', ''), AcxSummaryGroup);
ASummaryItems := Converter.GetClassProperty(Items[I], 'SummaryItems');
if ASummaryItems <> nil then
begin
if ASummaryItems is TCollection then
with TCollection(ASummaryItems) do
begin
for J := 0 to Count - 1 do
begin
if AIsDefaultGroup then
AcxSummaryItem := TcxGridDBTableSummaryItem(cxGridView.DataController.Summary.DefaultGroupSummaryItems.Add)
else
AcxSummaryItem := TcxGridDBTableSummaryItem(AcxSummaryGroup.SummaryItems.Add);
AcxSummaryItem.Column := nil;
AdxColumn := GetColumn(Converter.GetStringProperty(Items[J], 'ColumnName', ''));
if AdxColumn <> nil then
begin
AFieldName := Converter.GetStringProperty(AdxColumn, 'FieldName', '');
for K := 0 to cxGridView.ColumnCount - 1 do
if TcxGridDBBandedTableView(cxGridView).Columns[K].DataBinding.FieldName = AFieldName then
begin
AcxSummaryItem.Column := TcxGridDBBandedTableView(cxGridView).Columns[K];
AcxSummaryItem.Position := spFooter;
Break;
end;
end;
AcxSummaryItem.FieldName := Converter.GetStringProperty(Items[J], 'SummaryField', '');
AcxSummaryItem.Format := Converter.GetStringProperty(Items[J], 'SummaryFormat', AcxSummaryItem.Format);
AcxSummaryItem.Kind := GetSummaryKind(Converter.GetEnumProperty(Items[J], 'SummaryType'));
end;
end;
end;
end;
end;
end;
end;
procedure TcxRealConverterToBandedTableView.ImportSyncMode(const AValue: Boolean);
begin
TcxGridDBBandedTableView(cxGridView).DataController.DataModeController.SyncMode := AValue;
end;
function TcxRealConverterToBandedTableView.TestPreviewFieldName(
AIndex: Integer; const APreview: string): Boolean;
begin
Result := TcxGridDBBandedTableView(cxGridView).Columns[AIndex].DataBinding.FieldName = APreview;
end;
function TcxRealConverterToBandedTableView.GetCXColumnByFieldName(
const AFieldName: string): TcxGridDBBandedColumn;
var
I: Integer;
begin
Result := nil;
for I := 0 to cxGridView.ColumnCount - 1 do
begin
if TcxGridDBBandedTableView(cxGridView).Columns[I].DataBinding.FieldName = AFieldName then
begin
Result := TcxGridDBBandedTableView(cxGridView).Columns[I];
Break;
end;
end;
end;
function TcxRealConverterToBandedTableView.GetcxGridView: TcxGridBandedTableView;
begin
Result := Converter.cxGridView as TcxGridBandedTableView;
end;
procedure TcxRealConverterToBandedTableView.ImportDXOptionsCustomize;
var
AList: TStringList;
I: Integer;
begin
AList := TStringList.Create;
try
Converter.EnablePropertyException;
try
Converter.GetSetProperty(nil, 'OptionsCustomize', AList);
AList.Sort;
with cxGridView do
begin
OptionsCustomize.BandMoving := AList.Find('edgoBandMoving', I);
OptionsCustomize.BandSizing := AList.Find('edgoBandSizing', I);
OptionsCustomize.ColumnVertSizing := AList.Find('edgoColumnSizing', I);
OptionsCustomize.BandHiding := AList.Find('edgoExtCustomizing', I);
end;
except
on EcxUnknownProperty do;
end;
finally
AList.Free;
Converter.DisablePropertyException;
end;
inherited ImportDXOptionsCustomize;
end;
{ TcxDXGridConverter }
class function TcxDXGridConverter.GetSourceClassName: string;
begin
Result := 'TdxDBGrid';
end;
procedure TcxDXGridConverter.DoRealImport;
var
ARealConverter: TcxRealConverterToTableView;
begin
if GetGridViewClass = TcxGridDBTableView then
ARealConverter := TcxRealConverterToTableView.Create(Self)
else
ARealConverter := TcxRealConverterToBandedTableView.Create(Self);
try
ARealConverter.DoImport;
finally
ARealConverter.Free;
end;
end;
procedure TcxDXGridConverter.DoImportStyles;
var
ARealConverter: TcxRealConverterToTableView;
begin
if GetGridViewClass = TcxGridDBTableView then
ARealConverter := TcxRealConverterToTableView.Create(Self)
else
ARealConverter := TcxRealConverterToBandedTableView.Create(Self);
try
ARealConverter.DoImportStyles;
finally
ARealConverter.Free;
end;
end;
function TcxDXGridConverter.GetGridViewClass: TcxCustomGridViewClass;
var
ADXBands: TCollection;
begin
Result := TcxGridDBBandedTableView;
EnablePropertyException;
try
if not GetBooleanProperty(nil, 'ShowBands', False) then
begin
ADXBands := GetClassProperty(nil, 'Bands') as TCollection;
if ADXBands <> nil then
if ADXBands.Count = 1 then
begin
if GetStringProperty(ADXBands.Items[0], 'Caption', '') = '' then
Result := TcxGridDBTableView;
end;
end;
except
on EcxUnknownProperty do
Result := TcxGridDBTableView;
end;
DisablePropertyException;
end;
{ TcxDXGridLayoutConverter }
procedure TcxDXGridLayoutConverter.DoRealImport;
begin
if FdxDBGrid <> nil then
inherited DoRealImport;
end;
function TcxDXGridLayoutConverter.GetGridViewClass: TcxCustomGridViewClass;
begin
if FdxDBGrid <> nil then
Result := inherited GetGridViewClass
else
Result := TcxGridDBTableView;
end;
class function TcxDXGridLayoutConverter.GetSourceClassName: string;
begin
Result := 'TdxDBGridLayout';
end;
procedure TcxDXGridLayoutConverter.PostImport;
begin
FdxDBGrid.Free;
FdxDBGrid := nil;
if FComponent <> nil then
Source := FComponent;
end;
procedure TcxDXGridLayoutConverter.PreImport;
var
AReader: TcxDXGridLayoutDataReader;
AWriter: TWriter;
AStream: TStringStream;
ADummy: TcxDXGridLayoutDummy;
begin
FdxDBGrid := nil;
FComponent := nil;
if Intermediary = nil then
Exit;
ADummy := TcxDXGridLayoutDummy.Create(nil);
ADummy.Component := Source;
ADummy.Intermediary := Intermediary;
AStream := TStringStream.Create('');
try
AWriter := TWriter.Create(AStream, 65536);
try
AWriter.Root := Source.Owner;
AWriter.WriteComponent(Source);
finally
AWriter.Free;
end;
AReader := TcxDXGridLayoutDataReader.Create(AStream, 65536);
AStream.Position := 0;
try
AReader.BeginReferences;
AReader.ReadComponent(ADummy);
FdxDBGrid := ADummy.dxDBGrid;
FComponent := Source;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?