Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.023 c
1-1103096865
Змей
2004-12-15 10:47
2004.12.26
DriveCombobox


1-1102417746
COOLer
2004-12-07 14:09
2004.12.26
подсветка букв в RichEdit


3-1101447040
LEXX_55
2004-11-26 08:30
2004.12.26
SQL


14-1101807529
clickmaker
2004-11-30 12:38
2004.12.26
Решил пополнить ряды файлманагерописателей. Зацените


1-1102847589
Frozzen
2004-12-12 13:33
2004.12.26
Копирование буфера Move