cxgridexportlink.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,695 行 · 第 1/5 页
PAS
1,695 行
AExportItem: TcxExportVisualItem;
begin
AHeight := Viewinfo.RecordsViewInfo.GroupRowHeight;
R := Rect(0, ATop, RecordWidth, ATop + AHeight);
R.Left := AddIndents(ATop, AHeight, ARow, True);
Styles.GetGroupParams(ARow, ARow.Level, AViewParams);
AddVisualItemEx(R, '', AViewParams, taLeftJustify, [], clDefault, True);
if IsSummaryUnderColumns and ARow.GetGroupSummaryInfo(AItems, AValues) then
begin
GroupSummaryItemsList.Clear;
GroupSummaryItemsList.Capacity := 1024;
for I := 0 to AItems.Count - 1 do
ProcessGroupSummaryItem(ARow, AValues, I, R, AViewParams);
GroupSummaryItemsList.Sort(@cxCompareGroupSummaryItems);
ProcessGroupSummaryItems(ARow, R);
for I := 0 to GroupSummaryItemCount - 1 do
begin
AItem := GroupSummaryItems[I];
AExportItem := AddVisualItemEx(AItem.Bounds, AItem.Text, AItem.ViewParams,
AItem.Alignment, GridLines - [bLeft, bRight], GridLineColor, False);
if UseNativeFormat and not VarIsNull(AItem.Value) then
begin
AExportItem.Data2 := AItem.SummaryItem;
AExportItem.Value := AItem.Value;
end;
end;
end
else
begin
S := ARow.DisplayText;
TcxCustomGridTableItemAccess.DoGetDisplayText(ARow.GroupedColumn, ARow, S);
AddVisualItemEx(R, S, AViewParams,
taLeftJustify, GridLines, GridLineColor, False);
end;
Inc(ATop, AHeight);
end;
function TcxGridTableViewExport.AddIndents(ATop, ARowHeight: Integer;
ARow: TcxCustomGridRecord; AHasButton: Boolean; ALevel: Integer = -1): Integer;
var
R: TRect;
I: Integer;
AText: string;
AStyle: TcxCacheCellStyle;
AGridLines: TcxBorders;
AViewParams: TcxViewParams;
begin
if ALevel = -1 then
ALevel := ARow.Level - 1 + Byte(AHasButton);
while (ALevel >= 0) and (ALevel < ARow.Level) do
ARow := TcxGridDataRow(ARow).ParentRecord;
R := Rect(ALevel * ViewInfo.LevelIndent, ATop,
(ALevel + 1) * ViewInfo.LevelIndent, ATop + ARowHeight);
AGridLines := GridLines;
if not ARow.IsLast or AHasButton and ARow.Expanded then
AGridLines := GridLines - [bBottom];
for I := ALevel downto 0 do
begin
AText := '';
if AHasButton and (I = ALevel) then
begin
AText := ButtonTexts[ARow.Expanded];
AStyle := GetExpandButtonParams(AGridLines);
end
else
begin
if ARow is TcxGridGroupRow then
Styles.GetGroupParams(ARow, I, AViewParams)
else
Styles.GetContentParams(ARow, nil, AViewParams);
ViewParamsToExportStyle(AViewParams, AStyle, taLeftJustify, AGridLines - [bTop], GridLineColor);
end;
ARow := ARow.ParentRecord;
AddVisualItemEx(R, AText, Provider.RegisterStyle(AStyle), False);
OffsetRect(R, -ViewInfo.LevelIndent, 0);
end;
Result := (ALevel + 1) * ViewInfo.LevelIndent;
end;
procedure TcxGridTableViewExport.AddMasterDataRow(
var ATop, ALeft: Integer; ARow: TcxGridMasterDataRow);
var
ABounds: TRect;
begin
AddDataRow(ATop, ALeft, ARow);
if not ARow.Expanded or not InternalProviderSupported then Exit;
ALeft := AddIndents(ATop, DefaultRowHeight, ARow, False, ARow.Level);
ABounds := Rect(ALeft, ATop, RecordWidth, ATop + DefaultRowHeight);
with AddVisualDataItem(ABounds, DefaultStyleIndex, ARow, nil) do
Hidden := True;
ATop := ABounds.Bottom;
end;
procedure TcxGridTableViewExport.AddRowFooter(
var ATop, ALeft: Integer; ADataLevel, ALevel: Integer; ARow: TcxCustomGridRecord);
var
AValues: PVariant;
AItems: TcxDataSummaryItems;
begin
ALeft := 0;
while ARow.Level > ADataLevel do
ARow := ARow.ParentRecord;
if DataController.Summary.GetGroupSummaryInfo(ARow.Index, AItems, AValues) then
begin
AddFooterCells(ATop, ALeft, TcxCustomGridRow(ARow),
ALevel, ADataLevel, AItems, AValues, False);
end;
end;
procedure TcxGridTableViewExport.AddRowFooters(
var ATop, ALeft: Integer; ARow: TcxCustomGridRecord);
var
ALevel, ARealLevel: Integer;
begin
for ALevel := 0 to ARow.Level do
begin
ARealLevel := ALevel;
if HasFooter(ARow, ARealLevel) then
AddRowFooter(ATop, ALeft, ARealLevel, ARow.Level - ALevel, ARow);
end;
end;
procedure TcxGridTableViewExport.AddRowPreview(
var ATop, ALeft: Integer; ARow: TcxCustomGridRecord);
var
R: TRect;
AColumn: TcxGridColumn;
AParams: TcxViewParams;
begin
AColumn := GridView.Preview.Column;
AColumn.Styles.GetContentParams(ARow, AParams);
R := Rect(ALeft, ATop, RecordWidth, ATop + GetPreviewHeight(ARow));
AddVisualItemEx(R, VarToStr(GetViewItemValue(ARow, AColumn)), AParams,
AColumn.GetProperties.Alignment.Horz, GridLines, GridLineColor);
ATop := R.Bottom;
end;
function TcxGridTableViewExport.AddVisualItem(
AItemClass: TcxExportVisualItemClass; const ABounds: TRect): TcxExportVisualItem;
begin
Result := AItemClass.Create();
Result.Style := -1;
Result.Bounds := ABounds;
with ABounds do
begin
Columns.AddPairs(Left, Right);
Rows.AddPairs(Top, Bottom);
end;
with VisualItemsList do
if Capacity - Count < 2 then Capacity := Count * 2;
VisualItemsList.Add(Result);
end;
function TcxGridTableViewExport.AddVisualDataItem(
const AItemBounds: TRect; AStyle: Integer;
ARecord: TcxCustomGridRecord; AColumn: TcxGridColumn): TcxExportVisualItem;
begin
Result := AddVisualItem(TcxExportVisualItem, AItemBounds);
Result.Style := AStyle;
Result.Data := ARecord;
Result.Data2 := AColumn;
end;
function TcxGridTableViewExport.AddVisualItemEx(
const AItemBounds: TRect; const ADisplayText: string; const AViewParams: TcxViewParams;
AAlignment: TAlignment; ABorders: TcxBorders; ABorderColor: TColor = clDefault;
AIsBackground: Boolean = False): TcxExportVisualItem;
var
ASide: TcxBorder;
AStyle: TcxCacheCellStyle;
begin
ViewParamsToExportStyle(AViewParams, AStyle, AAlignment);
if ABorderColor <> clDefault then
begin
ABorderColor := ColorToRgb(ABorderColor);
for ASide := bLeft to bBottom do
if ASide in ABorders then
begin
AStyle.Borders[Integer(ASide)].IsDefault := False;
AStyle.Borders[Integer(ASide)].Color := ABorderColor;
AStyle.Borders[Integer(ASide)].Width := 1;
end;
end;
Result := AddVisualItemEx(AItemBounds, ADisplayText,
Provider.RegisterStyle(AStyle), AIsBackground);
end;
function TcxGridTableViewExport.AddVisualItemEx(
const AItemBounds: TRect; const ADisplayText: string;
AStyle: Integer; AIsBackground: Boolean = False): TcxExportVisualItem;
begin
Result := AddVisualItem(TcxExportVisualItem, AItemBounds);
Result.Bounds := AItemBounds;
Result.IsBackground := AIsBackground;
Result.DisplayText := ADisplayText;
Result.Style := AStyle;
end;
function TcxGridTableViewExport.AddPattern(const ABounds: TRect;
AData: TObject; AOffset: Integer = 0): TcxExportVisualItem;
begin
Result := TcxExportVisualItem.Create;
Result.Bounds := ABounds;
Result.Data := AData;
Result.Data2 := TObject(AOffset);
PatternsList.Add(Result);
end;
function TcxGridTableViewExport.CanShowMultiSummaries(AIsFooter: Boolean): Boolean;
begin
if AIsFooter then
Result := OptionsView.CanShowFooterMultiSummaries
else
Result := OptionsView.CanShowGroupFooterMultiSummaries;
end;
procedure TcxGridTableViewExport.CreateContent(var ATop, ALeft: Integer);
var
I: Integer;
ARow: TcxCustomGridRecord;
begin
for I := 0 to RecordCount - 1 do
begin
ALeft := 0;
ARow := Records[I];
if ARow is TcxGridGroupRow then
AddGroupRow(ATop, ALeft, TcxGridGroupRow(ARow))
else
if ARow is TcxGridMasterDataRow then
AddMasterDataRow(ATop, ALeft, TcxGridMasterDataRow(ARow))
else
if ARow is TcxGridDataRow then
AddDataRow(ATop, ALeft, TcxGridDataRow(ARow));
AddRowFooters(ATop, ALeft, ARow);
end;
end;
procedure TcxGridTableViewExport.CreateFooter(var ATop, ALeft: Integer);
begin
if not OptionsView.Footer then Exit;
AddFooterCells(ATop, ALeft, nil, 0, -1,
DataController.Summary.FooterSummaryItems, nil, True);
end;
procedure TcxGridTableViewExport.CreateHeader(var ATop, ALeft: Integer);
begin
FRecordWidth := ViewInfo.DataWidth;
ProduceHeadersContainer(ATop, ALeft, ViewInfo.HeaderViewInfo);
end;
procedure TcxGridTableViewExport.CreateExportCells;
var
ATop, ALeft: Integer;
begin
ATop := 0;
ALeft := 0;
CreateHeader(ATop, ALeft);
CreateContent(ATop, ALeft);
ALeft := 0;
CreateFooter(ATop, ALeft);
MergeCells;
end;
procedure TcxGridTableViewExport.CreateRecordFromPattern(
var ATop, ALeft: Integer; ARecord: TcxCustomGridRecord);
var
R: TRect;
I: Integer;
APattern: TcxExportVisualItem;
AViewParams: TcxViewParams;
AStyle: TcxCacheCellStyle;
begin
for I := 0 to PatternCount - 1 do
begin
APattern := Patterns[I];
R := APattern.GetBoundsRelativeTo(ATop, ALeft);
if APattern.IsColumn then
begin
AStyle := GetContentParams(ARecord, TcxGridColumn(APattern.Data),
AViewParams, GridLines, GridLineColor);
AddVisualDataItem(R, Provider.RegisterStyle(AStyle), ARecord, TcxGridColumn(APattern.Data));
end
else
AddVisualItemEx(R, '', GetPatternParams(ARecord, APattern), taLeftJustify, [], clDefault, True);
end;
end;
function TcxGridTableViewExport.DoMergeCell(
AMasterItem, ASlaveItem: TcxExportVisualItem): Boolean;
var
AColumn: TcxGridColumn;
AMasterValue, ASlaveValue: Variant;
AMasterProperties, ASlaveProperties: TcxCustomEditProperties;
begin
Result := AMasterItem <> ASlaveItem;
with AMasterItem.Bounds do
begin
Result := Result and not TcxGridDataRow(AMasterItem.Data).Expanded and
(Bottom = ASlaveItem.Bounds.Top) and (Left = ASlaveItem.Bounds.Left) and
(Right = ASlaveItem.Bounds.Right);
end;
if Result then
begin
AColumn := TcxGridColumn(AMasterItem.Data2);
AMasterValue := GetViewItemValueEx(
TcxGridDataRow(AMasterItem.Data), AColumn, AMasterProperties);
ASlaveValue := GetViewItemValueEx(
TcxGridDataRow(ASlaveItem.Data), AColumn, ASlaveProperties);
Result := AColumn.DoCompareValuesForCellMerging(TcxGridDataRow(AMasterItem.Data), AMasterProperties,
AMasterValue, TcxGridDataRow(ASlaveItem.Data), ASlaveProperties, ASlaveValue);
end;
if Result then
begin
AMasterItem.Bounds.Bottom := ASlaveItem.Bounds.Bottom;
ASlaveItem.Hidden := True;
ASlaveItem.Slave := True;
end;
end;
procedure TcxGridTableViewExport.ExportCells;
var
R: TRect;
I: Integer;
AItem: TcxExportVisualItem;
begin
inherited ExportCells;
R := Rect(0, 0, Columns.Count - 1, Rows.Count - 1);
for I := 0 to VisualItemCount - 1 do
begin
AItem := VisualItems[I];
if AItem.Slave then Continue;
if AItem.Hidden then
begin
if AItem.Data is TcxGridMasterDataRow and TcxGridMasterDataRow(AItem.Data).Expanded then
ExportDetailCell(AItem);
Continue;
end;
if AItem.IsBackground then
FillRealArea(AItem.Bounds, AItem.Style, clBtnShado
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?