![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Grid [D6, WinXP]
dm37 © (2005-11-11 09:19:00)Подскажите, возможно ли сделать такое
как известно в grid текст выглядит так:
строка 1: a1 a2 a3
строка 2: b1 b2 b3
нужно так:
строка 1: первая группа
строка 2: a1 a2 a3
строка 3: вторая группа
строка 4: b1 b2 b3
т.е. перерисовать одну строку в таблице без столбцов (например, как в Excel)
ЮЮ (2005-11-14 05:24:00) [1]
procedure TForm1.FormCreate(Sender: TObject);
begin
// всю отрисовку берём на себя
StringGrid1.DefaultDrawing := false;
StringGrid1.Options := StringGrid1.Options - [goVertLine, goHorzLine];
StringGrid1.ColCount := 3;
StringGrid1.FixedCols := 0;
StringGrid1.RowCount := 4;
StringGrid1.FixedRows := 0;
StringGrid1.Cells[0, 0] := 'первая группа';
StringGrid1.Cells[1, 0] := '|';
StringGrid1.Cells[2, 0] := '|';
StringGrid1.Cells[0, 1] := 'a1';
StringGrid1.Cells[1, 1] := 'a2';
StringGrid1.Cells[2, 1] := 'a3';
StringGrid1.Cells[0, 2] := 'вторая группа';
StringGrid1.Cells[1, 2] := '|';
StringGrid1.Cells[2, 2] := '|';
StringGrid1.Cells[0, 3] := 'b1';
StringGrid1.Cells[1, 3] := 'b2';
StringGrid1.Cells[2, 3] := 'b3';
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
col: integer;
begin
if StringGrid1.Cells[ACol, ARow] = '|' then exit;
// включаем в Rect объединяемые ячейки
col := Acol + 1;
while
(col < StringGrid1.ColCount) and (StringGrid1.Cells[col, ARow] = '|')
do begin
Rect.Right := Rect.Right + StringGrid1.ColWidths[col] + StringGrid1.GridLineWidth;
inc(col);
end;
// очищаем прямоугольник
StringGrid1.Canvas.Brush.Style := bsSolid;
StringGrid1.Canvas.Brush.Color := StringGrid1.Color;
StringGrid1.Canvas.FillRect(Rect);
// рисуем сетку
StringGrid1.Canvas.Pen.Color := clSilver;
StringGrid1.Canvas.Rectangle(Rect);
//выводим текст
Rect.Right := Rect.Right - 1;
Rect.Bottom := Rect.Bottom - 1;
StringGrid1.Canvas.Font.Assign(StringGrid1.Font);
StringGrid1.Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, StringGrid1.Cells[ACol, ARow]);
end;
dm37 (2005-11-11 09:53:00) [2]StringGrid
ЮЮ (2005-11-11 09:45:00) [3]Конечно можно. Никто ведь не запрещает рисовать на канвасе вне пределов ARect, переданного в качестве параметра соответствующего OnDrawCell
P.S. Grid-то какой?