参考代码:
1、调用过程
ShowDecisionGridCellInfo(DecisionGrid);
2、逻辑实现
procedure ShowDecisionGridCellInfo(ADecisionGrid: TDecisionGrid);
var
I: Integer;
P: TPoint;
lMsg: TStringList;
lSourceCell: TGridCoord;
lSmallIntArray: TSmallIntArray;
lSubLevel: Integer;
lDecisionDataSet: TDecisionDataSet;
begin
if Assigned(ADecisionGrid) and
Assigned(ADecisionGrid.DecisionSource) and
Assigned(ADecisionGrid.DecisionSource.DecisionCube) and
Assigned(ADecisionGrid.DecisionSource.DecisionCube.DataSource) and
Assigned(ADecisionGrid.DecisionSource.DecisionCube.DataSource.DataSet) then
begin
lDecisionDataSet := ADecisionGrid.DecisionSource.DecisionCube.DataSource.DataSet as TDecisionDataSet;
P.X := -1; P.Y := -1;
Borland.Delphi.Windows.GetCursorPos(P);
P := ADecisionGrid.ScreenToClient(P);
lSourceCell := ADecisionGrid.MouseCoord(P.X, P.Y);
lSmallIntArray := TSmallIntArray.Create(0, 0);
try
P.X := lSourceCell.X - ADecisionGrid.DecisionSource.nOpenRowDims - 1;
if (ADecisionGrid.DecisionSource.nColDims > 0) and
(ADecisionGrid.DecisionSource.nOpenColDims = 0) then
P.Y := lSourceCell.Y - 2
else
P.Y := lSourceCell.Y - ADecisionGrid.DecisionSource.nOpenColDims - 1;
if (0 <= P.X) and (P.X < ADecisionGrid.DecisionSource.nDataCols) and
(0 <= P.Y) and (P.Y < ADecisionGrid.DecisionSource.nDataRows) and
ADecisionGrid.DecisionSource.GetValueArray(P.X, P.Y, lSmallIntArray) then
begin
lMsg := TStringList.Create;
try
for I := 0 to lSmallIntArray.Limit - 1 do
begin
if lSmallIntArray[I] <> -1 then
lMsg.Add(ADecisionGrid.DecisionSource.GetDefDimsName(I) + '(' +
lDecisionDataSet.DecisionDef.DimensionDefs[I].FieldName + ')' +
': ' +
ADecisionGrid.DecisionSource.GetMemberDisplayText(I, lSmallIntArray[I]) + '(' +
ADecisionGrid.DecisionSource.GetMemberAsString(I, lSmallIntArray[I]) + ')'
)
else
lMsg.Add(ADecisionGrid.DecisionSource.GetDefDimsName(I) + ': ' +
'[小计]()');
end;
lSubLevel := -1;
I := ADecisionGrid.DecisionSource.CurrentSum;
jsDialogs.ShowMsg(lMsg.Text,
ADecisionGrid.DecisionSource.GetDefSummsName(I) + '(' +
lDecisionDataSet.DecisionDef.SummaryDefs[I].FieldName + ')' +
': ' +
ADecisionGrid.DecisionSource.GetDataAsString(P.Y, P.X, lSubLevel));
finally
lMsg.Free;
end;
end;
finally
lSmallIntArray.free;
end;
end;
end; |