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