cxgridrows.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,895 行 · 第 1/5 页
PAS
1,895 行
end;
end;
begin
if FIsMerged then
begin
UpdateBounds;
Exit;
end;
if not CanCellMerging or GridViewInfo.IsInternalUse then Exit;
AProperties := Properties;
AValue := DisplayValue;
for I := RecordViewInfo.Index + 1 to RecordViewInfo.RecordsViewInfo.Count - 1 do
begin
ARowViewInfo := RecordViewInfo.RecordsViewInfo[I];
if ARowViewInfo is TcxGridDataRowViewInfo then
begin
ACellViewInfo := TcxGridDataRowViewInfo(ARowViewInfo).InternalCellViewInfos[Item.VisibleIndex];
if Item.DoCompareValuesForCellMerging(
RecordViewInfo.GridRecord, AProperties, AValue,
TcxGridDataRowViewInfo(ARowViewInfo).GridRecord, ACellViewInfo.Properties, ACellViewInfo.DisplayValue) then
begin
if not FIsMerging then
begin
FIsMerging := True;
FMergedCells := TList.Create;
end;
FMergedCells.Add(ACellViewInfo);
ACellViewInfo.FIsMerged := True;
ACellViewInfo.FMergingCell := Self;
if not ACellViewInfo.CanBeMergingCell then Break;
end
else
Break;
end
else
Break;
end;
UpdateBounds;
end;
procedure TcxGridDataCellViewInfo.AfterRowsViewInfoOffset;
begin
FIsMerging := False;
FIsMerged := False;
FreeAndNil(FMergedCells);
FMergingCell := nil;
end;
function TcxGridDataCellViewInfo.CalculateSelected: Boolean;
var
AMergedCellOfFocusedRow: TcxGridDataCellViewInfo;
procedure CheckMergedCells;
var
I: Integer;
begin
if not Result and GridView.OptionsSelection.MultiSelect then
for I := 0 to MergedCellCount - 1 do
begin
Result := MergedCells[I].Selected;
if Result then Break;
end;
end;
begin
Result := inherited CalculateSelected;
if FIsMerging then
if not GridView.OptionsSelection.MultiSelect or
GridView.OptionsSelection.InvertSelect or Item.Focused then
if not RecordViewInfo.Focused then
begin
AMergedCellOfFocusedRow := MergedCellOfFocusedRow;
if AMergedCellOfFocusedRow <> nil then
Result := AMergedCellOfFocusedRow.Selected
else
CheckMergedCells;
end
else
else
CheckMergedCells;
end;
function TcxGridDataCellViewInfo.CalculateWidth: Integer;
begin
Result := RecordViewInfo.GetCellWidth(Item.VisibleIndex);
end;
function TcxGridDataCellViewInfo.CanBeMergingCell: Boolean;
begin
Result := not RecordViewInfo.Expanded;
end;
function TcxGridDataCellViewInfo.CanCellMerging: Boolean;
begin
Result := CanBeMergingCell and TcxGridColumnAccess.CanCellMerging(Item);
end;
function TcxGridDataCellViewInfo.GetBorderColor(AIndex: TcxBorder): TColor;
begin
Result := GridViewInfo.GridLineColor;
end;
function TcxGridDataCellViewInfo.GetBorders: TcxBorders;
begin
Result := RecordViewInfo.GetCellBorders(Item.IsMostRight,
Item.IsMostBottom and RecordViewInfo.CellsAreaViewInfo.IsBottom);
end;
function TcxGridDataCellViewInfo.GetBorderWidth(AIndex: TcxBorder): Integer;
begin
Result := GridViewInfo.GridLineWidth;
end;
function TcxGridDataCellViewInfo.GetFocused: Boolean;
var
AMergedCellOfFocusedRow: TcxGridDataCellViewInfo;
begin
Result := inherited GetFocused;
if FIsMerging and not RecordViewInfo.Focused then
begin
AMergedCellOfFocusedRow := MergedCellOfFocusedRow;
if AMergedCellOfFocusedRow <> nil then
Result := AMergedCellOfFocusedRow.Focused;
end;
end;
function TcxGridDataCellViewInfo.GetMultiLine: Boolean;
begin
Result := inherited GetMultiLine or RecordViewInfo.AutoHeight;
end;
function TcxGridDataCellViewInfo.GetPainterClass: TcxCustomGridCellPainterClass;
begin
Result := TcxGridDataCellPainter;
end;
function TcxGridDataCellViewInfo.GetVisible: Boolean;
begin
Result := not FIsMerged and inherited GetVisible;
end;
function TcxGridDataCellViewInfo.GetVisibleForHitTest: Boolean;
begin
Result := inherited GetVisible;
end;
function TcxGridDataCellViewInfo.HasHitTestPoint(const P: TPoint): Boolean;
begin
if IsMerging then
Result := PtInRect(OriginalBounds, P)
else
Result := inherited HasHitTestPoint(P);
end;
procedure TcxGridDataCellViewInfo.Offset(DX, DY: Integer);
begin
inherited;
OffsetRect(OriginalBounds, DX, DY);
end;
procedure TcxGridDataCellViewInfo.RemoveMergedCell(ACellViewInfo: TcxGridDataCellViewInfo);
begin
FMergedCells.Remove(ACellViewInfo);
end;
procedure TcxGridDataCellViewInfo.BeforeRecalculation;
begin
inherited;
RecordViewInfo.BeforeCellRecalculation(Self);
end;
procedure TcxGridDataCellViewInfo.Calculate(ALeftBound, ATopBound: Integer;
AWidth: Integer = -1; AHeight: Integer = -1);
begin
inherited;
if not FIsMerging then
begin
OriginalBounds := Bounds;
FOriginalHeight := Height;
end;
if FIsMerged and (FMergingCell <> nil) then
FMergingCell.Recalculate;
end;
function TcxGridDataCellViewInfo.MouseMove(AHitTest: TcxCustomGridHitTest;
AShift: TShiftState): Boolean;
begin
if IsMerged then
Result := MergingCell.MouseMove(AHitTest, AShift)
else
Result := inherited MouseMove(AHitTest, AShift);
end;
procedure TcxGridDataCellViewInfo.Paint(ACanvas: TcxCanvas = nil);
begin
inherited;
if FIsMerged and RecordViewInfo.CellsAreaViewInfo.DrawMergedCells then
FMergingCell.Paint(ACanvas);
end;
{ TcxGridDataRowCellsAreaViewInfo }
constructor TcxGridDataRowCellsAreaViewInfo.Create(ARecordViewInfo: TcxCustomGridRecordViewInfo);
begin
inherited;
Visible := CalculateVisible;
end;
function TcxGridDataRowCellsAreaViewInfo.GetRecordViewInfo: TcxGridDataRowViewInfo;
begin
Result := TcxGridDataRowViewInfo(inherited RecordViewInfo);
end;
function TcxGridDataRowCellsAreaViewInfo.CalculateHeight: Integer;
begin
Result := 0;
end;
function TcxGridDataRowCellsAreaViewInfo.CalculateVisible: Boolean;
begin
Result := RecordViewInfo.GridViewInfo.HeaderViewInfo.Count = 0;
end;
function TcxGridDataRowCellsAreaViewInfo.CalculateWidth: Integer;
begin
Result := 0;
end;
function TcxGridDataRowCellsAreaViewInfo.GetBorders: TcxBorders;
begin
Result := GridViewInfo.GetCellBorders(True, IsBottom);
end;
function TcxGridDataRowCellsAreaViewInfo.GetIsBottom: Boolean;
begin
Result :=
not RecordViewInfo.HasPreview or (GridView.Preview.Place = ppTop) or
(RecordViewInfo.PreviewViewInfo.Height = 0);
end;
function TcxGridDataRowCellsAreaViewInfo.CanDrawSelected: Boolean;
begin
Result := True;
end;
function TcxGridDataRowCellsAreaViewInfo.DrawMergedCells: Boolean;
begin
Result := RecordViewInfo.Transparent;
end;
{ TcxGridPreviewCellViewInfo }
function TcxGridPreviewCellViewInfo.GetPreview: TcxGridPreview;
begin
Result := GridView.Preview;
end;
function TcxGridPreviewCellViewInfo.CalculateHeight: Integer;
function GetMaxValue: Integer;
begin
if Preview.MaxLineCount = 0 then
Result := 0
else
begin
Result := Preview.MaxLineCount * GridViewInfo.GetFontHeight(Params.Font);
GetCellTextAreaSize(Result);
end;
end;
begin
if CacheItem.IsPreviewHeightAssigned then
Result := Height
else
begin
if AutoHeight then
Result := inherited CalculateHeight
else
begin
CalculateParams;
Result := GetMaxValue;
end;
if Result <> 0 then
Result := RecordViewInfo.RecordsViewInfo.GetCellHeight(Result);
end;
end;
function TcxGridPreviewCellViewInfo.CalculateWidth: Integer;
begin
Result := RecordViewInfo.DataWidth;
end;
function TcxGridPreviewCellViewInfo.GetAutoHeight: Boolean;
begin
Result := Preview.AutoHeight;
end;
function TcxGridPreviewCellViewInfo.GetBackgroundBitmap: TBitmap;
begin
Result := GridView.BackgroundBitmaps.GetBitmap(bbPreview);
end;
function TcxGridPreviewCellViewInfo.GetBorders: TcxBorders;
begin
Result := GridViewInfo.GetCellBorders(True,
(Preview.Place = ppBottom) or (RecordViewInfo.CellViewInfoCount = 0));
end;
procedure TcxGridPreviewCellViewInfo.GetEditViewDataContentOffsets(var R: TRect);
begin
inherited;
R.Left := Preview.LeftIndent - (cxGridCellTextOffset - cxGridEditOffset);
R.Right := Preview.RightIndent - (cxGridCellTextOffset - cxGridEditOffset);
end;
function TcxGridPreviewCellViewInfo.GetHeight: Integer;
begin
if CacheItem.IsPreviewHeightAssigned then
Result := CacheItem.PreviewHeight
else
begin
Result := CalculateHeight;
CacheItem.PreviewHeight := Result;
end;
end;
function TcxGridPreviewCellViewInfo.GetHitTestClass: TcxCustomGridHitTestClass;
begin
Result := TcxGridPreviewHitTest;
end;
function TcxGridPreviewCellViewInfo.GetMaxLineCount: Integer;
begin
Result := Preview.MaxLineCount;
end;
function TcxGridPreviewCellViewInfo.GetMultiLine: Boolean;
begin
Result := True;
end;
function TcxGridPreviewCellViewInfo.GetTextAreaBounds: TRect;
begin
Result := inherited GetTextAreaBounds;
InflateRect(Result, cxGridCellTextOffset, 0);
Inc(Result.Left, Preview.LeftIndent);
Dec(Result.Right, Preview.RightIndent);
end;
function TcxGridPreviewCellViewInfo.SupportsZeroHeight: Boolean;
begin
Result := True;
end;
{ TcxGridDataRowViewInfo }
constructor TcxGridDataRowViewInfo.Create(ARecordsViewInfo: TcxCustomGridRecordsViewInfo;
ARecord: TcxCustomGridRecord);
begin
inherited;
CreateViewInfos;
end;
destructor TcxGridDataRowViewInfo.Destroy;
begin
DestroyViewInfos;
inherited;
end;
function TcxGridDataRowViewInfo.GetCellViewInfo(Index: Integer): TcxGridDataCellViewInfo;
begin
Result := InternalCellViewInfos[Index];
if Result = nil then
begin
Result := GetCellViewInfoClass(Index).Create(Self, GridView.VisibleColumns[Index]);
FCellViewInfos[Index] := Result;
end;
end;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?