Форум: "Базы";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизdxDBGrid Найти похожие ветки
← →
MakNik (2004-11-22 10:07) [0]Подскажите, пожалуйста, как в dxDBGrid сделать объединение ячеек, как в Excel?
Необходимо получить сетку такого вида:
---------|-----------|----------|---------|-
| Строка 1а |Строка 1а | |
Строка 1 |-----------|----------| Строка 1|
| Строка 1б |Строка 1б | |
---------|-----------|----------|---------|-...
| Строка 2а |Строка 2а | |
Строка 2 |-----------|----------| Строка 2|
| Строка 2б |Строка 2б | |
---------|-----------|----------|---------|-...
...
← →
Garry_c (2004-11-22 10:12) [1]Ты посмотри тему
Много строк в одной записи! (ser_ega 22.11.04 08:03)
может поможет.
← →
janb (2004-11-22 10:35) [2]Макник рисунок можешь не рисовать
Garry_c (22.11.04 10:12) [1]
аха, он тебе поможеть
← →
MakNik (2004-11-23 14:04) [3]рисую объединенную ячейку на обычном DBGrid - получается... а вот с dxDBGrid - не получается...
(вызов DrawRowButton..)const
ALIGN_FLAGS: array[TAlignment] of Integer =
(DT_LEFT or DT_SINGLELINE or DT_EXPANDTABS or DT_NOPREFIX,
DT_RIGHT or DT_SINGLELINE or DT_EXPANDTABS or DT_NOPREFIX,
DT_CENTER or DT_SINGLELINE or DT_EXPANDTABS or DT_NOPREFIX);
procedure Paint3dRect(DC: HDC; ARect: TRect);
begin
InflateRect(ARect, 1, 1);
DrawEdge(DC, ARect, BDR_RAISEDINNER, BF_BOTTOMRIGHT);
DrawEdge(DC, ARect, BDR_RAISEDINNER, BF_TOPLEFT);
end;
procedure TForm.WriteText(ACanvas: TCanvas; ARect: TRect; const Text: string; Alignment: TAlignment);
var
DrawRect: TRect;
begin
DrawRect := Rect(ARect.Left + 1, ARect.Top + 1, ARect.Right, ARect.Bottom);
DrawText(ACanvas.Handle, PChar(Text), Length(Text), DrawRect,
ALIGN_FLAGS[Alignment] or DT_VCENTER or DT_END_ELLIPSIS);
end;
procedure TTabel.DrawRowButton(Rect: TRect; Text: string; Style: TFontStyles; Alignment: TAlignment);
var
FullRect: TRect;
Col: TColumn;
begin
FullRect := Rect;
FullRect.Left := IndicatorWidth + 1;
FullRect.Right := CalcTitleRect(Columns[Columns.Count - 1], 0, Col).Right;
DrawCellButton(FullRect, Text, Style, [], Alignment);
end;
Procedure TForm.DrawCellButton(Rect:TRect; Text:String;Style: TFontStyles; State: TGridDrawState; Alignment:TAlignment);
Var Shift:Integer;
Begin
//Очищаем ячейку
Canvas.Brush.Color:=clBtnFace;
Canvas.Font.Color:=clBtnText;
Canvas.Font.Style:=Style;
Canvas.FillRect(Rect);
//Если ячейка фиксирована, то мы получим TRect меньшего размера,
//чем для обычной ячейки. Это нужно учесть
Shift:=-2+ORD(gdFixed in State);
//Вписываем текст
InFlateRect(Rect,Shift,0);
WriteText(Canvas,Rect,Text,Alignment);
InflateRect(Rect,(-1)*Shift,0);
//рисуем по размеру ячейки dutton
//только если это не фиксированная ячейка, так как для нее окантовка уже нарисована
IF NOT (gdFixed in State) Then
Begin
//Рисуем аналог разделительных линий между фиксированными ячейками грида
//(они рисуются черным цветом, в отличие от серых линий между ячейками
//данных (grids.pas)
InflateRect(Rect, 1, 1);
Rect.Top:=Rect.Top + 1;
FrameRect(Canvas.Handle, Rect, GetStockObject(BLACK_BRUSH));
Rect.Top:=Rect.Top - 1;
// Закончили имитацию линий между фиксированными ячейками.
InflateRect(Rect, -2, -2);
Paint3dRect(Canvas.Handle, Rect);
End;
end;
← →
MakNik (2004-11-25 18:16) [4]А как разделительную линию после каждой четной строки сделать более "жирной"?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.05 c