Procedure DrawSubHeader(ACol : Integer; Canvas : TCanvas);
Var HRect : TRect;
Begin
// Получаем прямоугольник, объединяющий несколько колонок,
// для которых рисуем сложный заголовок
HRect:=GetHeaderRect(ACol);
// По высоте берем только часть прямоугольника
// так как вторая часть — обычный заголовок
HRect.Bottom:=RectHeight(HRect) div TITLE_SUBHEADER;
Canvas.FillRect(HRect);
// Вписываем текст,
// который получаем методом GetHeaderText
InflateRect(HRect,-1,-1);
WriteText(Canvas, HRect, GetHeaderText(ACol) , taCenter);
// Рисуем 3D-окантовку
Paint3dRect(Canvas.Handle,HRect);
End;
Function TexDBGrid.GetHeaderRect(ACol : Integer) : TRect;
Var MasterCol : TColumn;
Index,Shift ,
Count,i : Integer;
Begin
// Если в опциях отключен показ сетки, это нужно учесть при расчете
// общего прямоугольника
IF [dgColLines] * Options = [dgColLines] Then Shift:=1
Else Shift:=0;
Index:=ACol;
Count:=1;
// получаем информацию для текущей колонки грида:
// в какой объединяющий блок она входит
// Index — с какой колонки начинается объединяющий блок
// Count — сколько колонок он включает
IF Assigned(FOnGetHeaderRect) Then FOnGetHeaderRect(ACol, Index, Count);
IF Index+Count-1 > Columns.Count-1 Then
Begin
Index:=ACol;
Count:=1;
End;
// В результате нужно получить прямоугольник, состоящий из
// всех, включенных в объединенный блок колонок
Result:=CalcTitleRect(Columns[Index],0,MasterCol);
For i:=Index+1 To Index + Count -1 Do
Result.Right:=Result.Right + RectWidth(CalcTitleRect(Columns[i] ,0,MasterCol)) + Shift;
End;
Const
GeoColumns = 3;
ParamColumns = 2;
...
//----------------------------------------------------------------------------------------
// Получить для текущей колонки информацию о том, в какое объеденение колонок она попадает
//----------------------------------------------------------------------------------------
procedure TfExDBG.GetHeaderRect(ACol: Integer; var IndexStart, Count: Integer);
begin
IF ACol < GeoColumns
Then Begin
IndexStart:=0;
Count:=GeoColumns;
End
Else Begin
IndexStart:=GeoColumns;
Count:=ParamColumns;
End
end;
|